diff --git a/.changeset/mighty-panthers-play.md b/.changeset/mighty-panthers-play.md deleted file mode 100644 index ef054787b..000000000 --- a/.changeset/mighty-panthers-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Enroll new validators for alephzeroevmmainnet, chilizmainnet, flowmainnet, immutablezkevmmainnet, metal, polynomialfi, rarichain, rootstockmainnet, superpositionmainnet, flame, prom, inevm. diff --git a/.changeset/odd-frogs-move.md b/.changeset/odd-frogs-move.md deleted file mode 100644 index d99e99107..000000000 --- a/.changeset/odd-frogs-move.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Added helpers to Token and token adapters to get bridged supply of tokens" diff --git a/.changeset/real-phones-bake.md b/.changeset/real-phones-bake.md deleted file mode 100644 index 589c4e012..000000000 --- a/.changeset/real-phones-bake.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperlane-xyz/infra': minor -'@hyperlane-xyz/cli': minor -'@hyperlane-xyz/sdk': minor ---- - -Implements persistent relayer for use in CLI diff --git a/.changeset/strange-poems-build.md b/.changeset/strange-poems-build.md deleted file mode 100644 index ffb1f8f23..000000000 --- a/.changeset/strange-poems-build.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperlane-xyz/widgets': minor ---- - -Props and style update: IconButton and Tooltip -New Icons: XCircleIcon and SwapIcon diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b780d6585..52410ecd6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -109,9 +109,18 @@ jobs: - name: Unit Tests run: yarn test:ci - cli-e2e: + cli-e2e-matrix: runs-on: ubuntu-latest needs: [yarn-install] + strategy: + fail-fast: false + matrix: + test: + - core + - relay + - warp-read + - warp-apply + - warp-deploy steps: - uses: actions/checkout@v4 with: @@ -130,8 +139,21 @@ jobs: - name: Checkout registry uses: ./.github/actions/checkout-registry - - name: CLI e2e tests + - name: CLI e2e tests (${{ matrix.test }}) run: yarn --cwd typescript/cli test:e2e + env: + CLI_E2E_TEST: ${{ matrix.test }} + + cli-e2e: + runs-on: ubuntu-latest + needs: cli-e2e-matrix + if: always() + steps: + - name: Check cli-e2e matrix status + if: ${{ needs.cli-e2e-matrix.result != 'success' }} + run: | + echo "CLI E2E tests failed" + exit 1 agent-configs: runs-on: ubuntu-latest diff --git a/.registryrc b/.registryrc index 9f4316497..19d87576f 100644 --- a/.registryrc +++ b/.registryrc @@ -1 +1 @@ -3e366eae1d49da4270695b157d7af00bb761156a +82013508db45dcd55b44d2721414d26817686c8f diff --git a/rust/main/agents/relayer/src/msg/pending_message.rs b/rust/main/agents/relayer/src/msg/pending_message.rs index cee00aed7..d63b7b03f 100644 --- a/rust/main/agents/relayer/src/msg/pending_message.rs +++ b/rust/main/agents/relayer/src/msg/pending_message.rs @@ -468,7 +468,7 @@ impl PendingOperation for PendingMessage { actual_gas_for_message = ?gas_used_by_operation, message_gas_estimate = ?operation_estimate, submission_gas_estimate = ?submission_estimated_cost, - message = ?self.message, + hyp_message = ?self.message, "Gas used by message submission" ); } diff --git a/rust/main/agents/scraper/src/agent.rs b/rust/main/agents/scraper/src/agent.rs index fd9afc6d7..97f6bd3db 100644 --- a/rust/main/agents/scraper/src/agent.rs +++ b/rust/main/agents/scraper/src/agent.rs @@ -3,16 +3,17 @@ use std::{collections::HashMap, sync::Arc}; use async_trait::async_trait; use derive_more::AsRef; use futures::future::try_join_all; +use hyperlane_core::{Delivery, HyperlaneDomain, HyperlaneMessage, InterchainGasPayment, H512}; +use tokio::{sync::mpsc::Receiver as MpscReceiver, task::JoinHandle}; +use tracing::{info_span, instrument::Instrumented, trace, Instrument}; + use hyperlane_base::{ broadcast::BroadcastMpscSender, metrics::AgentMetrics, settings::IndexSettings, AgentMetadata, BaseAgent, ChainMetrics, ContractSyncMetrics, ContractSyncer, CoreMetrics, HyperlaneAgentCore, MetricsUpdater, SyncOptions, }; -use hyperlane_core::{Delivery, HyperlaneDomain, HyperlaneMessage, InterchainGasPayment, H512}; -use tokio::{sync::mpsc::Receiver as MpscReceiver, task::JoinHandle}; -use tracing::{info_span, instrument::Instrumented, trace, Instrument}; -use crate::{chain_scraper::HyperlaneSqlDb, db::ScraperDb, settings::ScraperSettings}; +use crate::{db::ScraperDb, settings::ScraperSettings, store::HyperlaneDbStore}; /// A message explorer scraper agent #[derive(Debug, AsRef)] @@ -31,7 +32,7 @@ pub struct Scraper { #[derive(Debug)] struct ChainScraper { index_settings: IndexSettings, - db: HyperlaneSqlDb, + store: HyperlaneDbStore, domain: HyperlaneDomain, } @@ -59,7 +60,7 @@ impl BaseAgent for Scraper { for domain in settings.chains_to_scrape.iter() { let chain_setup = settings.chain_setup(domain).expect("Missing chain config"); - let db = HyperlaneSqlDb::new( + let store = HyperlaneDbStore::new( db.clone(), chain_setup.addresses.mailbox, domain.clone(), @@ -74,7 +75,7 @@ impl BaseAgent for Scraper { domain.id(), ChainScraper { domain: domain.clone(), - db, + store, index_settings: chain_setup.index.clone(), }, ); @@ -132,7 +133,7 @@ impl Scraper { /// This will spawn long-running contract sync tasks async fn scrape(&self, domain_id: u32) -> Instrumented> { let scraper = self.scrapers.get(&domain_id).unwrap(); - let db = scraper.db.clone(); + let store = scraper.store.clone(); let index_settings = scraper.index_settings.clone(); let domain = scraper.domain.clone(); @@ -142,7 +143,7 @@ impl Scraper { domain.clone(), self.core_metrics.clone(), self.contract_sync_metrics.clone(), - db.clone(), + store.clone(), index_settings.clone(), ) .await; @@ -152,7 +153,7 @@ impl Scraper { domain.clone(), self.core_metrics.clone(), self.contract_sync_metrics.clone(), - db.clone(), + store.clone(), index_settings.clone(), ) .await, @@ -162,7 +163,7 @@ impl Scraper { domain, self.core_metrics.clone(), self.contract_sync_metrics.clone(), - db, + store, index_settings.clone(), BroadcastMpscSender::::map_get_receiver(maybe_broadcaster.as_ref()).await, ) @@ -183,7 +184,7 @@ impl Scraper { domain: HyperlaneDomain, metrics: Arc, contract_sync_metrics: Arc, - db: HyperlaneSqlDb, + store: HyperlaneDbStore, index_settings: IndexSettings, ) -> ( Instrumented>, @@ -196,7 +197,7 @@ impl Scraper { &domain, &metrics.clone(), &contract_sync_metrics.clone(), - db.into(), + store.into(), ) .await .unwrap(); @@ -217,7 +218,7 @@ impl Scraper { domain: HyperlaneDomain, metrics: Arc, contract_sync_metrics: Arc, - db: HyperlaneSqlDb, + store: HyperlaneDbStore, index_settings: IndexSettings, ) -> Instrumented> { let sync = self @@ -227,7 +228,7 @@ impl Scraper { &domain, &metrics.clone(), &contract_sync_metrics.clone(), - Arc::new(db.clone()) as _, + Arc::new(store.clone()) as _, ) .await .unwrap(); @@ -248,7 +249,7 @@ impl Scraper { domain: HyperlaneDomain, metrics: Arc, contract_sync_metrics: Arc, - db: HyperlaneSqlDb, + store: HyperlaneDbStore, index_settings: IndexSettings, tx_id_receiver: Option>, ) -> Instrumented> { @@ -259,7 +260,7 @@ impl Scraper { &domain, &metrics.clone(), &contract_sync_metrics.clone(), - Arc::new(db.clone()), + Arc::new(store.clone()), ) .await .unwrap(); diff --git a/rust/main/agents/scraper/src/db/message.rs b/rust/main/agents/scraper/src/db/message.rs index 423c24058..0796400f6 100644 --- a/rust/main/agents/scraper/src/db/message.rs +++ b/rust/main/agents/scraper/src/db/message.rs @@ -31,36 +31,6 @@ pub struct StorableMessage<'a> { } impl ScraperDb { - /// Get the highest message nonce that is stored in the database. - #[instrument(skip(self))] - pub async fn last_message_nonce( - &self, - origin_domain: u32, - origin_mailbox: &H256, - ) -> Result> { - #[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] - enum QueryAs { - Nonce, - } - - let last_nonce = message::Entity::find() - .filter(message::Column::Origin.eq(origin_domain)) - .filter(message::Column::OriginMailbox.eq(address_to_bytes(origin_mailbox))) - .select_only() - .column_as(message::Column::Nonce.max(), QueryAs::Nonce) - .into_values::() - .one(&self.0) - .await? - .map(|idx| idx as u32); - debug!( - ?last_nonce, - origin_domain, - ?origin_mailbox, - "Queried last message nonce from database" - ); - Ok(last_nonce) - } - /// Get the dispatched message associated with a nonce. #[instrument(skip(self))] pub async fn retrieve_message_by_nonce( diff --git a/rust/main/agents/scraper/src/main.rs b/rust/main/agents/scraper/src/main.rs index cab1a0963..f9b0d5971 100644 --- a/rust/main/agents/scraper/src/main.rs +++ b/rust/main/agents/scraper/src/main.rs @@ -17,13 +17,12 @@ use agent::Scraper; use eyre::Result; use hyperlane_base::agent_main; -mod db; - mod agent; -mod chain_scraper; mod conversions; mod date_time; +mod db; mod settings; +mod store; #[tokio::main(flavor = "current_thread")] async fn main() -> Result<()> { diff --git a/rust/main/agents/scraper/src/store.rs b/rust/main/agents/scraper/src/store.rs new file mode 100644 index 000000000..58c55a244 --- /dev/null +++ b/rust/main/agents/scraper/src/store.rs @@ -0,0 +1,6 @@ +pub use storage::HyperlaneDbStore; + +mod deliveries; +mod dispatches; +mod payments; +mod storage; diff --git a/rust/main/agents/scraper/src/store/deliveries.rs b/rust/main/agents/scraper/src/store/deliveries.rs new file mode 100644 index 000000000..dc805baaa --- /dev/null +++ b/rust/main/agents/scraper/src/store/deliveries.rs @@ -0,0 +1,43 @@ +use std::collections::HashMap; + +use async_trait::async_trait; +use eyre::Result; + +use hyperlane_core::{Delivery, HyperlaneLogStore, Indexed, LogMeta, H512}; + +use crate::db::StorableDelivery; +use crate::store::storage::{HyperlaneDbStore, TxnWithId}; + +#[async_trait] +impl HyperlaneLogStore for HyperlaneDbStore { + /// Store delivered message ids from the destination mailbox into the database. + /// We store only delivered messages ids from blocks and transaction which we could successfully + /// insert into database. + async fn store_logs(&self, deliveries: &[(Indexed, LogMeta)]) -> Result { + if deliveries.is_empty() { + return Ok(0); + } + let txns: HashMap = self + .ensure_blocks_and_txns(deliveries.iter().map(|r| &r.1)) + .await? + .map(|t| (t.hash, t)) + .collect(); + let storable = deliveries + .iter() + .filter_map(|(message_id, meta)| { + txns.get(&meta.transaction_id) + .map(|txn| (*message_id.inner(), meta, txn.id)) + }) + .map(|(message_id, meta, txn_id)| StorableDelivery { + message_id, + meta, + txn_id, + }); + + let stored = self + .db + .store_deliveries(self.domain.id(), self.mailbox_address, storable) + .await?; + Ok(stored as u32) + } +} diff --git a/rust/main/agents/scraper/src/store/dispatches.rs b/rust/main/agents/scraper/src/store/dispatches.rs new file mode 100644 index 000000000..31aecedd9 --- /dev/null +++ b/rust/main/agents/scraper/src/store/dispatches.rs @@ -0,0 +1,64 @@ +use std::collections::HashMap; + +use async_trait::async_trait; +use eyre::Result; + +use hyperlane_core::{ + unwrap_or_none_result, HyperlaneLogStore, HyperlaneMessage, + HyperlaneSequenceAwareIndexerStoreReader, Indexed, LogMeta, H512, +}; + +use crate::db::StorableMessage; +use crate::store::storage::{HyperlaneDbStore, TxnWithId}; + +#[async_trait] +impl HyperlaneLogStore for HyperlaneDbStore { + /// Store dispatched messages from the origin mailbox into the database. + /// We store only messages from blocks and transaction which we could successfully insert + /// into database. + async fn store_logs(&self, messages: &[(Indexed, LogMeta)]) -> Result { + if messages.is_empty() { + return Ok(0); + } + let txns: HashMap = self + .ensure_blocks_and_txns(messages.iter().map(|r| &r.1)) + .await? + .map(|t| (t.hash, t)) + .collect(); + let storable = messages + .iter() + .filter_map(|(message, meta)| { + txns.get(&meta.transaction_id) + .map(|t| (message.inner().clone(), meta, t.id)) + }) + .map(|(msg, meta, txn_id)| StorableMessage { msg, meta, txn_id }); + let stored = self + .db + .store_dispatched_messages(self.domain.id(), &self.mailbox_address, storable) + .await?; + Ok(stored as u32) + } +} + +#[async_trait] +impl HyperlaneSequenceAwareIndexerStoreReader for HyperlaneDbStore { + /// Gets a message by its nonce. + async fn retrieve_by_sequence(&self, sequence: u32) -> Result> { + let message = self + .db + .retrieve_message_by_nonce(self.domain.id(), &self.mailbox_address, sequence) + .await?; + Ok(message) + } + + /// Gets the block number at which the log occurred. + async fn retrieve_log_block_number_by_sequence(&self, sequence: u32) -> Result> { + let tx_id = unwrap_or_none_result!( + self.db + .retrieve_dispatched_tx_id(self.domain.id(), &self.mailbox_address, sequence) + .await? + ); + let block_id = unwrap_or_none_result!(self.db.retrieve_block_id(tx_id).await?); + Ok(self.db.retrieve_block_number(block_id).await?) + } +} diff --git a/rust/main/agents/scraper/src/store/payments.rs b/rust/main/agents/scraper/src/store/payments.rs new file mode 100644 index 000000000..4c5ee465f --- /dev/null +++ b/rust/main/agents/scraper/src/store/payments.rs @@ -0,0 +1,43 @@ +use std::collections::HashMap; + +use async_trait::async_trait; +use eyre::Result; + +use hyperlane_core::{HyperlaneLogStore, Indexed, InterchainGasPayment, LogMeta, H512}; + +use crate::db::StorablePayment; +use crate::store::storage::HyperlaneDbStore; + +#[async_trait] +impl HyperlaneLogStore for HyperlaneDbStore { + /// Store interchain gas payments into the database. + /// We store only interchain gas payments from blocks and transaction which we could + /// successfully insert into database. + async fn store_logs( + &self, + payments: &[(Indexed, LogMeta)], + ) -> Result { + if payments.is_empty() { + return Ok(0); + } + let txns: HashMap = self + .ensure_blocks_and_txns(payments.iter().map(|r| &r.1)) + .await? + .map(|t| (t.hash, t)) + .collect(); + let storable = payments + .iter() + .filter_map(|(payment, meta)| { + txns.get(&meta.transaction_id) + .map(|txn| (payment.inner(), meta, txn.id)) + }) + .map(|(payment, meta, txn_id)| StorablePayment { + payment, + meta, + txn_id, + }); + + let stored = self.db.store_payments(self.domain.id(), storable).await?; + Ok(stored as u32) + } +} diff --git a/rust/main/agents/scraper/src/chain_scraper/mod.rs b/rust/main/agents/scraper/src/store/storage.rs similarity index 67% rename from rust/main/agents/scraper/src/chain_scraper/mod.rs rename to rust/main/agents/scraper/src/store/storage.rs index 0be5b2ef1..5dcde4ed3 100644 --- a/rust/main/agents/scraper/src/chain_scraper/mod.rs +++ b/rust/main/agents/scraper/src/store/storage.rs @@ -12,15 +12,11 @@ use tracing::{trace, warn}; use hyperlane_base::settings::IndexSettings; use hyperlane_core::{ - unwrap_or_none_result, BlockId, BlockInfo, Delivery, HyperlaneDomain, HyperlaneLogStore, - HyperlaneMessage, HyperlaneProvider, HyperlaneSequenceAwareIndexerStoreReader, - HyperlaneWatermarkedLogStore, Indexed, InterchainGasPayment, LogMeta, H256, H512, + BlockId, BlockInfo, HyperlaneDomain, HyperlaneLogStore, HyperlaneProvider, + HyperlaneWatermarkedLogStore, LogMeta, H256, H512, }; -use crate::db::{ - BasicBlock, BlockCursor, ScraperDb, StorableDelivery, StorableMessage, StorablePayment, - StorableTxn, -}; +use crate::db::{BasicBlock, BlockCursor, ScraperDb, StorableTxn}; /// Maximum number of records to query at a time. This came about because when a /// lot of messages are sent in a short period of time we were ending up with a @@ -31,16 +27,16 @@ const CHUNK_SIZE: usize = 50; /// A chain scraper is comprised of all the information and contract/provider /// connections needed to scrape the contracts on a single blockchain. #[derive(Clone, Debug)] -pub struct HyperlaneSqlDb { - mailbox_address: H256, - domain: HyperlaneDomain, - db: ScraperDb, +pub struct HyperlaneDbStore { + pub(crate) mailbox_address: H256, + pub(crate) domain: HyperlaneDomain, + pub(crate) db: ScraperDb, provider: Arc, cursor: Arc, } #[allow(unused)] -impl HyperlaneSqlDb { +impl HyperlaneDbStore { pub async fn new( db: ScraperDb, mailbox_address: H256, @@ -61,21 +57,11 @@ impl HyperlaneSqlDb { }) } - pub fn domain(&self) -> &HyperlaneDomain { - &self.domain - } - - pub async fn last_message_nonce(&self) -> Result> { - self.db - .last_message_nonce(self.domain.id(), &self.mailbox_address) - .await - } - /// Takes a list of txn and block hashes and ensure they are all in the /// database. If any are not it will fetch the data and insert them. /// /// Returns the relevant transaction info. - async fn ensure_blocks_and_txns( + pub(crate) async fn ensure_blocks_and_txns( &self, log_meta: impl Iterator, ) -> Result> { @@ -262,7 +248,7 @@ impl HyperlaneSqlDb { self.db .store_blocks( - self.domain().id(), + self.domain.id(), blocks_to_insert .iter_mut() .map(|(_, info)| info.take().unwrap()), @@ -293,129 +279,9 @@ impl HyperlaneSqlDb { } #[async_trait] -impl HyperlaneLogStore for HyperlaneSqlDb { - /// Store dispatched messages from the origin mailbox into the database. - /// We store only messages from blocks and transaction which we could successfully insert - /// into database. - async fn store_logs(&self, messages: &[(Indexed, LogMeta)]) -> Result { - if messages.is_empty() { - return Ok(0); - } - let txns: HashMap = self - .ensure_blocks_and_txns(messages.iter().map(|r| &r.1)) - .await? - .map(|t| (t.hash, t)) - .collect(); - let storable = messages - .iter() - .filter_map(|(message, meta)| { - txns.get(&meta.transaction_id) - .map(|t| (message.inner().clone(), meta, t.id)) - }) - .map(|(msg, meta, txn_id)| StorableMessage { msg, meta, txn_id }); - let stored = self - .db - .store_dispatched_messages(self.domain().id(), &self.mailbox_address, storable) - .await?; - Ok(stored as u32) - } -} - -#[async_trait] -impl HyperlaneLogStore for HyperlaneSqlDb { - /// Store delivered message ids from the destination mailbox into the database. - /// We store only delivered messages ids from blocks and transaction which we could successfully - /// insert into database. - async fn store_logs(&self, deliveries: &[(Indexed, LogMeta)]) -> Result { - if deliveries.is_empty() { - return Ok(0); - } - let txns: HashMap = self - .ensure_blocks_and_txns(deliveries.iter().map(|r| &r.1)) - .await? - .map(|t| (t.hash, t)) - .collect(); - let storable = deliveries - .iter() - .filter_map(|(message_id, meta)| { - txns.get(&meta.transaction_id) - .map(|txn| (*message_id.inner(), meta, txn.id)) - }) - .map(|(message_id, meta, txn_id)| StorableDelivery { - message_id, - meta, - txn_id, - }); - - let stored = self - .db - .store_deliveries(self.domain().id(), self.mailbox_address, storable) - .await?; - Ok(stored as u32) - } -} - -#[async_trait] -impl HyperlaneLogStore for HyperlaneSqlDb { - /// Store interchain gas payments into the database. - /// We store only interchain gas payments from blocks and transaction which we could - /// successfully insert into database. - async fn store_logs( - &self, - payments: &[(Indexed, LogMeta)], - ) -> Result { - if payments.is_empty() { - return Ok(0); - } - let txns: HashMap = self - .ensure_blocks_and_txns(payments.iter().map(|r| &r.1)) - .await? - .map(|t| (t.hash, t)) - .collect(); - let storable = payments - .iter() - .filter_map(|(payment, meta)| { - txns.get(&meta.transaction_id) - .map(|txn| (payment.inner(), meta, txn.id)) - }) - .map(|(payment, meta, txn_id)| StorablePayment { - payment, - meta, - txn_id, - }); - - let stored = self.db.store_payments(self.domain().id(), storable).await?; - Ok(stored as u32) - } -} - -#[async_trait] -impl HyperlaneSequenceAwareIndexerStoreReader for HyperlaneSqlDb { - /// Gets a message by its nonce. - async fn retrieve_by_sequence(&self, sequence: u32) -> Result> { - let message = self - .db - .retrieve_message_by_nonce(self.domain().id(), &self.mailbox_address, sequence) - .await?; - Ok(message) - } - - /// Gets the block number at which the log occurred. - async fn retrieve_log_block_number_by_sequence(&self, sequence: u32) -> Result> { - let tx_id = unwrap_or_none_result!( - self.db - .retrieve_dispatched_tx_id(self.domain().id(), &self.mailbox_address, sequence) - .await? - ); - let block_id = unwrap_or_none_result!(self.db.retrieve_block_id(tx_id).await?); - Ok(self.db.retrieve_block_number(block_id).await?) - } -} - -#[async_trait] -impl HyperlaneWatermarkedLogStore for HyperlaneSqlDb +impl HyperlaneWatermarkedLogStore for HyperlaneDbStore where - HyperlaneSqlDb: HyperlaneLogStore, + HyperlaneDbStore: HyperlaneLogStore, { /// Gets the block number high watermark async fn retrieve_high_watermark(&self) -> Result> { @@ -429,9 +295,9 @@ where } #[derive(Debug, Clone)] -struct TxnWithId { - hash: H512, - id: i64, +pub(crate) struct TxnWithId { + pub hash: H512, + pub id: i64, } #[derive(Debug, Clone)] diff --git a/rust/main/chains/hyperlane-ethereum/src/contracts/mailbox.rs b/rust/main/chains/hyperlane-ethereum/src/contracts/mailbox.rs index a9141e7b7..cec2b9b45 100644 --- a/rust/main/chains/hyperlane-ethereum/src/contracts/mailbox.rs +++ b/rust/main/chains/hyperlane-ethereum/src/contracts/mailbox.rs @@ -334,6 +334,7 @@ where tx, self.provider.clone(), &self.conn.transaction_overrides.clone(), + &self.domain, ) .await } @@ -382,6 +383,7 @@ where call, provider: self.provider.clone(), transaction_overrides: self.conn.transaction_overrides.clone(), + domain: self.domain.clone(), } } } @@ -418,12 +420,18 @@ pub struct SubmittableBatch { pub call: ContractCall>, provider: Arc, transaction_overrides: TransactionOverrides, + domain: HyperlaneDomain, } impl SubmittableBatch { pub async fn submit(self) -> ChainResult { - let call_with_gas_overrides = - fill_tx_gas_params(self.call, self.provider, &self.transaction_overrides).await?; + let call_with_gas_overrides = fill_tx_gas_params( + self.call, + self.provider, + &self.transaction_overrides, + &self.domain, + ) + .await?; let outcome = report_tx(call_with_gas_overrides).await?; Ok(outcome.into()) } @@ -615,10 +623,10 @@ mod test { TxCostEstimate, H160, H256, U256, }; - use crate::{contracts::EthereumMailbox, ConnectionConf, RpcConnectionConf}; - - /// An amount of gas to add to the estimated gas - const GAS_ESTIMATE_BUFFER: u32 = 75_000; + use crate::{ + contracts::EthereumMailbox, tx::apply_gas_estimate_buffer, ConnectionConf, + RpcConnectionConf, + }; fn get_test_mailbox( domain: HyperlaneDomain, @@ -650,9 +658,9 @@ mod test { #[tokio::test] async fn test_process_estimate_costs_sets_l2_gas_limit_for_arbitrum() { + let domain = HyperlaneDomain::Known(KnownHyperlaneDomain::PlumeTestnet); // An Arbitrum Nitro chain - let (mailbox, mock_provider) = - get_test_mailbox(HyperlaneDomain::Known(KnownHyperlaneDomain::PlumeTestnet)); + let (mailbox, mock_provider) = get_test_mailbox(domain.clone()); let message = HyperlaneMessage::default(); let metadata: Vec = vec![]; @@ -696,8 +704,8 @@ mod test { .await .unwrap(); - // The TxCostEstimate's gas limit includes the buffer - let estimated_gas_limit = gas_limit.saturating_add(GAS_ESTIMATE_BUFFER.into()); + // The TxCostEstimate's gas limit includes a buffer + let estimated_gas_limit = apply_gas_estimate_buffer(gas_limit, &domain).unwrap(); assert_eq!( tx_cost_estimate, diff --git a/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs b/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs index 2da1078f9..f37c6edb8 100644 --- a/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs +++ b/rust/main/chains/hyperlane-ethereum/src/contracts/validator_announce.rs @@ -92,7 +92,13 @@ where announcement.value.storage_location, serialized_signature.into(), ); - fill_tx_gas_params(tx, self.provider.clone(), &self.conn.transaction_overrides).await + fill_tx_gas_params( + tx, + self.provider.clone(), + &self.conn.transaction_overrides, + &self.domain, + ) + .await } } diff --git a/rust/main/chains/hyperlane-ethereum/src/tx.rs b/rust/main/chains/hyperlane-ethereum/src/tx.rs index 05cc4da44..31975643b 100644 --- a/rust/main/chains/hyperlane-ethereum/src/tx.rs +++ b/rust/main/chains/hyperlane-ethereum/src/tx.rs @@ -16,7 +16,8 @@ use ethers_core::{ }, }; use hyperlane_core::{ - utils::bytes_to_hex, ChainCommunicationError, ChainResult, ReorgPeriod, H256, U256, + utils::bytes_to_hex, ChainCommunicationError, ChainResult, HyperlaneDomain, ReorgPeriod, H256, + U256, }; use tracing::{debug, error, info, warn}; @@ -25,8 +26,26 @@ use crate::{EthereumReorgPeriod, Middleware, TransactionOverrides}; /// An amount of gas to add to the estimated gas pub const GAS_ESTIMATE_BUFFER: u32 = 75_000; -pub fn apply_gas_estimate_buffer(gas: U256) -> U256 { - gas.saturating_add(GAS_ESTIMATE_BUFFER.into()) +// A multiplier to apply to the estimated gas, i.e. 10%. +pub const GAS_ESTIMATE_MULTIPLIER_NUMERATOR: u32 = 11; +pub const GAS_ESTIMATE_MULTIPLIER_DENOMINATOR: u32 = 10; + +pub fn apply_gas_estimate_buffer(gas: U256, domain: &HyperlaneDomain) -> ChainResult { + // Arbitrum Nitro chains use 2d fees are are especially prone to costs increasing + // by the time the transaction lands on chain, requiring a higher gas limit. + // In this case, we apply a multiplier to the gas estimate. + let gas = if domain.is_arbitrum_nitro() { + gas.saturating_mul(GAS_ESTIMATE_MULTIPLIER_NUMERATOR.into()) + .checked_div(GAS_ESTIMATE_MULTIPLIER_DENOMINATOR.into()) + .ok_or_else(|| { + ChainCommunicationError::from_other_str("Gas estimate buffer divide by zero") + })? + } else { + gas + }; + + // Always add a flat buffer + Ok(gas.saturating_add(GAS_ESTIMATE_BUFFER.into())) } const PENDING_TRANSACTION_POLLING_INTERVAL: Duration = Duration::from_secs(2); @@ -92,17 +111,19 @@ pub(crate) async fn fill_tx_gas_params( tx: ContractCall, provider: Arc, transaction_overrides: &TransactionOverrides, + domain: &HyperlaneDomain, ) -> ChainResult> where M: Middleware + 'static, D: Detokenize, { // either use the pre-estimated gas limit or estimate it - let estimated_gas_limit: U256 = match tx.tx.gas() { + let mut estimated_gas_limit: U256 = match tx.tx.gas() { Some(&estimate) => estimate.into(), None => tx.estimate_gas().await?.into(), }; - let estimated_gas_limit = apply_gas_estimate_buffer(estimated_gas_limit); + + estimated_gas_limit = apply_gas_estimate_buffer(estimated_gas_limit, domain)?; let gas_limit: U256 = if let Some(gas_limit) = transaction_overrides.gas_limit { estimated_gas_limit.max(gas_limit) } else { diff --git a/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs b/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs index 9a38fb487..e415e9bc7 100644 --- a/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs +++ b/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs @@ -12,7 +12,7 @@ use tracing::{info, instrument}; use hyperlane_core::{ config::StrOrIntParseError, ChainCommunicationError, ChainResult, ContractLocator, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, Indexed, Indexer, - InterchainGasPaymaster, InterchainGasPayment, LogMeta, SequenceAwareIndexer, H256, U256, + InterchainGasPaymaster, InterchainGasPayment, LogMeta, SequenceAwareIndexer, H256, H512, U256, }; use crate::account::{search_accounts_by_discriminator, search_and_validate_account}; @@ -91,7 +91,7 @@ impl InterchainGasPaymaster for SealevelInterchainGasPaymaster {} pub struct SealevelInterchainGasPaymasterIndexer { rpc_client: SealevelRpcClient, igp: SealevelInterchainGasPaymaster, - log_meta_composer: LogMetaComposer, + _log_meta_composer: LogMetaComposer, } /// IGP payment data on Sealevel @@ -122,7 +122,7 @@ impl SealevelInterchainGasPaymasterIndexer { Ok(Self { rpc_client, igp, - log_meta_composer, + _log_meta_composer: log_meta_composer, }) } @@ -168,13 +168,24 @@ impl SealevelInterchainGasPaymasterIndexer { gas_amount: gas_payment_account.gas_amount.into(), }; - let log_meta = self - .interchain_payment_log_meta( - U256::from(sequence_number), - &valid_payment_pda_pubkey, - &gas_payment_account.slot, - ) - .await?; + // let log_meta = self + // .interchain_payment_log_meta( + // U256::from(sequence_number), + // &valid_payment_pda_pubkey, + // &gas_payment_account.slot, + // ) + // .await?; + + let log_meta = LogMeta { + address: self.igp.program_id.to_bytes().into(), + block_number: gas_payment_account.slot, + // TODO: get these when building out scraper support. + // It's inconvenient to get these :| + block_hash: H256::zero(), + transaction_id: H512::zero(), + transaction_index: 0, + log_index: sequence_number.into(), + }; Ok(SealevelGasPayment::new( Indexed::new(igp_payment).with_sequence( @@ -187,19 +198,6 @@ impl SealevelInterchainGasPaymasterIndexer { )) } - async fn interchain_payment_log_meta( - &self, - log_index: U256, - payment_pda_pubkey: &Pubkey, - payment_pda_slot: &Slot, - ) -> ChainResult { - let block = self.rpc_client.get_block(*payment_pda_slot).await?; - - self.log_meta_composer - .log_meta(block, log_index, payment_pda_pubkey, payment_pda_slot) - .map_err(Into::::into) - } - fn interchain_payment_account(&self, account: &Account) -> ChainResult { let unique_gas_payment_pubkey = Pubkey::new(&account.data); let (expected_pubkey, _bump) = Pubkey::try_find_program_address( @@ -213,6 +211,19 @@ impl SealevelInterchainGasPaymasterIndexer { })?; Ok(expected_pubkey) } + + async fn _interchain_payment_log_meta( + &self, + log_index: U256, + payment_pda_pubkey: &Pubkey, + payment_pda_slot: &Slot, + ) -> ChainResult { + let block = self.rpc_client.get_block(*payment_pda_slot).await?; + + self._log_meta_composer + .log_meta(block, log_index, payment_pda_pubkey, payment_pda_slot) + .map_err(Into::::into) + } } #[async_trait] @@ -246,7 +257,10 @@ impl Indexer for SealevelInterchainGasPaymasterIndexer { #[instrument(level = "debug", err, ret, skip(self))] #[allow(clippy::blocks_in_conditions)] // TODO: `rustc` 1.80.1 clippy issue async fn get_finalized_block_number(&self) -> ChainResult { - self.rpc_client.get_block_height().await + // we should not report block height since SequenceAwareIndexer uses block slot in + // `latest_sequence_count_and_tip` and we should not report block slot here + // since block slot cannot be used as watermark + unimplemented!() } } @@ -266,7 +280,7 @@ impl SequenceAwareIndexer for SealevelInterchainGasPaymast .payment_count .try_into() .map_err(StrOrIntParseError::from)?; - let tip = self.rpc_client.get_block_height().await?; + let tip = self.igp.provider.rpc().get_slot().await?; Ok((Some(payment_count), tip)) } } diff --git a/rust/main/chains/hyperlane-sealevel/src/mailbox.rs b/rust/main/chains/hyperlane-sealevel/src/mailbox.rs index 21a9ff28b..d376801fe 100644 --- a/rust/main/chains/hyperlane-sealevel/src/mailbox.rs +++ b/rust/main/chains/hyperlane-sealevel/src/mailbox.rs @@ -679,10 +679,6 @@ impl SealevelMailboxIndexer { &self.mailbox.rpc() } - async fn get_finalized_block_number(&self) -> ChainResult { - self.rpc().get_block_height().await - } - async fn get_dispatched_message_with_nonce( &self, nonce: u32, @@ -716,13 +712,24 @@ impl SealevelMailboxIndexer { let hyperlane_message = HyperlaneMessage::read_from(&mut &dispatched_message_account.encoded_message[..])?; - let log_meta = self - .dispatch_message_log_meta( - U256::from(nonce), - &valid_message_storage_pda_pubkey, - &dispatched_message_account.slot, - ) - .await?; + // let log_meta = self + // .dispatch_message_log_meta( + // U256::from(nonce), + // &valid_message_storage_pda_pubkey, + // &dispatched_message_account.slot, + // ) + // .await?; + + let log_meta = LogMeta { + address: self.program_id.to_bytes().into(), + block_number: dispatched_message_account.slot, + // TODO: get these when building out scraper support. + // It's inconvenient to get these :| + block_hash: H256::zero(), + transaction_id: H512::zero(), + transaction_index: 0, + log_index: U256::zero(), + }; Ok((hyperlane_message.into(), log_meta)) } @@ -741,7 +748,7 @@ impl SealevelMailboxIndexer { Ok(expected_pubkey) } - async fn dispatch_message_log_meta( + async fn _dispatch_message_log_meta( &self, log_index: U256, message_storage_pda_pubkey: &Pubkey, @@ -798,13 +805,24 @@ impl SealevelMailboxIndexer { .into_inner(); let message_id = delivered_message_account.message_id; - let log_meta = self - .delivered_message_log_meta( - U256::from(nonce), - &valid_message_storage_pda_pubkey, - &delivered_message_account.slot, - ) - .await?; + // let log_meta = self + // .delivered_message_log_meta( + // U256::from(nonce), + // &valid_message_storage_pda_pubkey, + // &delivered_message_account.slot, + // ) + // .await?; + + let log_meta = LogMeta { + address: self.program_id.to_bytes().into(), + block_number: delivered_message_account.slot, + // TODO: get these when building out scraper support. + // It's inconvenient to get these :| + block_hash: H256::zero(), + transaction_id: H512::zero(), + transaction_index: 0, + log_index: U256::zero(), + }; Ok((message_id.into(), log_meta)) } @@ -821,7 +839,7 @@ impl SealevelMailboxIndexer { Ok(expected_pubkey) } - async fn delivered_message_log_meta( + async fn _delivered_message_log_meta( &self, log_index: U256, message_storage_pda_pubkey: &Pubkey, @@ -845,17 +863,6 @@ impl SealevelMailboxIndexer { } } -#[async_trait] -impl SequenceAwareIndexer for SealevelMailboxIndexer { - #[instrument(err, skip(self))] - async fn latest_sequence_count_and_tip(&self) -> ChainResult<(Option, u32)> { - let tip = Indexer::::get_finalized_block_number(self).await?; - // TODO: need to make sure the call and tip are at the same height? - let count = Mailbox::count(&self.mailbox, &ReorgPeriod::None).await?; - Ok((Some(count), tip)) - } -} - #[async_trait] impl Indexer for SealevelMailboxIndexer { async fn fetch_logs_in_range( @@ -876,7 +883,21 @@ impl Indexer for SealevelMailboxIndexer { } async fn get_finalized_block_number(&self) -> ChainResult { - self.get_finalized_block_number().await + // we should not report block height since SequenceAwareIndexer uses block slot in + // `latest_sequence_count_and_tip` and we should not report block slot here + // since block slot cannot be used as watermark + unimplemented!() + } +} + +#[async_trait] +impl SequenceAwareIndexer for SealevelMailboxIndexer { + #[instrument(err, skip(self))] + async fn latest_sequence_count_and_tip(&self) -> ChainResult<(Option, u32)> { + let tip = self.mailbox.provider.rpc().get_slot().await?; + // TODO: need to make sure the call and tip are at the same height? + let count = Mailbox::count(&self.mailbox, &ReorgPeriod::None).await?; + Ok((Some(count), tip)) } } @@ -900,7 +921,10 @@ impl Indexer for SealevelMailboxIndexer { } async fn get_finalized_block_number(&self) -> ChainResult { - self.get_finalized_block_number().await + // we should not report block height since SequenceAwareIndexer uses block slot in + // `latest_sequence_count_and_tip` and we should not report block slot here + // since block slot cannot be used as watermark + unimplemented!() } } @@ -909,7 +933,7 @@ impl SequenceAwareIndexer for SealevelMailboxIndexer { async fn latest_sequence_count_and_tip(&self) -> ChainResult<(Option, u32)> { // TODO: implement when sealevel scraper support is implemented info!("Message delivery indexing not implemented"); - let tip = Indexer::::get_finalized_block_number(self).await?; + let tip = self.mailbox.provider.rpc().get_slot().await?; Ok((Some(1), tip)) } } diff --git a/rust/main/chains/hyperlane-sealevel/src/merkle_tree_hook.rs b/rust/main/chains/hyperlane-sealevel/src/merkle_tree_hook.rs index a0813bfba..c2fc81909 100644 --- a/rust/main/chains/hyperlane-sealevel/src/merkle_tree_hook.rs +++ b/rust/main/chains/hyperlane-sealevel/src/merkle_tree_hook.rs @@ -93,7 +93,10 @@ impl Indexer for SealevelMerkleTreeHookIndexer { } async fn get_finalized_block_number(&self) -> ChainResult { - Indexer::::get_finalized_block_number(&self.0).await + // we should not report block height since SequenceAwareIndexer uses block slot in + // `latest_sequence_count_and_tip` and we should not report block slot here + // since block slot cannot be used as watermark + unimplemented!() } } diff --git a/rust/main/chains/hyperlane-sealevel/src/rpc/client.rs b/rust/main/chains/hyperlane-sealevel/src/rpc/client.rs index 9eae0b8ae..6186bf31e 100644 --- a/rust/main/chains/hyperlane-sealevel/src/rpc/client.rs +++ b/rust/main/chains/hyperlane-sealevel/src/rpc/client.rs @@ -125,18 +125,6 @@ impl SealevelRpcClient { .map_err(Into::into) } - pub async fn get_block_height(&self) -> ChainResult { - let height = self - .0 - .get_block_height_with_commitment(CommitmentConfig::finalized()) - .await - .map_err(ChainCommunicationError::from_other)? - .try_into() - // FIXME solana block height is u64... - .expect("sealevel block height exceeds u32::MAX"); - Ok(height) - } - pub async fn get_multiple_accounts_with_finalized_commitment( &self, pubkeys: &[Pubkey], @@ -183,6 +171,18 @@ impl SealevelRpcClient { .map_err(ChainCommunicationError::from_other) } + pub async fn get_slot(&self) -> ChainResult { + let slot = self + .0 + .get_slot_with_commitment(CommitmentConfig::finalized()) + .await + .map_err(ChainCommunicationError::from_other)? + .try_into() + // FIXME solana block height is u64... + .expect("sealevel block slot exceeds u32::MAX"); + Ok(slot) + } + pub async fn get_transaction( &self, signature: &Signature, diff --git a/rust/main/config/mainnet_config.json b/rust/main/config/mainnet_config.json index f0ea1a9dd..6e0da5be3 100644 --- a/rust/main/config/mainnet_config.json +++ b/rust/main/config/mainnet_config.json @@ -1231,7 +1231,7 @@ "bech32Prefix": "inj", "blockExplorers": [ { - "apiUrl": "https://www.mintscan.io/injective", + "apiUrl": "https://apis.mintscan.io/v1/injective", "family": "other", "name": "Mintscan", "url": "https://www.mintscan.io/injective" @@ -2042,7 +2042,7 @@ "bech32Prefix": "neutron", "blockExplorers": [ { - "apiUrl": "https://www.mintscan.io/neutron", + "apiUrl": "https://apis.mintscan.io/v1/neutron", "family": "other", "name": "Mintscan", "url": "https://www.mintscan.io/neutron" @@ -2180,7 +2180,7 @@ "bech32Prefix": "osmo", "blockExplorers": [ { - "apiUrl": "https://www.mintscan.io/osmosis", + "apiUrl": "https://apis.mintscan.io/v1/osmosis", "family": "other", "name": "Mintscan", "url": "https://www.mintscan.io/osmosis" @@ -4111,7 +4111,7 @@ "bech32Prefix": "stride", "blockExplorers": [ { - "apiUrl": "https://www.mintscan.io/stride", + "apiUrl": "https://apis.mintscan.io/v1/stride", "family": "other", "name": "Mintscan", "url": "https://www.mintscan.io/stride" diff --git a/rust/main/helm/hyperlane-agent/templates/relayer-statefulset.yaml b/rust/main/helm/hyperlane-agent/templates/relayer-statefulset.yaml index d317a0c84..da69543d8 100644 --- a/rust/main/helm/hyperlane-agent/templates/relayer-statefulset.yaml +++ b/rust/main/helm/hyperlane-agent/templates/relayer-statefulset.yaml @@ -17,6 +17,7 @@ spec: metadata: annotations: checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + checksum/relayer-configmap: {{ include (print $.Template.BasePath "/relayer-configmap.yaml") . | sha256sum }} {{- with .Values.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs index 242028acb..9428d6bfd 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/rate_limited.rs @@ -78,7 +78,7 @@ pub enum SyncDirection { /// performed by `next_action`. pub(crate) struct RateLimitedContractSyncCursor { indexer: Arc>, - db: Arc>, + store: Arc>, tip: u32, last_tip_update: Instant, eta_calculator: SyncerEtaCalculator, @@ -89,14 +89,14 @@ impl RateLimitedContractSyncCursor { /// Construct a new contract sync helper. pub async fn new( indexer: Arc>, - db: Arc>, + store: Arc>, chunk_size: u32, initial_height: u32, ) -> Result { let tip = indexer.get_finalized_block_number().await?; Ok(Self { indexer, - db, + store, tip, last_tip_update: Instant::now(), eta_calculator: SyncerEtaCalculator::new(initial_height, tip, ETA_TIME_WINDOW), @@ -189,7 +189,7 @@ where ) -> Result<()> { // Store a relatively conservative view of the high watermark, which should allow a single watermark to be // safely shared across multiple cursors, so long as they are running sufficiently in sync - self.db + self.store .store_high_watermark(u32::max( self.sync_state.start_block, self.sync_state diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs index 75c086c24..179ae3dd3 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/backward.rs @@ -22,8 +22,8 @@ pub(crate) struct BackwardSequenceAwareSyncCursor { /// If in sequence mode, this is the max number of sequences to query. /// If in block mode, this is the max number of blocks to query. chunk_size: u32, - /// A DB used to check which logs have already been indexed. - db: Arc>, + /// A store used to check which logs have already been indexed. + store: Arc>, /// A snapshot of the last log to be indexed, or if no indexing has occurred yet, /// the initial log to start indexing backward from. last_indexed_snapshot: LastIndexedSnapshot, @@ -48,13 +48,13 @@ impl Debug for BackwardSequenceAwareSyncCursor { impl BackwardSequenceAwareSyncCursor { #[instrument( - skip(db), + skip(store), fields(chunk_size, next_sequence, start_block, index_mode), ret )] pub fn new( chunk_size: u32, - db: Arc>, + store: Arc>, current_sequence_count: u32, start_block: u32, index_mode: IndexMode, @@ -69,7 +69,7 @@ impl BackwardSequenceAwareSyncCursor { Self { chunk_size, - db, + store, current_indexing_snapshot: last_indexed_snapshot.previous_target(), last_indexed_snapshot, index_mode, @@ -166,10 +166,10 @@ impl BackwardSequenceAwareSyncCursor { /// log for the sequence number hasn't been indexed. async fn get_sequence_log_block_number(&self, sequence: u32) -> Result> { // Ensure there's a full entry for the sequence. - if self.db.retrieve_by_sequence(sequence).await?.is_some() { + if self.store.retrieve_by_sequence(sequence).await?.is_some() { // And get the block number. if let Some(block_number) = self - .db + .store .retrieve_log_block_number_by_sequence(sequence) .await? { diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs index 4fcbbff8d..967f4e605 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/forward.rs @@ -27,8 +27,8 @@ pub(crate) struct ForwardSequenceAwareSyncCursor { /// This is used to check if there are new logs to index and to /// establish targets to index towards. latest_sequence_querier: Arc>, - /// A DB used to check which logs have already been indexed. - db: Arc>, + /// A store used to check which logs have already been indexed. + store: Arc>, /// A snapshot of the last indexed log, or if no indexing has occurred yet, /// the initial log to start indexing forward from. last_indexed_snapshot: LastIndexedSnapshot, @@ -55,14 +55,14 @@ impl Debug for ForwardSequenceAwareSyncCursor { impl ForwardSequenceAwareSyncCursor { #[instrument( - skip(db, latest_sequence_querier), + skip(store, latest_sequence_querier), fields(chunk_size, next_sequence, start_block, index_mode), ret )] pub fn new( chunk_size: u32, latest_sequence_querier: Arc>, - db: Arc>, + store: Arc>, next_sequence: u32, start_block: u32, index_mode: IndexMode, @@ -77,7 +77,7 @@ impl ForwardSequenceAwareSyncCursor { Self { chunk_size, latest_sequence_querier, - db, + store, last_indexed_snapshot, current_indexing_snapshot: TargetSnapshot { sequence: next_sequence, @@ -221,10 +221,10 @@ impl ForwardSequenceAwareSyncCursor { /// log for the sequence number hasn't been indexed. async fn get_sequence_log_block_number(&self, sequence: u32) -> Result> { // Ensure there's a full entry for the sequence. - if self.db.retrieve_by_sequence(sequence).await?.is_some() { + if self.store.retrieve_by_sequence(sequence).await?.is_some() { // And get the block number. if let Some(block_number) = self - .db + .store .retrieve_log_block_number_by_sequence(sequence) .await? { diff --git a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs index 9303438b0..74e7ebe01 100644 --- a/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs +++ b/rust/main/hyperlane-base/src/contract_sync/cursors/sequence_aware/mod.rs @@ -73,7 +73,7 @@ impl ForwardBackwardSequenceAwareSyncCursor { /// Construct a new contract sync helper. pub async fn new( latest_sequence_querier: Arc>, - db: Arc>, + store: Arc>, chunk_size: u32, mode: IndexMode, ) -> Result { @@ -86,13 +86,13 @@ impl ForwardBackwardSequenceAwareSyncCursor { let forward_cursor = ForwardSequenceAwareSyncCursor::new( chunk_size, latest_sequence_querier.clone(), - db.clone(), + store.clone(), sequence_count, tip, mode, ); let backward_cursor = - BackwardSequenceAwareSyncCursor::new(chunk_size, db, sequence_count, tip, mode); + BackwardSequenceAwareSyncCursor::new(chunk_size, store, sequence_count, tip, mode); Ok(Self { forward: forward_cursor, backward: backward_cursor, diff --git a/rust/main/hyperlane-base/src/contract_sync/mod.rs b/rust/main/hyperlane-base/src/contract_sync/mod.rs index 8e6f8278f..df9563d8a 100644 --- a/rust/main/hyperlane-base/src/contract_sync/mod.rs +++ b/rust/main/hyperlane-base/src/contract_sync/mod.rs @@ -43,21 +43,26 @@ struct IndexedTxIdAndSequence { /// Extracts chain-specific data (emitted checkpoints, messages, etc) from an /// `indexer` and fills the agent's db with this data. #[derive(Debug)] -pub struct ContractSync, I: Indexer> { +pub struct ContractSync, I: Indexer> { domain: HyperlaneDomain, - db: D, + store: S, indexer: I, metrics: ContractSyncMetrics, broadcast_sender: Option>, _phantom: PhantomData, } -impl, I: Indexer> ContractSync { +impl, I: Indexer> ContractSync { /// Create a new ContractSync - pub fn new(domain: HyperlaneDomain, db: D, indexer: I, metrics: ContractSyncMetrics) -> Self { + pub fn new( + domain: HyperlaneDomain, + store: S, + indexer: I, + metrics: ContractSyncMetrics, + ) -> Self { Self { domain, - db, + store, indexer, metrics, broadcast_sender: T::broadcast_channel_size().map(BroadcastMpscSender::new), @@ -66,10 +71,10 @@ impl, I: Indexer> ContractSync } } -impl ContractSync +impl ContractSync where T: Indexable + Debug + Send + Sync + Clone + Eq + Hash + 'static, - D: HyperlaneLogStore, + S: HyperlaneLogStore, I: Indexer + 'static, { /// The domain that this ContractSync is running on @@ -221,7 +226,7 @@ where let logs = Vec::from_iter(deduped_logs); // Store deliveries - let stored = match self.db.store_logs(&logs).await { + let stored = match self.store.store_logs(&logs).await { Ok(stored) => stored, Err(err) => { warn!(?err, "Error storing logs in db"); @@ -298,7 +303,7 @@ where &self, index_settings: IndexSettings, ) -> Result>> { - let watermark = self.db.retrieve_high_watermark().await.unwrap(); + let watermark = self.store.retrieve_high_watermark().await.unwrap(); let index_settings = IndexSettings { from: watermark.unwrap_or(index_settings.from), chunk_size: index_settings.chunk_size, @@ -307,7 +312,7 @@ where Ok(Box::new( RateLimitedContractSyncCursor::new( Arc::new(self.indexer.clone()), - self.db.clone(), + self.store.clone(), index_settings.chunk_size, index_settings.from, ) @@ -348,7 +353,7 @@ where Ok(Box::new( ForwardBackwardSequenceAwareSyncCursor::new( self.indexer.clone(), - Arc::new(self.db.clone()), + Arc::new(self.store.clone()), index_settings.chunk_size, index_settings.mode, ) diff --git a/rust/main/hyperlane-base/src/settings/base.rs b/rust/main/hyperlane-base/src/settings/base.rs index 6757a545e..0320e4eb7 100644 --- a/rust/main/hyperlane-base/src/settings/base.rs +++ b/rust/main/hyperlane-base/src/settings/base.rs @@ -152,48 +152,48 @@ impl Settings { build_contract_fns!(build_provider, build_providers -> dyn HyperlaneProvider); /// Build a contract sync for type `T` using log store `D` - pub async fn sequenced_contract_sync( + pub async fn sequenced_contract_sync( &self, domain: &HyperlaneDomain, metrics: &CoreMetrics, sync_metrics: &ContractSyncMetrics, - db: Arc, + store: Arc, ) -> eyre::Result>> where T: Indexable + Debug, SequenceIndexer: TryFromWithMetrics, - D: HyperlaneLogStore + HyperlaneSequenceAwareIndexerStoreReader + 'static, + S: HyperlaneLogStore + HyperlaneSequenceAwareIndexerStoreReader + 'static, { let setup = self.chain_setup(domain)?; // Currently, all indexers are of the `SequenceIndexer` type let indexer = SequenceIndexer::::try_from_with_metrics(setup, metrics).await?; Ok(Arc::new(ContractSync::new( domain.clone(), - db.clone() as SequenceAwareLogStore<_>, + store.clone() as SequenceAwareLogStore<_>, indexer, sync_metrics.clone(), ))) } /// Build a contract sync for type `T` using log store `D` - pub async fn watermark_contract_sync( + pub async fn watermark_contract_sync( &self, domain: &HyperlaneDomain, metrics: &CoreMetrics, sync_metrics: &ContractSyncMetrics, - db: Arc, + store: Arc, ) -> eyre::Result>> where T: Indexable + Debug, SequenceIndexer: TryFromWithMetrics, - D: HyperlaneLogStore + HyperlaneWatermarkedLogStore + 'static, + S: HyperlaneLogStore + HyperlaneWatermarkedLogStore + 'static, { let setup = self.chain_setup(domain)?; // Currently, all indexers are of the `SequenceIndexer` type let indexer = SequenceIndexer::::try_from_with_metrics(setup, metrics).await?; Ok(Arc::new(ContractSync::new( domain.clone(), - db.clone() as WatermarkLogStore<_>, + store.clone() as WatermarkLogStore<_>, indexer, sync_metrics.clone(), ))) @@ -202,17 +202,17 @@ impl Settings { /// Build multiple contract syncs. /// All contracts have to implement both sequenced and /// watermark trait bounds - pub async fn contract_syncs( + pub async fn contract_syncs( &self, domains: impl Iterator, metrics: &CoreMetrics, sync_metrics: &ContractSyncMetrics, - dbs: HashMap>, + stores: HashMap>, ) -> Result>>> where T: Indexable + Debug + Send + Sync + Clone + Eq + Hash + 'static, SequenceIndexer: TryFromWithMetrics, - D: HyperlaneLogStore + S: HyperlaneLogStore + HyperlaneSequenceAwareIndexerStoreReader + HyperlaneWatermarkedLogStore + 'static, @@ -226,7 +226,7 @@ impl Settings { domain, metrics, sync_metrics, - dbs.get(domain).unwrap().clone(), + stores.get(domain).unwrap().clone(), ) .await .map(|r| r as Arc>)?, @@ -235,7 +235,7 @@ impl Settings { domain, metrics, sync_metrics, - dbs.get(domain).unwrap().clone(), + stores.get(domain).unwrap().clone(), ) .await .map(|r| r as Arc>)?, diff --git a/rust/main/hyperlane-core/src/traits/db.rs b/rust/main/hyperlane-core/src/traits/db.rs index 92c0c15f7..6bef9781d 100644 --- a/rust/main/hyperlane-core/src/traits/db.rs +++ b/rust/main/hyperlane-core/src/traits/db.rs @@ -42,8 +42,8 @@ pub trait HyperlaneSequenceAwareIndexerStore: } /// Auto-impl for HyperlaneSequenceAwareIndexerStore -impl HyperlaneSequenceAwareIndexerStore for U where - U: HyperlaneLogStore + HyperlaneSequenceAwareIndexerStoreReader + Send + Sync + Debug +impl HyperlaneSequenceAwareIndexerStore for S where + S: HyperlaneLogStore + HyperlaneSequenceAwareIndexerStoreReader + Send + Sync + Debug { } diff --git a/rust/main/hyperlane-core/src/types/message.rs b/rust/main/hyperlane-core/src/types/message.rs index 576e1eb48..359c024c1 100644 --- a/rust/main/hyperlane-core/src/types/message.rs +++ b/rust/main/hyperlane-core/src/types/message.rs @@ -74,12 +74,7 @@ impl Debug for HyperlaneMessage { impl Display for HyperlaneMessage { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!( - f, - "HyperlaneMessage {{ id: {:?}, nonce: {}, .. }}", - self.id(), - self.nonce - ) + Debug::fmt(self, f) } } diff --git a/rust/sealevel/programs/hyperlane-sealevel-token/src/processor.rs b/rust/sealevel/programs/hyperlane-sealevel-token/src/processor.rs index f203a1e4e..3e7314bc6 100644 --- a/rust/sealevel/programs/hyperlane-sealevel-token/src/processor.rs +++ b/rust/sealevel/programs/hyperlane-sealevel-token/src/processor.rs @@ -120,10 +120,9 @@ fn initialize(program_id: &Pubkey, accounts: &[AccountInfo], init: Init) -> Prog /// 12. `[]` OPTIONAL - The Overhead IGP program, if the configured IGP is an Overhead IGP. /// 13. `[writeable]` The IGP account. /// ---- End if ---- -/// 14. `[signer]` The token sender. -/// 15. `[executable]` The spl_token_2022 program. -/// 16. `[writeable]` The mint / mint authority PDA account. -/// 17. `[writeable]` The token sender's associated token account, from which tokens will be burned. +/// 14. `[executable]` The spl_token_2022 program. +/// 15. `[writeable]` The mint / mint authority PDA account. +/// 16. `[writeable]` The token sender's associated token account, from which tokens will be burned. fn transfer_remote( program_id: &Pubkey, accounts: &[AccountInfo], diff --git a/solidity/CHANGELOG.md b/solidity/CHANGELOG.md index 6edb35de6..0ba5c201e 100644 --- a/solidity/CHANGELOG.md +++ b/solidity/CHANGELOG.md @@ -1,5 +1,12 @@ # @hyperlane-xyz/core +## 5.8.1 + +### Patch Changes + +- Updated dependencies [0e285a443] + - @hyperlane-xyz/utils@7.1.0 + ## 5.8.0 ### Minor Changes diff --git a/solidity/contracts/PackageVersioned.sol b/solidity/contracts/PackageVersioned.sol index 3bd056b57..476985336 100644 --- a/solidity/contracts/PackageVersioned.sol +++ b/solidity/contracts/PackageVersioned.sol @@ -7,5 +7,5 @@ pragma solidity >=0.6.11; **/ abstract contract PackageVersioned { // GENERATED CODE - DO NOT EDIT - string public constant PACKAGE_VERSION = "5.8.0"; + string public constant PACKAGE_VERSION = "5.8.1"; } diff --git a/solidity/package.json b/solidity/package.json index bcdc8cb4f..3133af171 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "5.8.0", + "version": "5.8.1", "dependencies": { "@arbitrum/nitro-contracts": "^1.2.1", "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "7.0.0", + "@hyperlane-xyz/utils": "7.1.0", "@layerzerolabs/lz-evm-oapp-v2": "2.0.2", "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^v4.9.3", diff --git a/typescript/ccip-server/CHANGELOG.md b/typescript/ccip-server/CHANGELOG.md index a6a35b368..5bfabb5d4 100644 --- a/typescript/ccip-server/CHANGELOG.md +++ b/typescript/ccip-server/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/ccip-server +## 7.1.0 + ## 7.0.0 ## 6.0.0 diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json index d93fca2c6..908936516 100644 --- a/typescript/ccip-server/package.json +++ b/typescript/ccip-server/package.json @@ -1,6 +1,6 @@ { "name": "@hyperlane-xyz/ccip-server", - "version": "7.0.0", + "version": "7.1.0", "description": "CCIP server", "typings": "dist/index.d.ts", "typedocMain": "src/index.ts", diff --git a/typescript/cli/.mocharc-e2e.json b/typescript/cli/.mocharc-e2e.json index ecabac62f..0f8803e7a 100644 --- a/typescript/cli/.mocharc-e2e.json +++ b/typescript/cli/.mocharc-e2e.json @@ -1,6 +1,5 @@ { "extensions": ["ts"], - "spec": ["src/**/*.e2e-test.ts"], "node-option": [ "experimental-specifier-resolution=node", "loader=ts-node/esm" diff --git a/typescript/cli/CHANGELOG.md b/typescript/cli/CHANGELOG.md index 3dd723249..9e82984e4 100644 --- a/typescript/cli/CHANGELOG.md +++ b/typescript/cli/CHANGELOG.md @@ -1,5 +1,23 @@ # @hyperlane-xyz/cli +## 7.1.0 + +### Minor Changes + +- 5db46bd31: Implements persistent relayer for use in CLI + +### Patch Changes + +- Updated dependencies [6f2d50fbd] +- Updated dependencies [1159e0f4b] +- Updated dependencies [0e285a443] +- Updated dependencies [ff2b4e2fb] +- Updated dependencies [0e285a443] +- Updated dependencies [5db46bd31] +- Updated dependencies [0cd65c571] + - @hyperlane-xyz/sdk@7.1.0 + - @hyperlane-xyz/utils@7.1.0 + ## 7.0.0 ### Minor Changes diff --git a/typescript/cli/package.json b/typescript/cli/package.json index df2acaeb1..aead4269a 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -1,13 +1,13 @@ { "name": "@hyperlane-xyz/cli", - "version": "7.0.0", + "version": "7.1.0", "description": "A command-line utility for common Hyperlane operations", "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", - "@hyperlane-xyz/registry": "4.7.0", - "@hyperlane-xyz/sdk": "7.0.0", - "@hyperlane-xyz/utils": "7.0.0", + "@hyperlane-xyz/registry": "6.1.0", + "@hyperlane-xyz/sdk": "7.1.0", + "@hyperlane-xyz/utils": "7.1.0", "@inquirer/core": "9.0.10", "@inquirer/figures": "1.0.5", "@inquirer/prompts": "^3.0.0", diff --git a/typescript/cli/scripts/run-e2e-test.sh b/typescript/cli/scripts/run-e2e-test.sh index bfa89a0b3..c98fc9158 100755 --- a/typescript/cli/scripts/run-e2e-test.sh +++ b/typescript/cli/scripts/run-e2e-test.sh @@ -16,7 +16,12 @@ anvil --chain-id 31338 -p 8555 --state /tmp/anvil2/state --gas-price 1 > /dev/nu anvil --chain-id 31347 -p 8600 --state /tmp/anvil3/state --gas-price 1 > /dev/null & echo "Running E2E tests" -yarn mocha --config .mocharc-e2e.json +if [ -n "${CLI_E2E_TEST}" ]; then + echo "Running only ${CLI_E2E_TEST} test" + yarn mocha --config .mocharc-e2e.json "src/**/${CLI_E2E_TEST}.e2e-test.ts" +else + yarn mocha --config .mocharc-e2e.json "src/**/*.e2e-test.ts" +fi cleanup diff --git a/typescript/cli/src/version.ts b/typescript/cli/src/version.ts index 82bc6e87d..e882c3c6f 100644 --- a/typescript/cli/src/version.ts +++ b/typescript/cli/src/version.ts @@ -1 +1 @@ -export const VERSION = '7.0.0'; +export const VERSION = '7.1.0'; diff --git a/typescript/github-proxy/CHANGELOG.md b/typescript/github-proxy/CHANGELOG.md index fc84e2446..a522bb6d5 100644 --- a/typescript/github-proxy/CHANGELOG.md +++ b/typescript/github-proxy/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperlane-xyz/github-proxy +## 7.1.0 + ## 7.0.0 ## 6.0.0 diff --git a/typescript/github-proxy/package.json b/typescript/github-proxy/package.json index 34ff9cdb5..1536432c7 100644 --- a/typescript/github-proxy/package.json +++ b/typescript/github-proxy/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/github-proxy", "description": "Github proxy that adds the API key to requests", - "version": "7.0.0", + "version": "7.1.0", "private": true, "scripts": { "deploy": "wrangler deploy", diff --git a/typescript/helloworld/CHANGELOG.md b/typescript/helloworld/CHANGELOG.md index 7b34ab8a5..fe9c0b3da 100644 --- a/typescript/helloworld/CHANGELOG.md +++ b/typescript/helloworld/CHANGELOG.md @@ -1,5 +1,18 @@ # @hyperlane-xyz/helloworld +## 7.1.0 + +### Patch Changes + +- Updated dependencies [6f2d50fbd] +- Updated dependencies [1159e0f4b] +- Updated dependencies [ff2b4e2fb] +- Updated dependencies [0e285a443] +- Updated dependencies [5db46bd31] +- Updated dependencies [0cd65c571] + - @hyperlane-xyz/sdk@7.1.0 + - @hyperlane-xyz/core@5.8.1 + ## 7.0.0 ### Patch Changes diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index 3d3307a67..3191ce213 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,11 +1,11 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "7.0.0", + "version": "7.1.0", "dependencies": { - "@hyperlane-xyz/core": "5.8.0", - "@hyperlane-xyz/registry": "4.7.0", - "@hyperlane-xyz/sdk": "7.0.0", + "@hyperlane-xyz/core": "5.8.1", + "@hyperlane-xyz/registry": "6.1.0", + "@hyperlane-xyz/sdk": "7.1.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" }, diff --git a/typescript/infra/CHANGELOG.md b/typescript/infra/CHANGELOG.md index 08389aa78..d533e66b3 100644 --- a/typescript/infra/CHANGELOG.md +++ b/typescript/infra/CHANGELOG.md @@ -1,5 +1,24 @@ # @hyperlane-xyz/infra +## 7.1.0 + +### Minor Changes + +- 5db46bd31: Implements persistent relayer for use in CLI + +### Patch Changes + +- Updated dependencies [6f2d50fbd] +- Updated dependencies [1159e0f4b] +- Updated dependencies [0e285a443] +- Updated dependencies [ff2b4e2fb] +- Updated dependencies [0e285a443] +- Updated dependencies [5db46bd31] +- Updated dependencies [0cd65c571] + - @hyperlane-xyz/sdk@7.1.0 + - @hyperlane-xyz/utils@7.1.0 + - @hyperlane-xyz/helloworld@7.1.0 + ## 7.0.0 ### Minor Changes diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 5accd4f46..892746c63 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -12,6 +12,7 @@ import { import { MetricAppContext, routerMatchingList, + senderMatchingList, warpRouteMatchingList, } from '../../../src/config/agent/relayer.js'; import { ALL_KEY_ROLES, Role } from '../../../src/roles.js'; @@ -20,14 +21,17 @@ import { getDomainId } from '../../registry.js'; import { environment } from './chains.js'; import { helloWorld } from './helloworld.js'; +import aaveSenderAddresses from './misc-artifacts/aave-sender-addresses.json'; +import merklyEthAddresses from './misc-artifacts/merkly-eth-addresses.json'; +import merklyNftAddresses from './misc-artifacts/merkly-eth-addresses.json'; +import merklyErc20Addresses from './misc-artifacts/merkly-eth-addresses.json'; +import veloMessageModuleAddresses from './misc-artifacts/velo-message-module-addresses.json'; +import veloTokenBridgeAddresses from './misc-artifacts/velo-token-bridge-addresses.json'; import { mainnet3SupportedChainNames, supportedChainNames, } from './supportedChainNames.js'; import { validatorChainConfig } from './validators.js'; -import merklyEthAddresses from './warp/artifacts/merkly-eth-addresses.json'; -import merklyNftAddresses from './warp/artifacts/merkly-eth-addresses.json'; -import merklyErc20Addresses from './warp/artifacts/merkly-eth-addresses.json'; import { WarpRouteIds } from './warp/warpIds.js'; // const releaseCandidateHelloworldMatchingList = routerMatchingList( @@ -375,6 +379,22 @@ const metricAppContextsGetter = (): MetricAppContext[] => { name: 'merkly_nft', matchingList: routerMatchingList(merklyNftAddresses), }, + { + name: 'velo_message_module', + matchingList: routerMatchingList(veloMessageModuleAddresses), + }, + { + name: 'velo_token_bridge', + matchingList: routerMatchingList(veloTokenBridgeAddresses), + }, + { + // https://github.com/bgd-labs/aave-delivery-infrastructure?tab=readme-ov-file#deployed-addresses + // We match on senders because the sender is always the same and + // well documented, while the recipient may be switched out and is + // more poorly documented. + name: 'aave', + matchingList: senderMatchingList(aaveSenderAddresses), + }, ]; }; @@ -409,7 +429,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '75d62ae-20241107-060707', + tag: '25a927d-20241114-171323', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContextsGetter, @@ -443,7 +463,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '75d62ae-20241107-060707', + tag: '25a927d-20241114-171323', }, // We're temporarily (ab)using the RC relayer as a way to increase // message throughput. @@ -476,7 +496,7 @@ const neutron: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '75d62ae-20241107-060707', + tag: '25a927d-20241114-171323', }, gasPaymentEnforcement, metricAppContextsGetter, diff --git a/typescript/infra/config/environments/mainnet3/misc-artifacts/aave-sender-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/aave-sender-addresses.json new file mode 100644 index 000000000..21cfa5ecc --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/misc-artifacts/aave-sender-addresses.json @@ -0,0 +1,38 @@ +{ + "ethereum": { + "sender": "0xEd42a7D8559a463722Ca4beD50E0Cc05a386b0e1" + }, + "polygon": { + "sender": "0xF6B99959F0b5e79E1CC7062E12aF632CEb18eF0d" + }, + "avalanche": { + "sender": "0x27FC7D54C893dA63C0AE6d57e1B2B13A70690928" + }, + "arbitrum": { + "sender": "0xCbFB78a3Eeaa611b826E37c80E4126c8787D29f0" + }, + "optimism": { + "sender": "0x48A9FE90bce5EEd790f3F4Ce192d1C0B351fd4Ca" + }, + "bsc": { + "sender": "0x9d33ee6543C9b2C8c183b8fb58fB089266cffA19" + }, + "base": { + "sender": "0x529467C76f234F2bD359d7ecF7c660A2846b04e2" + }, + "metis": { + "sender": "0x6fDaFb26915ABD6065a1E1501a37Ac438D877f70" + }, + "gnosis": { + "sender": "0x8Dc5310fc9D3D7D1Bb3D1F686899c8F082316c9F" + }, + "scroll": { + "sender": "0x03073D3F4769f6b6604d616238fD6c636C99AD0A" + }, + "polygonzkevm": { + "sender": "0xed7e0874526B9BB9E36C7e9472ed7ed324CEeE3B" + }, + "celo": { + "sender": "0x4A5f4b29C0407E5Feb323305e121f563c7bC4d79" + } +} diff --git a/typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-erc20-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-erc20-addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-erc20-addresses.json rename to typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-erc20-addresses.json diff --git a/typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-eth-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-eth-addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-eth-addresses.json rename to typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-eth-addresses.json diff --git a/typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-nft-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-nft-addresses.json similarity index 100% rename from typescript/infra/config/environments/mainnet3/warp/artifacts/merkly-nft-addresses.json rename to typescript/infra/config/environments/mainnet3/misc-artifacts/merkly-nft-addresses.json diff --git a/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-message-module-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-message-module-addresses.json new file mode 100644 index 000000000..3b9fc2fec --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-message-module-addresses.json @@ -0,0 +1,8 @@ +{ + "optimism": { + "router": "0xF385603a12Be8b7B885222329c581FDD1C30071D" + }, + "mode": { + "router": "0xF385603a12Be8b7B885222329c581FDD1C30071D" + } +} diff --git a/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-token-bridge-addresses.json b/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-token-bridge-addresses.json new file mode 100644 index 000000000..1988c9adb --- /dev/null +++ b/typescript/infra/config/environments/mainnet3/misc-artifacts/velo-token-bridge-addresses.json @@ -0,0 +1,8 @@ +{ + "optimism": { + "router": "0xA7287a56C01ac8Baaf8e7B662bDB41b10889C7A6" + }, + "mode": { + "router": "0xA7287a56C01ac8Baaf8e7B662bDB41b10889C7A6" + } +} diff --git a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts index e6de71c7d..5dbb3ef55 100644 --- a/typescript/infra/config/environments/mainnet3/warp/warpIds.ts +++ b/typescript/infra/config/environments/mainnet3/warp/warpIds.ts @@ -1,6 +1,7 @@ export enum WarpRouteIds { Ancient8EthereumUSDC = 'USDC/ancient8-ethereum', ArbitrumBaseBlastBscEthereumFraxtalLineaModeOptimismSeiTaikoZircuitEZETH = 'EZETH/arbitrum-base-blast-bsc-ethereum-fraxtal-linea-mode-optimism-sei-taiko-zircuit', + ArbitrumBaseEnduranceUSDC = 'USDC/arbitrum-base-endurance', ArbitrumEthereumZircuitAMPHRETH = 'AMPHRETH/arbitrum-ethereum-zircuit', ArbitrumNeutronEclip = 'ECLIP/arbitrum-neutron', ArbitrumNeutronTIA = 'TIA/arbitrum-neutron', diff --git a/typescript/infra/helm/warp-routes/templates/_helpers.tpl b/typescript/infra/helm/warp-routes/templates/_helpers.tpl index bc732a5a3..2a9424b0a 100644 --- a/typescript/infra/helm/warp-routes/templates/_helpers.tpl +++ b/typescript/infra/helm/warp-routes/templates/_helpers.tpl @@ -69,7 +69,7 @@ The warp-routes container imagePullPolicy: IfNotPresent env: - name: LOG_FORMAT - value: pretty + value: json command: - ./node_modules/.bin/tsx - ./typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts diff --git a/typescript/infra/package.json b/typescript/infra/package.json index c62699a66..b4fc7948e 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/infra", "description": "Infrastructure utilities for the Hyperlane Network", - "version": "7.0.0", + "version": "7.1.0", "dependencies": { "@arbitrum/sdk": "^3.0.0", "@aws-sdk/client-iam": "^3.74.0", @@ -13,10 +13,10 @@ "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", "@google-cloud/secret-manager": "^5.5.0", - "@hyperlane-xyz/helloworld": "7.0.0", - "@hyperlane-xyz/registry": "4.10.0", - "@hyperlane-xyz/sdk": "7.0.0", - "@hyperlane-xyz/utils": "7.0.0", + "@hyperlane-xyz/helloworld": "7.1.0", + "@hyperlane-xyz/registry": "6.1.0", + "@hyperlane-xyz/sdk": "7.1.0", + "@hyperlane-xyz/utils": "7.1.0", "@inquirer/prompts": "^5.3.8", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@safe-global/api-kit": "1.3.0", diff --git a/typescript/infra/scripts/agent-utils.ts b/typescript/infra/scripts/agent-utils.ts index 4fd4c8ec3..6f73005d3 100644 --- a/typescript/infra/scripts/agent-utils.ts +++ b/typescript/infra/scripts/agent-utils.ts @@ -191,9 +191,8 @@ export function withProtocol(args: Argv) { export function withAgentRole(args: Argv) { return args - .describe('role', 'agent roles') - .array('role') - .coerce('role', (role: string[]): Role[] => role.map(assertRole)) + .describe('role', 'agent role') + .coerce('role', (role: string): Role => assertRole(role)) .demandOption('role') .alias('r', 'role'); } @@ -206,11 +205,16 @@ export function withAgentRoles(args: Argv) { .coerce('roles', (role: string[]): Role[] => role.map(assertRole)) .choices('roles', Object.values(Role)) // Ensure roles are unique - .coerce('roles', (roles: string[]) => Array.from(new Set(roles))) + .coerce('roles', (roles: Role[]) => Array.from(new Set(roles))) .alias('r', 'roles') + .alias('role', 'roles') ); } +export function withAgentRolesRequired(args: Argv) { + return withAgentRoles(args).demandOption('roles'); +} + export function withKeyRoleAndChain(args: Argv) { return args .describe('role', 'key role') diff --git a/typescript/infra/scripts/agents/utils.ts b/typescript/infra/scripts/agents/utils.ts index 84fe60f59..fa3a1da4c 100644 --- a/typescript/infra/scripts/agents/utils.ts +++ b/typescript/infra/scripts/agents/utils.ts @@ -11,7 +11,7 @@ import { HelmCommand } from '../../src/utils/helm.js'; import { assertCorrectKubeContext, getArgs, - withAgentRole, + withAgentRolesRequired, withChains, withContext, } from '../agent-utils.js'; @@ -70,21 +70,23 @@ export class AgentCli { protected async init() { if (this.initialized) return; - const argv = await withChains(withAgentRole(withContext(getArgs()))) + const argv = await withChains( + withAgentRolesRequired(withContext(getArgs())), + ) .describe('dry-run', 'Run through the steps without making any changes') .boolean('dry-run').argv; if ( argv.chains && argv.chains.length > 0 && - !argv.role.includes(Role.Validator) + !argv.roles.includes(Role.Validator) ) { console.warn('Chain argument applies to validator role only. Ignoring.'); } const { envConfig, agentConfig } = await getConfigsBasedOnArgs(argv); await assertCorrectKubeContext(envConfig); - this.roles = argv.role; + this.roles = argv.roles; this.envConfig = envConfig; this.agentConfig = agentConfig; this.dryRun = argv.dryRun || false; diff --git a/typescript/infra/scripts/create-keys.ts b/typescript/infra/scripts/keys/create-keys.ts similarity index 61% rename from typescript/infra/scripts/create-keys.ts rename to typescript/infra/scripts/keys/create-keys.ts index c5798679a..43b7694b0 100644 --- a/typescript/infra/scripts/create-keys.ts +++ b/typescript/infra/scripts/keys/create-keys.ts @@ -1,6 +1,5 @@ -import { createAgentKeysIfNotExists } from '../src/agents/key-utils.js'; - -import { getAgentConfigsBasedOnArgs } from './agent-utils.js'; +import { createAgentKeysIfNotExists } from '../../src/agents/key-utils.js'; +import { getAgentConfigsBasedOnArgs } from '../agent-utils.js'; async function main() { const { agentConfig } = await getAgentConfigsBasedOnArgs(); diff --git a/typescript/infra/scripts/delete-keys.ts b/typescript/infra/scripts/keys/delete-keys.ts similarity index 58% rename from typescript/infra/scripts/delete-keys.ts rename to typescript/infra/scripts/keys/delete-keys.ts index 934733cfd..12a0f1bb7 100644 --- a/typescript/infra/scripts/delete-keys.ts +++ b/typescript/infra/scripts/keys/delete-keys.ts @@ -1,6 +1,5 @@ -import { deleteAgentKeys } from '../src/agents/key-utils.js'; - -import { getAgentConfigsBasedOnArgs } from './agent-utils.js'; +import { deleteAgentKeys } from '../../src/agents/key-utils.js'; +import { getAgentConfigsBasedOnArgs } from '../agent-utils.js'; async function main() { const { agentConfig } = await getAgentConfigsBasedOnArgs(); diff --git a/typescript/infra/scripts/get-key-addresses.ts b/typescript/infra/scripts/keys/get-key-addresses.ts similarity index 80% rename from typescript/infra/scripts/get-key-addresses.ts rename to typescript/infra/scripts/keys/get-key-addresses.ts index b35c38cd2..9cd7df379 100644 --- a/typescript/infra/scripts/get-key-addresses.ts +++ b/typescript/infra/scripts/keys/get-key-addresses.ts @@ -1,7 +1,6 @@ -import { getAllCloudAgentKeys } from '../src/agents/key-utils.js'; - -import { getArgs, withContext, withProtocol } from './agent-utils.js'; -import { getConfigsBasedOnArgs } from './core-utils.js'; +import { getAllCloudAgentKeys } from '../../src/agents/key-utils.js'; +import { getArgs, withContext, withProtocol } from '../agent-utils.js'; +import { getConfigsBasedOnArgs } from '../core-utils.js'; async function main() { const argv = await withProtocol(withContext(getArgs())).argv; diff --git a/typescript/infra/scripts/keys/get-key.ts b/typescript/infra/scripts/keys/get-key.ts new file mode 100644 index 000000000..60338717d --- /dev/null +++ b/typescript/infra/scripts/keys/get-key.ts @@ -0,0 +1,38 @@ +import { getCloudAgentKey } from '../../src/agents/key-utils.js'; +import { + getArgs, + withAgentRole, + withContext, + withProtocol, +} from '../agent-utils.js'; +import { getConfigsBasedOnArgs } from '../core-utils.js'; + +async function main() { + const argv = await withAgentRole(withContext(getArgs())).argv; + + const { agentConfig } = await getConfigsBasedOnArgs(argv); + + // As a (very rudimentary) security precaution, we don't print the private key directly to + // the console if this script is ran directly. + // We only write the private key to the console if it is not a tty, e.g. if + // this is being called in a subshell or piped to another command. + // + // E.g. this will print the private key: + // $ echo `yarn tsx infra/scripts/keys/get-key.ts -e mainnet3 --role deployer` + // or this too: + // $ echo $(yarn tsx infra/scripts/keys/get-key.ts -e mainnet3 --role deployer) + // and even this: + // $ yarn tsx infra/scripts/keys/get-key.ts -e mainnet3 --role deployer | cat + // + // But this will not print the private key directly to the shell: + // $ yarn tsx infra/scripts/keys/get-key.ts -e mainnet3 --role deployer + if (process.stdout.isTTY) { + console.log(''); + } else { + const key = getCloudAgentKey(agentConfig, argv.role); + await key.fetch(); + console.log(key.privateKey); + } +} + +main().catch(console.error); diff --git a/typescript/infra/scripts/get-owner-ica.ts b/typescript/infra/scripts/keys/get-owner-ica.ts similarity index 92% rename from typescript/infra/scripts/get-owner-ica.ts rename to typescript/infra/scripts/keys/get-owner-ica.ts index 16c6db99e..b4d42c860 100644 --- a/typescript/infra/scripts/get-owner-ica.ts +++ b/typescript/infra/scripts/keys/get-owner-ica.ts @@ -1,11 +1,10 @@ import { AccountConfig, InterchainAccount } from '@hyperlane-xyz/sdk'; import { Address, eqAddress, isZeroishAddress } from '@hyperlane-xyz/utils'; -import { chainsToSkip } from '../src/config/chain.js'; -import { isEthereumProtocolChain } from '../src/utils/utils.js'; - -import { getArgs as getEnvArgs, withChains } from './agent-utils.js'; -import { getEnvironmentConfig, getHyperlaneCore } from './core-utils.js'; +import { chainsToSkip } from '../../src/config/chain.js'; +import { isEthereumProtocolChain } from '../../src/utils/utils.js'; +import { getArgs as getEnvArgs, withChains } from '../agent-utils.js'; +import { getEnvironmentConfig, getHyperlaneCore } from '../core-utils.js'; function getArgs() { return withChains(getEnvArgs()) diff --git a/typescript/infra/scripts/rotate-key.ts b/typescript/infra/scripts/keys/rotate-key.ts similarity index 97% rename from typescript/infra/scripts/rotate-key.ts rename to typescript/infra/scripts/keys/rotate-key.ts index c7a9fe559..bd01f6071 100644 --- a/typescript/infra/scripts/rotate-key.ts +++ b/typescript/infra/scripts/keys/rotate-key.ts @@ -3,7 +3,7 @@ import { getArgs, withContext, withKeyRoleAndChain, -} from './agent-utils.js'; +} from '../agent-utils.js'; async function rotateKey() { const argv = await withContext(withKeyRoleAndChain(getArgs())).argv; diff --git a/typescript/infra/scripts/update-key.ts b/typescript/infra/scripts/keys/update-key.ts similarity index 97% rename from typescript/infra/scripts/update-key.ts rename to typescript/infra/scripts/keys/update-key.ts index 862b8c8bc..da27c410b 100644 --- a/typescript/infra/scripts/update-key.ts +++ b/typescript/infra/scripts/keys/update-key.ts @@ -3,7 +3,7 @@ import { getArgs, withContext, withKeyRoleAndChain, -} from './agent-utils.js'; +} from '../agent-utils.js'; async function rotateKey() { const argv = await withKeyRoleAndChain(withContext(getArgs())).argv; diff --git a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts index bc19f434f..e7714778c 100644 --- a/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts +++ b/typescript/infra/scripts/warp-routes/deploy-warp-monitor.ts @@ -46,11 +46,18 @@ async function getWarpRouteIdsInteractive() { value: id, })); - const selection = await checkbox({ - message: 'Select Warp Route IDs to deploy', - choices, - pageSize: 30, - }); + let selection: WarpRouteIds[] = []; + + while (!selection.length) { + selection = await checkbox({ + message: 'Select Warp Route IDs to deploy', + choices, + pageSize: 30, + }); + if (!selection.length) { + console.log('Please select at least one Warp Route ID'); + } + } return selection; } diff --git a/typescript/infra/scripts/warp-routes/monitor/metrics.ts b/typescript/infra/scripts/warp-routes/monitor/metrics.ts index 7f832b512..eec6738ab 100644 --- a/typescript/infra/scripts/warp-routes/monitor/metrics.ts +++ b/typescript/infra/scripts/warp-routes/monitor/metrics.ts @@ -74,17 +74,23 @@ export function updateTokenBalanceMetrics( }; warpRouteTokenBalance.labels(metrics).set(balanceInfo.balance); - logger.info('Wallet balance updated for token', { - labels: metrics, - balance: balanceInfo.balance, - }); + logger.info( + { + labels: metrics, + balance: balanceInfo.balance, + }, + 'Wallet balance updated for token', + ); if (balanceInfo.valueUSD) { warpRouteCollateralValue.labels(metrics).set(balanceInfo.valueUSD); - logger.info('Wallet balance updated for token', { - labels: metrics, - valueUSD: balanceInfo.valueUSD, - }); + logger.info( + { + labels: metrics, + valueUSD: balanceInfo.valueUSD, + }, + 'Wallet value updated for token', + ); } } diff --git a/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts b/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts index f9af0039d..7a8fdb645 100644 --- a/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts +++ b/typescript/infra/scripts/warp-routes/monitor/monitor-warp-route-balances.ts @@ -13,7 +13,7 @@ import { TokenStandard, WarpCore, } from '@hyperlane-xyz/sdk'; -import { ProtocolType, objMap, objMerge } from '@hyperlane-xyz/utils'; +import { ProtocolType, objMap, objMerge, sleep } from '@hyperlane-xyz/utils'; import { getWarpCoreConfig } from '../../../config/registry.js'; import { @@ -78,7 +78,7 @@ async function pollAndUpdateWarpRouteMetrics( apiKey: await getCoinGeckoApiKey(), }); - setInterval(async () => { + while (true) { await tryFn(async () => { await Promise.all( warpCore.tokens.map((token) => @@ -86,7 +86,8 @@ async function pollAndUpdateWarpRouteMetrics( ), ); }, 'Updating warp route metrics'); - }, checkFrequency); + await sleep(checkFrequency); + } } // Updates the metrics for a single token in a warp route. @@ -246,9 +247,7 @@ async function getCoinGeckoApiKey(): Promise { return apiKey; } -main() - .then(logger.info) - .catch((err) => { - logger.error('Error in main', err); - process.exit(1); - }); +main().catch((err) => { + logger.error('Error in main:', err); + process.exit(1); +}); diff --git a/typescript/infra/src/config/agent/relayer.ts b/typescript/infra/src/config/agent/relayer.ts index 648ab81ac..a7500ec74 100644 --- a/typescript/infra/src/config/agent/relayer.ts +++ b/typescript/infra/src/config/agent/relayer.ts @@ -242,6 +242,18 @@ export function routerMatchingList( return matchingList(routers); } +// Create a matching list for the given senders to any destination or recipient +export function senderMatchingList( + senders: ChainMap<{ sender: Address }>, +): MatchingList { + return Object.entries(senders).map(([chain, { sender }]) => ({ + originDomain: getDomainId(chain), + senderAddress: addressToBytes32(sender), + destinationDomain: '*', + recipientAddress: '*', + })); +} + // Create a matching list for the given contract addresses export function matchingList( addressesMap: HyperlaneAddressesMap, diff --git a/typescript/infra/src/warp/helm.ts b/typescript/infra/src/warp/helm.ts index 02b8d9dc9..2b0123c3b 100644 --- a/typescript/infra/src/warp/helm.ts +++ b/typescript/infra/src/warp/helm.ts @@ -22,7 +22,7 @@ export class WarpRouteMonitorHelmManager extends HelmManager { return { image: { repository: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '6cd61f1-20241112-111341', + tag: '7544b99-20241119-162215', }, warpRouteId: this.warpRouteId, fullnameOverride: this.helmReleaseName, diff --git a/typescript/sdk/CHANGELOG.md b/typescript/sdk/CHANGELOG.md index 028f546b2..2395e197f 100644 --- a/typescript/sdk/CHANGELOG.md +++ b/typescript/sdk/CHANGELOG.md @@ -1,5 +1,22 @@ # @hyperlane-xyz/sdk +## 7.1.0 + +### Minor Changes + +- 6f2d50fbd: Updated Fraxtal set to include Superlane validators, updated Flow set +- 1159e0f4b: Enroll new validators for alephzeroevmmainnet, chilizmainnet, flowmainnet, immutablezkevmmainnet, metal, polynomialfi, rarichain, rootstockmainnet, superpositionmainnet, flame, prom, inevm. +- ff2b4e2fb: Added helpers to Token and token adapters to get bridged supply of tokens" +- 0e285a443: Add a validateZodResult util function +- 5db46bd31: Implements persistent relayer for use in CLI +- 0cd65c571: Add chainMetadataToCosmosChain function + +### Patch Changes + +- Updated dependencies [0e285a443] + - @hyperlane-xyz/utils@7.1.0 + - @hyperlane-xyz/core@5.8.1 + ## 7.0.0 ### Major Changes diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index 0918fb683..9f4fd0615 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,14 +1,15 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "7.0.0", + "version": "7.1.0", "dependencies": { "@arbitrum/sdk": "^4.0.0", "@aws-sdk/client-s3": "^3.74.0", + "@chain-registry/types": "^0.50.14", "@cosmjs/cosmwasm-stargate": "^0.32.4", "@cosmjs/stargate": "^0.32.4", - "@hyperlane-xyz/core": "5.8.0", - "@hyperlane-xyz/utils": "7.0.0", + "@hyperlane-xyz/core": "5.8.1", + "@hyperlane-xyz/utils": "7.1.0", "@safe-global/api-kit": "1.3.0", "@safe-global/protocol-kit": "1.3.0", "@safe-global/safe-deployments": "1.37.8", @@ -19,7 +20,7 @@ "cross-fetch": "^3.1.5", "ethers": "^5.7.2", "pino": "^8.19.0", - "viem": "^2.21.40", + "viem": "^2.21.45", "zod": "^3.21.2" }, "devDependencies": { diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 88f42c782..5f80ff91a 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -350,11 +350,12 @@ export const defaultMultisigConfigs: ChainMap = { }, flowmainnet: { - threshold: 2, + threshold: 3, validators: [ '0xe132235c958ca1f3f24d772e5970dd58da4c0f6e', '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly '0x4f977a59fdc2d9e39f6d780a84d5b4add1495a36', // mitosis + '0x14ADB9e3598c395Fe3290f3ba706C3816Aa78F59', // flow foundation ], }, @@ -364,11 +365,14 @@ export const defaultMultisigConfigs: ChainMap = { }, fraxtal: { - threshold: 2, + threshold: 4, validators: [ '0x4bce180dac6da60d0f3a2bdf036ffe9004f944c1', - '0xcf0211fafbb91fd9d06d7e306b30032dc3a1934f', // merkly - '0x25b3a88f7cfd3c9f7d7e32b295673a16a6ddbd91', // luganodes + '0x0d4c1394a255568ec0ecd11795B28D1BdA183Ca4', // tessellated (superlane) + '0x1c3C3013B863Cf666499Da1A61949AE396E3Ab82', // enigma (superlane) + '0x573e960e07ad74ea2c5f1e3c31b2055994b12797', // imperator (superlane) + '0x14d0B24d3a8F3aAD17DB4b62cBcEC12821c98Cb3', // bware (superlane) + '0x25b3a88f7cfd3c9f7d7e32b295673a16a6ddbd91', // luganodes (superlane) ], }, diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index 75d74e5c8..1c2146b79 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -26,7 +26,6 @@ export { testCosmosChain, testSealevelChain, } from './consts/testChains.js'; -export { randomAddress } from './test/testUtils.js'; export { attachAndConnectContracts, attachContracts, @@ -329,6 +328,7 @@ export { SmartProviderOptions, } from './providers/SmartProvider/types.js'; export { CallData } from './providers/transactions/types.js'; +export { randomAddress } from './test/testUtils.js'; export { SubmitterMetadataSchema } from './providers/transactions/submitter/schemas.js'; export { TxSubmitterInterface } from './providers/transactions/submitter/TxSubmitterInterface.js'; @@ -370,6 +370,10 @@ export { EV5TxTransformerInterface } from './providers/transactions/transformer/ export { EV5InterchainAccountTxTransformerPropsSchema } from './providers/transactions/transformer/ethersV5/schemas.js'; export { EV5InterchainAccountTxTransformerProps } from './providers/transactions/transformer/ethersV5/types.js'; +export { + chainMetadataToCosmosChain, + chainMetadataToViemChain, +} from './metadata/chainMetadataConversion.js'; export { EvmGasRouterAdapter, EvmRouterAdapter, @@ -503,7 +507,6 @@ export { getSealevelAccountDataSchema, } from './utils/sealevelSerialization.js'; export { getChainIdFromTxs } from './utils/transactions.js'; -export { chainMetadataToViemChain } from './utils/viem.js'; export { FeeConstantConfig, RouteBlacklist, @@ -533,7 +536,7 @@ export { isSyntheticRebaseConfig, isTokenMetadata, } from './token/schemas.js'; -export { isCompliant } from './utils/schemas.js'; +export { isCompliant, validateZodResult } from './utils/schemas.js'; export { canProposeSafeTransactions, diff --git a/typescript/sdk/src/metadata/chainMetadataConversion.ts b/typescript/sdk/src/metadata/chainMetadataConversion.ts new file mode 100644 index 000000000..d0574e301 --- /dev/null +++ b/typescript/sdk/src/metadata/chainMetadataConversion.ts @@ -0,0 +1,98 @@ +import type { AssetList, Chain as CosmosChain } from '@chain-registry/types'; +import { Chain, defineChain } from 'viem'; + +import { test1 } from '../consts/testChains.js'; +import { + ChainMetadata, + getChainIdNumber, +} from '../metadata/chainMetadataTypes.js'; + +export function chainMetadataToViemChain(metadata: ChainMetadata): Chain { + return defineChain({ + id: getChainIdNumber(metadata), + name: metadata.displayName || metadata.name, + network: metadata.name, + nativeCurrency: metadata.nativeToken || test1.nativeToken!, + rpcUrls: { + public: { http: [metadata.rpcUrls[0].http] }, + default: { http: [metadata.rpcUrls[0].http] }, + }, + blockExplorers: metadata.blockExplorers?.length + ? { + default: { + name: metadata.blockExplorers[0].name, + url: metadata.blockExplorers[0].url, + }, + } + : undefined, + testnet: !!metadata.isTestnet, + }); +} + +export function chainMetadataToCosmosChain(metadata: ChainMetadata): { + chain: CosmosChain; + assets: AssetList; +} { + const { + name, + displayName, + chainId, + rpcUrls, + restUrls, + isTestnet, + nativeToken, + bech32Prefix, + slip44, + } = metadata; + + if (!nativeToken) throw new Error(`Missing native token for ${name}`); + + const chain: CosmosChain = { + chain_name: name, + chain_type: 'cosmos', + status: 'live', + network_type: isTestnet ? 'testnet' : 'mainnet', + pretty_name: displayName || name, + chain_id: chainId as string, + bech32_prefix: bech32Prefix!, + slip44: slip44!, + apis: { + rpc: [{ address: rpcUrls[0].http, provider: displayName || name }], + rest: restUrls + ? [{ address: restUrls[0].http, provider: displayName || name }] + : [], + }, + fees: { + fee_tokens: [{ denom: 'token' }], + }, + staking: { + staking_tokens: [{ denom: 'stake' }], + }, + }; + + const assets: AssetList = { + chain_name: name, + assets: [ + { + description: `The native token of ${displayName || name} chain.`, + denom_units: [{ denom: 'token', exponent: nativeToken.decimals }], + base: 'token', + name: 'token', + display: 'token', + symbol: 'token', + type_asset: 'sdk.coin', + }, + { + description: `The native token of ${displayName || name} chain.`, + denom_units: [{ denom: 'token', exponent: nativeToken.decimals }], + base: 'stake', + name: 'stake', + display: 'stake', + symbol: 'stake', + type_asset: 'sdk.coin', + }, + ], + }; + + return { chain, assets }; +} diff --git a/typescript/sdk/src/token/Token.ts b/typescript/sdk/src/token/Token.ts index b63915969..0217802e7 100644 --- a/typescript/sdk/src/token/Token.ts +++ b/typescript/sdk/src/token/Token.ts @@ -40,6 +40,7 @@ import { } from './adapters/CosmosTokenAdapter.js'; import { EvmHypCollateralAdapter, + EvmHypCollateralFiatAdapter, EvmHypNativeAdapter, EvmHypSyntheticAdapter, EvmHypXERC20Adapter, @@ -192,13 +193,16 @@ export class Token implements IToken { }); } else if ( standard === TokenStandard.EvmHypCollateral || - standard === TokenStandard.EvmHypCollateralFiat || standard === TokenStandard.EvmHypOwnerCollateral || standard === TokenStandard.EvmHypRebaseCollateral ) { return new EvmHypCollateralAdapter(chainName, multiProvider, { token: addressOrDenom, }); + } else if (standard === TokenStandard.EvmHypCollateralFiat) { + return new EvmHypCollateralFiatAdapter(chainName, multiProvider, { + token: addressOrDenom, + }); } else if ( standard === TokenStandard.EvmHypSynthetic || standard === TokenStandard.EvmHypSyntheticRebase diff --git a/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts b/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts index 794d5cdff..cd9910a5a 100644 --- a/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts +++ b/typescript/sdk/src/token/adapters/EvmTokenAdapter.ts @@ -261,9 +261,7 @@ export class EvmHypCollateralAdapter return this.wrappedTokenAddress!; } - protected async getWrappedTokenAdapter(): Promise< - ITokenAdapter - > { + protected async getWrappedTokenAdapter(): Promise { return new EvmTokenAdapter(this.chainName, this.multiProvider, { token: await this.getWrappedTokenAddress(), }); @@ -304,6 +302,21 @@ export class EvmHypCollateralAdapter } } +export class EvmHypCollateralFiatAdapter + extends EvmHypCollateralAdapter + implements IHypTokenAdapter +{ + /** + * Note this may be inaccurate, as this returns the total supply + * of the fiat token, which may be used by other bridges. + * However this is the best we can do with a simple view call. + */ + override async getBridgedSupply(): Promise { + const wrapped = await this.getWrappedTokenAdapter(); + return wrapped.getTotalSupply(); + } +} + // Interacts with HypXERC20Lockbox contracts export class EvmHypXERC20LockboxAdapter extends EvmHypCollateralAdapter diff --git a/typescript/sdk/src/utils/schemas.ts b/typescript/sdk/src/utils/schemas.ts index 2babea6c0..22de9ad0b 100644 --- a/typescript/sdk/src/utils/schemas.ts +++ b/typescript/sdk/src/utils/schemas.ts @@ -1,6 +1,20 @@ -import { z } from 'zod'; +import { SafeParseReturnType, z } from 'zod'; + +import { rootLogger } from '@hyperlane-xyz/utils'; export function isCompliant(schema: S) { return (config: unknown): config is z.infer => schema.safeParse(config).success; } + +export function validateZodResult( + result: SafeParseReturnType, + desc: string = 'config', +): T { + if (!result.success) { + rootLogger.warn(`Invalid ${desc}`, result.error); + throw new Error(`Invalid desc: ${result.error.toString()}`); + } else { + return result.data; + } +} diff --git a/typescript/sdk/src/utils/viem.ts b/typescript/sdk/src/utils/viem.ts deleted file mode 100644 index 38b574b2d..000000000 --- a/typescript/sdk/src/utils/viem.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Chain, defineChain } from 'viem'; - -import { test1 } from '../consts/testChains.js'; -import { - ChainMetadata, - getChainIdNumber, -} from '../metadata/chainMetadataTypes.js'; - -export function chainMetadataToViemChain(metadata: ChainMetadata): Chain { - return defineChain({ - id: getChainIdNumber(metadata), - name: metadata.displayName || metadata.name, - network: metadata.name, - nativeCurrency: metadata.nativeToken || test1.nativeToken!, - rpcUrls: { - public: { http: [metadata.rpcUrls[0].http] }, - default: { http: [metadata.rpcUrls[0].http] }, - }, - blockExplorers: metadata.blockExplorers?.length - ? { - default: { - name: metadata.blockExplorers[0].name, - url: metadata.blockExplorers[0].url, - }, - } - : undefined, - testnet: !!metadata.isTestnet, - }); -} diff --git a/typescript/utils/CHANGELOG.md b/typescript/utils/CHANGELOG.md index cecdf5b64..9d852ab86 100644 --- a/typescript/utils/CHANGELOG.md +++ b/typescript/utils/CHANGELOG.md @@ -1,5 +1,11 @@ # @hyperlane-xyz/utils +## 7.1.0 + +### Minor Changes + +- 0e285a443: Add an isRelativeUrl function + ## 7.0.0 ### Major Changes diff --git a/typescript/utils/package.json b/typescript/utils/package.json index 0442c8e62..bbc326da3 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "7.0.0", + "version": "7.1.0", "dependencies": { "@cosmjs/encoding": "^0.32.4", "@solana/web3.js": "^1.95.4", diff --git a/typescript/utils/src/index.ts b/typescript/utils/src/index.ts index c4a869283..ff226449f 100644 --- a/typescript/utils/src/index.ts +++ b/typescript/utils/src/index.ts @@ -170,7 +170,7 @@ export { TokenCaip19Id, WithAddress, } from './types.js'; -export { isHttpsUrl, isUrl } from './url.js'; +export { isHttpsUrl, isRelativeUrl, isUrl } from './url.js'; export { assert } from './validation.js'; export { BaseValidator, ValidatorConfig } from './validator.js'; export { tryParseJsonOrYaml } from './yaml.js'; diff --git a/typescript/utils/src/url.test.ts b/typescript/utils/src/url.test.ts new file mode 100644 index 000000000..d64c8d9f5 --- /dev/null +++ b/typescript/utils/src/url.test.ts @@ -0,0 +1,32 @@ +import { expect } from 'chai'; + +import { isHttpsUrl, isRelativeUrl, isUrl } from './url.js'; + +describe('URL Utilities', () => { + it('isUrl', () => { + expect(isUrl(undefined)).to.be.false; + expect(isUrl(null)).to.be.false; + expect(isUrl('')).to.be.false; + expect(isUrl('foobar')).to.be.false; + expect(isUrl('https://hyperlane.xyz')).to.be.true; + }); + + it('isHttpsUrl', () => { + expect(isHttpsUrl(undefined)).to.be.false; + expect(isHttpsUrl(null)).to.be.false; + expect(isHttpsUrl('')).to.be.false; + expect(isHttpsUrl('foobar')).to.be.false; + expect(isHttpsUrl('http://hyperlane.xyz')).to.be.false; + expect(isHttpsUrl('https://hyperlane.xyz')).to.be.true; + }); + + it('isRelativeUrl', () => { + expect(isRelativeUrl(undefined)).to.be.false; + expect(isRelativeUrl(null)).to.be.false; + expect(isRelativeUrl('')).to.be.false; + expect(isRelativeUrl('foobar')).to.be.false; + expect(isRelativeUrl('https://hyperlane.xyz')).to.be.false; + expect(isRelativeUrl('/foobar')).to.be.true; + expect(isRelativeUrl('/foo/bar', 'https://hyperlane.xyz')).to.be.true; + }); +}); diff --git a/typescript/utils/src/url.ts b/typescript/utils/src/url.ts index e1cca81ff..98f9ee412 100644 --- a/typescript/utils/src/url.ts +++ b/typescript/utils/src/url.ts @@ -1,5 +1,6 @@ -export function isUrl(value: string) { +export function isUrl(value?: string | null) { try { + if (!value) return false; const url = new URL(value); return !!url.hostname; } catch (error) { @@ -7,11 +8,22 @@ export function isUrl(value: string) { } } -export function isHttpsUrl(value: string) { +export function isHttpsUrl(value?: string | null) { try { + if (!value) return false; const url = new URL(value); return url.protocol === 'https:'; } catch (error) { return false; } } + +export function isRelativeUrl(value?: string | null, base?: string): boolean { + try { + if (!value || !value.startsWith('/')) return false; + const url = new URL(value, base || 'https://hyperlane.xyz'); + return !!url.pathname; + } catch { + return false; + } +} diff --git a/typescript/widgets/.eslintrc b/typescript/widgets/.eslintrc index 8bc48f0d9..9041f842f 100644 --- a/typescript/widgets/.eslintrc +++ b/typescript/widgets/.eslintrc @@ -1,18 +1,20 @@ { "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "plugin:react-hooks/recommended", "prettier" ], - "plugins": ["react", "react-hooks", "@typescript-eslint"], + "plugins": ["react", "react-hooks"], "rules": { - // TODO use utils rootLogger in widgets lib - "no-console": ["off"], "react/react-in-jsx-scope": "off", "react/prop-types": "off", "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn" + }, + "settings": { + "react": { + "version": "18", + "defaultVersion": "18" + } } } diff --git a/typescript/widgets/.storybook/main.ts b/typescript/widgets/.storybook/main.ts index d4aa7c994..b14ff0a59 100644 --- a/typescript/widgets/.storybook/main.ts +++ b/typescript/widgets/.storybook/main.ts @@ -10,6 +10,11 @@ const config: StorybookConfig = { '@storybook/addon-onboarding', '@storybook/addon-interactions', ], + refs: { + '@chakra-ui/react': { + disable: true, + }, + }, framework: { name: '@storybook/react-vite', options: {}, diff --git a/typescript/widgets/CHANGELOG.md b/typescript/widgets/CHANGELOG.md index d1ec7cde4..bcfbecee3 100644 --- a/typescript/widgets/CHANGELOG.md +++ b/typescript/widgets/CHANGELOG.md @@ -1,5 +1,30 @@ # @hyperlane-xyz/widgets +## 7.1.0 + +### Minor Changes + +- 0cd65c571: Add multi-protocol wallet integration hooks and types +- 186663505: New Icons + Updated modal with new props + Updated storybook for modal and icon list +- 0e285a443: Add various utility hooks: useIsSsr, useTimeout, useDebounce, useInterval +- 92b5fe777: Props and style update: IconButton and Tooltip + New Icons: XCircleIcon and SwapIcon + +### Patch Changes + +- 794501ba6: Prevent propagation of form submissions from ChainSearchMenu +- Updated dependencies [6f2d50fbd] +- Updated dependencies [1159e0f4b] +- Updated dependencies [0e285a443] +- Updated dependencies [ff2b4e2fb] +- Updated dependencies [0e285a443] +- Updated dependencies [5db46bd31] +- Updated dependencies [0cd65c571] + - @hyperlane-xyz/sdk@7.1.0 + - @hyperlane-xyz/utils@7.1.0 + ## 7.0.0 ### Patch Changes diff --git a/typescript/widgets/package.json b/typescript/widgets/package.json index 27f88002b..8a4331ef0 100644 --- a/typescript/widgets/package.json +++ b/typescript/widgets/package.json @@ -1,20 +1,32 @@ { "name": "@hyperlane-xyz/widgets", "description": "Common react components for Hyperlane projects", - "version": "7.0.0", + "version": "7.1.0", "peerDependencies": { "react": "^18", "react-dom": "^18" }, "dependencies": { + "@cosmos-kit/react": "^2.18.0", "@headlessui/react": "^2.1.8", - "@hyperlane-xyz/sdk": "7.0.0", - "@hyperlane-xyz/utils": "7.0.0", + "@hyperlane-xyz/sdk": "7.1.0", + "@hyperlane-xyz/utils": "7.1.0", + "@interchain-ui/react": "^1.23.28", + "@rainbow-me/rainbowkit": "^2.2.0", + "@solana/wallet-adapter-react": "^0.15.32", + "@solana/wallet-adapter-react-ui": "^0.9.31", + "@solana/web3.js": "^1.95.4", "clsx": "^2.1.1", - "react-tooltip": "^5.28.0" + "react-tooltip": "^5.28.0", + "viem": "^2.21.41", + "wagmi": "^2.12.26" }, "devDependencies": { - "@hyperlane-xyz/registry": "4.7.0", + "@chakra-ui/react": "^2.8.2", + "@cosmjs/cosmwasm-stargate": "^0.32.4", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@hyperlane-xyz/registry": "6.1.0", "@storybook/addon-essentials": "^7.6.14", "@storybook/addon-interactions": "^7.6.14", "@storybook/addon-links": "^7.6.14", @@ -23,6 +35,7 @@ "@storybook/react": "^7.6.14", "@storybook/react-vite": "^7.6.14", "@storybook/test": "^7.6.14", + "@tanstack/react-query": "^5.59.20", "@types/node": "^18.11.18", "@types/react": "^18.0.27", "@types/react-dom": "^18.0.10", @@ -35,6 +48,7 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-storybook": "^0.6.15", + "framer-motion": "^10.16.4", "postcss": "^8.4.21", "prettier": "^2.8.8", "react": "^18.2.0", @@ -72,7 +86,7 @@ "build:ts": "tsc", "build:css": "tailwindcss -c ./tailwind.config.cjs -i ./src/styles.css -o ./dist/styles.css --minify", "clean": "rm -rf ./dist ./cache ./storybook-static", - "lint": "eslint ./src --ext .ts", + "lint": "eslint ./src --ext '.ts,.tsx'", "prettier": "prettier --write ./src", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build" diff --git a/typescript/widgets/src/chains/ChainAddMenu.tsx b/typescript/widgets/src/chains/ChainAddMenu.tsx index 102b1bf5e..9b3c4065c 100644 --- a/typescript/widgets/src/chains/ChainAddMenu.tsx +++ b/typescript/widgets/src/chains/ChainAddMenu.tsx @@ -21,6 +21,7 @@ import { CopyButton } from '../components/CopyButton.js'; import { LinkButton } from '../components/LinkButton.js'; import { ChevronIcon } from '../icons/Chevron.js'; import { PlusIcon } from '../icons/Plus.js'; +import { widgetLogger } from '../logger.js'; export interface ChainAddMenuProps { chainMetadata: ChainMap; @@ -143,7 +144,7 @@ function tryParseMetadataInput( const result = ChainMetadataSchema.safeParse(parsed.data); if (!result.success) { - console.error('Error validating chain config', result.error); + widgetLogger.error('Error validating chain config', result.error); const firstIssue = result.error.issues[0]; return failure(`${firstIssue.path} => ${firstIssue.message}`); } diff --git a/typescript/widgets/src/chains/ChainLogo.tsx b/typescript/widgets/src/chains/ChainLogo.tsx index 082c8eaf3..0f58c66f1 100644 --- a/typescript/widgets/src/chains/ChainLogo.tsx +++ b/typescript/widgets/src/chains/ChainLogo.tsx @@ -4,6 +4,7 @@ import type { IRegistry } from '@hyperlane-xyz/registry'; import { Circle } from '../icons/Circle.js'; import { QuestionMarkIcon } from '../icons/QuestionMark.js'; +import { widgetLogger } from '../logger.js'; type SvgIcon = (props: { width: number; @@ -41,8 +42,8 @@ export function ChainLogo({ registry .getChainLogoUri(chainName) .then((uri) => uri && setSvgLogos({ ...svgLogos, [chainName]: uri })) - .catch((err) => console.error(err)); - }, [chainName, registry, svgLogos, Icon]); + .catch((err) => widgetLogger.error('Error fetching log uri', err)); + }, [chainName, logoUri, registry, svgLogos, Icon]); if (!uri && !Icon) { return ( diff --git a/typescript/widgets/src/chains/ChainSearchMenu.tsx b/typescript/widgets/src/chains/ChainSearchMenu.tsx index 3d88152f5..59532e9f6 100644 --- a/typescript/widgets/src/chains/ChainSearchMenu.tsx +++ b/typescript/widgets/src/chains/ChainSearchMenu.tsx @@ -89,7 +89,7 @@ export function ChainSearchMenu({ overrideChainMetadata, ); return { mergedMetadata, listData: Object.values(mergedMetadata) }; - }, [chainMetadata]); + }, [chainMetadata, overrideChainMetadata]); const { ListComponent, searchFn, sortOptions, defaultSortState } = useCustomizedListItems(customListItemField, defaultSortField); @@ -297,7 +297,7 @@ function useCustomizedListItems( ({ data }: { data: ChainMetadata<{ disabled?: boolean }> }) => ( ), - [ChainListItem, customListItemField], + [customListItemField], ); // Bind the custom field to the search function diff --git a/typescript/widgets/src/components/ErrorBoundary.tsx b/typescript/widgets/src/components/ErrorBoundary.tsx new file mode 100644 index 000000000..79a7ce15e --- /dev/null +++ b/typescript/widgets/src/components/ErrorBoundary.tsx @@ -0,0 +1,48 @@ +import React, { Component, PropsWithChildren, ReactNode } from 'react'; + +import { errorToString } from '@hyperlane-xyz/utils'; + +import { ErrorIcon } from '../icons/Error.js'; +import { widgetLogger } from '../logger.js'; + +type Props = PropsWithChildren<{ + supportLink?: ReactNode; +}>; + +interface State { + error: any; + errorInfo: any; +} + +export class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { error: null, errorInfo: null }; + } + + componentDidCatch(error: any, errorInfo: any) { + this.setState({ + error, + errorInfo, + }); + widgetLogger.error('Error caught by error boundary', error, errorInfo); + } + + render() { + const errorInfo = this.state.error || this.state.errorInfo; + if (errorInfo) { + const details = errorToString(errorInfo, 1000); + return ( +
+
+ +

Fatal Error Occurred

+
{details}
+ {this.props.supportLink} +
+
+ ); + } + return this.props.children; + } +} diff --git a/typescript/widgets/src/components/SearchMenu.tsx b/typescript/widgets/src/components/SearchMenu.tsx index 831b46e74..44c1c2c79 100644 --- a/typescript/widgets/src/components/SearchMenu.tsx +++ b/typescript/widgets/src/components/SearchMenu.tsx @@ -102,12 +102,13 @@ export function SearchMenu< const handleSubmit = useCallback( (e: React.FormEvent) => { e.preventDefault(); + e.stopPropagation(); if (results.length === 1) { const item = results[0]; isEditMode ? onClickEditItem(item) : onClickItem(item); } }, - [results, isEditMode], + [results, isEditMode, onClickEditItem, onClickItem], ); useEffect(() => { @@ -254,6 +255,7 @@ function SortDropdown({ buttonClassname="htw-flex htw-items-stretch hover:htw-bg-gray-100 active:htw-scale-95" menuClassname="htw-py-1.5 htw-px-2 htw-flex htw-flex-col htw-gap-2 htw-text-sm htw-border htw-border-gray-100" menuItems={options.map((o) => ( + // eslint-disable-next-line react/jsx-key
onSetSortBy(o)} @@ -298,7 +300,7 @@ function FilterDropdown({ (k) => !deepEquals(value[k], defaultValue[k]), ); return modifiedKeys.map((k) => value[k]); - }, [value]); + }, [value, defaultValue]); const hasFilters = filterValues.length > 0; const onClear = () => { diff --git a/typescript/widgets/src/icons/Ellipsis.tsx b/typescript/widgets/src/icons/Ellipsis.tsx new file mode 100644 index 000000000..3301badfd --- /dev/null +++ b/typescript/widgets/src/icons/Ellipsis.tsx @@ -0,0 +1,38 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +type Props = DefaultIconProps & { + direction?: 'horizontal' | 'vertical'; +}; + +function _EllipsisIcon({ + color = ColorPalette.Black, + width = 24, + height = 6, + direction = 'horizontal', + className, + ...rest +}: Props) { + return ( + + + + ); +} + +export const EllipsisIcon = memo(_EllipsisIcon); diff --git a/typescript/widgets/src/icons/Error.tsx b/typescript/widgets/src/icons/Error.tsx new file mode 100644 index 000000000..3a667c2a1 --- /dev/null +++ b/typescript/widgets/src/icons/Error.tsx @@ -0,0 +1,18 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _Error({ color, ...rest }: DefaultIconProps) { + return ( + + + + ); +} + +export const ErrorIcon = memo(_Error); diff --git a/typescript/widgets/src/icons/Logout.tsx b/typescript/widgets/src/icons/Logout.tsx new file mode 100644 index 000000000..4832f7c2a --- /dev/null +++ b/typescript/widgets/src/icons/Logout.tsx @@ -0,0 +1,29 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _LogoutIcon({ + color = ColorPalette.Black, + width = 48, + height = 48, + ...rest +}: DefaultIconProps) { + return ( + + + + ); +} + +export const LogoutIcon = memo(_LogoutIcon); diff --git a/typescript/widgets/src/icons/Warning.tsx b/typescript/widgets/src/icons/Warning.tsx new file mode 100644 index 000000000..cc60aac5f --- /dev/null +++ b/typescript/widgets/src/icons/Warning.tsx @@ -0,0 +1,30 @@ +import React, { memo } from 'react'; + +import { ColorPalette } from '../color.js'; + +import { DefaultIconProps } from './types.js'; + +function _WarningIcon({ + color = ColorPalette.Black, + width = 18, + height = 16, + ...rest +}: DefaultIconProps) { + return ( + + + + ); +} + +export const WarningIcon = memo(_WarningIcon); diff --git a/typescript/widgets/src/icons/Web.tsx b/typescript/widgets/src/icons/Web.tsx index 8915ed026..228087f5c 100644 --- a/typescript/widgets/src/icons/Web.tsx +++ b/typescript/widgets/src/icons/Web.tsx @@ -57,9 +57,9 @@ function _Web({ color = ColorPalette.Black, ...rest }: DefaultIconProps) { /> ); diff --git a/typescript/widgets/src/index.ts b/typescript/widgets/src/index.ts index 0762ec9da..655e3c173 100644 --- a/typescript/widgets/src/index.ts +++ b/typescript/widgets/src/index.ts @@ -12,6 +12,7 @@ export { ColorPalette, seedToBgColor } from './color.js'; export { Button } from './components/Button.js'; export { CopyButton } from './components/CopyButton.js'; export { DatetimeField } from './components/DatetimeField.js'; +export { ErrorBoundary } from './components/ErrorBoundary.js'; export { IconButton } from './components/IconButton.js'; export { LinkButton } from './components/LinkButton.js'; export { SegmentedControl } from './components/SegmentedControl.js'; @@ -28,7 +29,9 @@ export { Circle } from './icons/Circle.js'; export { CopyIcon } from './icons/Copy.js'; export { DiscordIcon } from './icons/Discord.js'; export { DocsIcon } from './icons/Docs.js'; +export { EllipsisIcon } from './icons/Ellipsis.js'; export { EnvelopeIcon } from './icons/Envelope.js'; +export { ErrorIcon } from './icons/Error.js'; export { FilterIcon } from './icons/Filter.js'; export { FunnelIcon } from './icons/Funnel.js'; export { GearIcon } from './icons/Gear.js'; @@ -36,6 +39,7 @@ export { GithubIcon } from './icons/Github.js'; export { HistoryIcon } from './icons/History.js'; export { LinkedInIcon } from './icons/LinkedIn.js'; export { LockIcon } from './icons/Lock.js'; +export { LogoutIcon } from './icons/Logout.js'; export { MediumIcon } from './icons/Medium.js'; export { PencilIcon } from './icons/Pencil.js'; export { PlusIcon } from './icons/Plus.js'; @@ -46,17 +50,23 @@ export { ShieldIcon } from './icons/Shield.js'; export { SpinnerIcon } from './icons/Spinner.js'; export { SwapIcon } from './icons/Swap.js'; export { TwitterIcon } from './icons/Twitter.js'; +export { type DefaultIconProps } from './icons/types.js'; export { UpDownArrowsIcon } from './icons/UpDownArrows.js'; export { WalletIcon } from './icons/Wallet.js'; +export { WarningIcon } from './icons/Warning.js'; export { WebIcon } from './icons/Web.js'; export { WideChevronIcon } from './icons/WideChevron.js'; -export { XCircleIcon } from './icons/XCircle.js'; export { XIcon } from './icons/X.js'; -export { type DefaultIconProps } from './icons/types.js'; +export { XCircleIcon } from './icons/XCircle.js'; export { DropdownMenu, type DropdownMenuProps } from './layout/DropdownMenu.js'; export { Modal, useModal, type ModalProps } from './layout/Modal.js'; export { Popover, type PopoverProps } from './layout/Popover.js'; +export { CosmosLogo } from './logos/Cosmos.js'; +export { EthereumLogo } from './logos/Ethereum.js'; export { HyperlaneLogo } from './logos/Hyperlane.js'; +export { PROTOCOL_TO_LOGO } from './logos/protocols.js'; +export { SolanaLogo } from './logos/Solana.js'; +export { WalletConnectLogo } from './logos/WalletConnect.js'; export { MessageTimeline } from './messages/MessageTimeline.js'; export { MessageStage, @@ -72,4 +82,66 @@ export { tryClipboardGet, tryClipboardSet, } from './utils/clipboard.js'; +export { useDebounce } from './utils/debounce.js'; +export { useIsSsr } from './utils/ssr.js'; +export { useInterval, useTimeout } from './utils/timeout.js'; export { useConnectionHealthTest } from './utils/useChainConnectionTest.js'; +export { + AccountList, + AccountSummary, +} from './walletIntegrations/AccountList.js'; +export { ConnectWalletButton } from './walletIntegrations/ConnectWalletButton.js'; +export { + getCosmosKitChainConfigs, + useCosmosAccount, + useCosmosActiveChain, + useCosmosConnectFn, + useCosmosDisconnectFn, + useCosmosTransactionFns, + useCosmosWalletDetails, +} from './walletIntegrations/cosmos.js'; +export { + getWagmiChainConfigs, + useEthereumAccount, + useEthereumActiveChain, + useEthereumConnectFn, + useEthereumDisconnectFn, + useEthereumTransactionFns, + useEthereumWalletDetails, +} from './walletIntegrations/ethereum.js'; +export { + getAccountAddressAndPubKey, + getAccountAddressForChain, + useAccountAddressForChain, + useAccountForChain, + useAccounts, + useActiveChains, + useConnectFns, + useDisconnectFns, + useTransactionFns, + useWalletDetails, +} from './walletIntegrations/multiProtocol.js'; +export { MultiProtocolWalletModal } from './walletIntegrations/MultiProtocolWalletModal.js'; +export { + useSolanaAccount, + useSolanaActiveChain, + useSolanaConnectFn, + useSolanaDisconnectFn, + useSolanaTransactionFns, + useSolanaWalletDetails, +} from './walletIntegrations/solana.js'; +export type { + AccountInfo, + ActiveChainInfo, + ChainAddress, + ChainTransactionFns, + SendTransactionFn, + SwitchNetworkFn, + WalletDetails, +} from './walletIntegrations/types.js'; +export { + ethers5TxToWagmiTx, + findChainByRpcUrl, + getChainsForProtocol, +} from './walletIntegrations/utils.js'; +export { WalletLogo } from './walletIntegrations/WalletLogo.js'; diff --git a/typescript/widgets/src/layout/Modal.tsx b/typescript/widgets/src/layout/Modal.tsx index 87c36e831..bc0b872f0 100644 --- a/typescript/widgets/src/layout/Modal.tsx +++ b/typescript/widgets/src/layout/Modal.tsx @@ -1,9 +1,14 @@ -import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'; +import { + Dialog, + DialogBackdrop, + DialogPanel, + DialogTitle, +} from '@headlessui/react'; import clsx from 'clsx'; import React, { ComponentProps, PropsWithChildren, useState } from 'react'; import { IconButton } from '../components/IconButton.js'; -import { XIcon } from '../icons/X.js'; +import { XCircleIcon } from '../icons/XCircle.js'; export function useModal() { const [isOpen, setIsOpen] = useState(false); @@ -20,6 +25,7 @@ export type ModalProps = PropsWithChildren<{ panelClassname?: string; panelProps?: ComponentProps; showCloseButton?: boolean; + title?: string; }>; export function Modal({ @@ -30,30 +36,33 @@ export function Modal({ panelClassname, panelProps, showCloseButton, + title, children, }: ModalProps) { return ( - +
+ {title && ( + + {title} + + )} {children} {showCloseButton && (
@@ -62,7 +71,7 @@ export function Modal({ title="Close" className="hover:htw-rotate-90" > - +
)} diff --git a/typescript/widgets/src/logger.ts b/typescript/widgets/src/logger.ts new file mode 100644 index 000000000..b45955111 --- /dev/null +++ b/typescript/widgets/src/logger.ts @@ -0,0 +1,3 @@ +import { rootLogger } from '@hyperlane-xyz/utils'; + +export const widgetLogger = rootLogger.child({ module: 'widgets' }); diff --git a/typescript/widgets/src/logos/Cosmos.tsx b/typescript/widgets/src/logos/Cosmos.tsx new file mode 100644 index 000000000..96b2ee814 --- /dev/null +++ b/typescript/widgets/src/logos/Cosmos.tsx @@ -0,0 +1,40 @@ +import React, { SVGProps, memo } from 'react'; + +function _CosmosLogo(props: SVGProps) { + return ( + + + + + + + ); +} + +export const CosmosLogo = memo(_CosmosLogo); diff --git a/typescript/widgets/src/logos/Ethereum.tsx b/typescript/widgets/src/logos/Ethereum.tsx new file mode 100644 index 000000000..6a298601c --- /dev/null +++ b/typescript/widgets/src/logos/Ethereum.tsx @@ -0,0 +1,27 @@ +import React, { SVGProps, memo } from 'react'; + +function _EthereumLogo(props: SVGProps) { + return ( + + + + + + + + + + + ); +} + +export const EthereumLogo = memo(_EthereumLogo); diff --git a/typescript/widgets/src/logos/Solana.tsx b/typescript/widgets/src/logos/Solana.tsx new file mode 100644 index 000000000..07b3affa3 --- /dev/null +++ b/typescript/widgets/src/logos/Solana.tsx @@ -0,0 +1,63 @@ +import React, { SVGProps, memo } from 'react'; + +function _SolanaLogo(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + ); +} + +export const SolanaLogo = memo(_SolanaLogo); diff --git a/typescript/widgets/src/logos/WalletConnect.tsx b/typescript/widgets/src/logos/WalletConnect.tsx new file mode 100644 index 000000000..89b474cbe --- /dev/null +++ b/typescript/widgets/src/logos/WalletConnect.tsx @@ -0,0 +1,33 @@ +import React, { SVGProps, memo } from 'react'; + +function _WalletConnectLogo(props: SVGProps) { + return ( + + + + + + + + + + ); +} + +export const WalletConnectLogo = memo(_WalletConnectLogo); diff --git a/typescript/widgets/src/logos/protocols.ts b/typescript/widgets/src/logos/protocols.ts new file mode 100644 index 000000000..414e4e450 --- /dev/null +++ b/typescript/widgets/src/logos/protocols.ts @@ -0,0 +1,16 @@ +import { FC, SVGProps } from 'react'; + +import { ProtocolType } from '@hyperlane-xyz/utils'; + +import { CosmosLogo } from './Cosmos.js'; +import { EthereumLogo } from './Ethereum.js'; +import { SolanaLogo } from './Solana.js'; + +export const PROTOCOL_TO_LOGO: Record< + ProtocolType, + FC, 'ref'>> +> = { + [ProtocolType.Ethereum]: EthereumLogo, + [ProtocolType.Sealevel]: SolanaLogo, + [ProtocolType.Cosmos]: CosmosLogo, +}; diff --git a/typescript/widgets/src/messages/useMessage.ts b/typescript/widgets/src/messages/useMessage.ts index 78dea5302..3434f621c 100644 --- a/typescript/widgets/src/messages/useMessage.ts +++ b/typescript/widgets/src/messages/useMessage.ts @@ -1,11 +1,14 @@ import { useCallback, useState } from 'react'; import { HYPERLANE_EXPLORER_API_URL } from '../consts.js'; +import { widgetLogger } from '../logger.js'; import { executeExplorerQuery } from '../utils/explorers.js'; -import { useInterval } from '../utils/useInterval.js'; +import { useInterval } from '../utils/timeout.js'; import { ApiMessage, MessageStatus } from './types.js'; +const logger = widgetLogger.child({ module: 'useMessage' }); + interface Params { messageId?: string; originTxHash?: string; @@ -40,7 +43,7 @@ export function useMessage({ }) .catch((e) => setError(e.toString())) .finally(() => setIsLoading(false)); - }, [messageId, originTxHash, data]); + }, [explorerApiUrl, messageId, originTxHash, data]); useInterval(fetcher, retryInterval); @@ -66,13 +69,13 @@ async function fetchMessage( const result = await executeExplorerQuery(url, 5000); if (result.length > 1) { - console.warn('More than one message received, should not occur'); + logger.warn('More than one message received, should not occur'); return result[0]; } else if (result.length === 1) { - console.debug('Message data found, id:', result[0].id); + logger.debug('Message data found, id:', result[0].id); return result[0]; } else { - console.debug('Message data not found'); + logger.debug('Message data not found'); return null; } } diff --git a/typescript/widgets/src/messages/useMessageStage.ts b/typescript/widgets/src/messages/useMessageStage.ts index 54345d4a9..26dd1678b 100644 --- a/typescript/widgets/src/messages/useMessageStage.ts +++ b/typescript/widgets/src/messages/useMessageStage.ts @@ -4,8 +4,9 @@ import type { MultiProvider } from '@hyperlane-xyz/sdk'; import { fetchWithTimeout } from '@hyperlane-xyz/utils'; import { HYPERLANE_EXPLORER_API_URL } from '../consts.js'; +import { widgetLogger } from '../logger.js'; import { queryExplorerForBlock } from '../utils/explorers.js'; -import { useInterval } from '../utils/useInterval.js'; +import { useInterval } from '../utils/timeout.js'; import { MessageStatus, @@ -14,6 +15,8 @@ import { StageTimings, } from './types.js'; +const logger = widgetLogger.child({ module: 'useMessageStage' }); + const VALIDATION_TIME_EST = 5; const DEFAULT_BLOCK_TIME_EST = 3; const DEFAULT_FINALITY_BLOCKS = 3; @@ -67,7 +70,7 @@ export function useMessageStage({ }) .catch((e) => setError(e.toString())) .finally(() => setIsLoading(false)); - }, [message, data]); + }, [explorerApiUrl, multiProvider, message, data]); useInterval(fetcher, retryInterval); @@ -192,7 +195,7 @@ async function tryFetchChainLatestBlock( ) { const metadata = multiProvider.tryGetChainMetadata(domainId); if (!metadata) return null; - console.debug(`Attempting to fetch latest block for:`, metadata.name); + logger.debug(`Attempting to fetch latest block for:`, metadata.name); try { const block = await queryExplorerForBlock( metadata.name, @@ -201,7 +204,7 @@ async function tryFetchChainLatestBlock( ); return block; } catch (error) { - console.error('Error fetching latest block', error); + logger.error('Error fetching latest block', error); return null; } } @@ -213,7 +216,7 @@ async function tryFetchLatestNonce( ) { const metadata = multiProvider.tryGetChainMetadata(domainId); if (!metadata) return null; - console.debug(`Attempting to fetch nonce for:`, metadata.name); + logger.debug(`Attempting to fetch nonce for:`, metadata.name); try { const response = await fetchWithTimeout( `${explorerApiUrl}/latest-nonce`, @@ -227,10 +230,10 @@ async function tryFetchLatestNonce( 3000, ); const result = await response.json(); - console.debug(`Found nonce:`, result.nonce); + logger.debug(`Found nonce:`, result.nonce); return result.nonce; } catch (error) { - console.error('Error fetching nonce', error); + logger.error('Error fetching nonce', error); return null; } } diff --git a/typescript/widgets/src/stories/ErrorBoundary.stories.tsx b/typescript/widgets/src/stories/ErrorBoundary.stories.tsx new file mode 100644 index 000000000..784e84237 --- /dev/null +++ b/typescript/widgets/src/stories/ErrorBoundary.stories.tsx @@ -0,0 +1,32 @@ +import { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; + +import { ErrorBoundary } from '../components/ErrorBoundary'; + +function ErrorTest() { + return ( + }> + + + ); +} + +function ComponentThatThrows() { + if (React) throw new Error('Something went wrong'); + return
Hello
; +} + +function SupportLink() { + return MyLink; +} + +const meta = { + title: 'ErrorBoundary', + component: ErrorTest, +} satisfies Meta; +export default meta; +type Story = StoryObj; + +export const DefaultErrorBoundary = { + args: {}, +} satisfies Story; diff --git a/typescript/widgets/src/stories/IconList.stories.tsx b/typescript/widgets/src/stories/IconList.stories.tsx index 902795691..2a458c0c2 100644 --- a/typescript/widgets/src/stories/IconList.stories.tsx +++ b/typescript/widgets/src/stories/IconList.stories.tsx @@ -11,8 +11,12 @@ interface StoryIconProps { rounded?: boolean; } +const excludedComponents = ['IconButton', 'EllipsisIcon']; + const iconList = Object.entries(Hyperlane) - .filter(([name]) => name.includes('Icon') && !name.includes('IconButton')) + .filter( + ([name]) => name.includes('Icon') && !excludedComponents.includes(name), + ) .map(([_, Component]) => Component as React.ComponentType); function IconList({ @@ -22,6 +26,7 @@ function IconList({ direction, bgColorSeed, roundedWideChevron, + ellipsisDirection, }: { width: number; height: number; @@ -29,6 +34,7 @@ function IconList({ direction: 'n' | 'e' | 's' | 'w'; bgColorSeed: number | undefined; roundedWideChevron: boolean; + ellipsisDirection: 'vertical' | 'horizontal'; }) { return ( <> @@ -52,6 +58,15 @@ function IconList({ /> ))} + + EllipsisIcon + + Circle @@ -85,6 +100,10 @@ const meta = { options: ['n', 'e', 's', 'w'], control: { type: 'select' }, }, + ellipsisDirection: { + options: ['horizontal', 'vertical'], + control: { type: 'select' }, + }, }, } satisfies Meta; export default meta; @@ -98,5 +117,6 @@ export const DefaultIconList = { direction: 's', bgColorSeed: 0, roundedWideChevron: false, + ellipsisDirection: 'horizontal', }, } satisfies Story; diff --git a/typescript/widgets/src/stories/Modal.stories.tsx b/typescript/widgets/src/stories/Modal.stories.tsx index ea667df31..073a7077a 100644 --- a/typescript/widgets/src/stories/Modal.stories.tsx +++ b/typescript/widgets/src/stories/Modal.stories.tsx @@ -4,7 +4,13 @@ import React, { useState } from 'react'; import { Modal } from '../layout/Modal.js'; -function MyModal() { +function MyModal({ + title, + showCloseButton, +}: { + title?: string; + showCloseButton?: boolean; +}) { const [isOpen, setIsOpen] = useState(false); const open = () => setIsOpen(true); const close = () => setIsOpen(false); @@ -15,8 +21,9 @@ function MyModal() {
Hello Modal
@@ -32,5 +39,5 @@ export default meta; type Story = StoryObj; export const BasicModal = { - args: {}, + args: { title: '', showCloseButton: true }, } satisfies Story; diff --git a/typescript/widgets/src/stories/MultiProtocolWalletModal.stories.tsx b/typescript/widgets/src/stories/MultiProtocolWalletModal.stories.tsx new file mode 100644 index 000000000..dd2aadff7 --- /dev/null +++ b/typescript/widgets/src/stories/MultiProtocolWalletModal.stories.tsx @@ -0,0 +1,124 @@ +import { ChakraProvider } from '@chakra-ui/react'; +import { ChainProvider } from '@cosmos-kit/react'; +import '@interchain-ui/react/styles'; +import { RainbowKitProvider } from '@rainbow-me/rainbowkit'; +import '@rainbow-me/rainbowkit/styles.css'; +import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; +import { + ConnectionProvider, + WalletProvider, +} from '@solana/wallet-adapter-react'; +import { WalletModalProvider } from '@solana/wallet-adapter-react-ui'; +import '@solana/wallet-adapter-react-ui/styles.css'; +import { clusterApiUrl } from '@solana/web3.js'; +import { Meta, StoryObj } from '@storybook/react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import React, { PropsWithChildren, useState } from 'react'; +import { WagmiProvider, createConfig, http } from 'wagmi'; + +import { cosmoshub, ethereum, solanamainnet } from '@hyperlane-xyz/registry'; +import { MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { ProtocolType } from '@hyperlane-xyz/utils'; + +import { AccountList } from '../walletIntegrations/AccountList.js'; +import { ConnectWalletButton } from '../walletIntegrations/ConnectWalletButton.js'; +import { MultiProtocolWalletModal } from '../walletIntegrations/MultiProtocolWalletModal.js'; +import { getCosmosKitChainConfigs } from '../walletIntegrations/cosmos.js'; +import { getWagmiChainConfigs } from '../walletIntegrations/ethereum.js'; + +const multiProvider = new MultiProtocolProvider({ + ethereum, + cosmoshub, + solanamainnet, +}); + +function MinimalDapp({ protocols }: { protocols?: ProtocolType[] }) { + const [isOpen, setIsOpen] = useState(false); + const open = () => setIsOpen(true); + const close = () => setIsOpen(false); + + return ( + + + +
+

CONNECT BUTTON

+ +

ACCOUNT SUMMARY

+ +
+ +
+
+
+ ); +} + +const wagmiConfig = createConfig({ + chains: [getWagmiChainConfigs(multiProvider)[0]], + transports: { [ethereum.chainId]: http() }, +}); + +function EthereumWalletProvider({ children }: PropsWithChildren) { + const queryClient = new QueryClient(); + + return ( + + + {children} + + + ); +} + +const cosmosKitConfig = getCosmosKitChainConfigs(multiProvider); + +function CosmosWalletProvider({ children }: PropsWithChildren) { + return ( + + + {children} + + + ); +} + +function SolanaWalletProvider({ children }: PropsWithChildren) { + return ( + + + {children} + + + ); +} + +const meta = { + title: 'MultiProtocolWalletModal', + component: MinimalDapp, +} satisfies Meta; +export default meta; +type Story = StoryObj; + +export const DefaultPicker = { + args: {}, +} satisfies Story; + +export const EvmOnlyPicker = { + args: { protocols: [ProtocolType.Ethereum] }, +} satisfies Story; diff --git a/typescript/widgets/src/utils/clipboard.ts b/typescript/widgets/src/utils/clipboard.ts index eb331af45..454b73a76 100644 --- a/typescript/widgets/src/utils/clipboard.ts +++ b/typescript/widgets/src/utils/clipboard.ts @@ -1,3 +1,5 @@ +import { widgetLogger } from '../logger.js'; + export function isClipboardReadSupported() { return !!navigator?.clipboard?.readText; } @@ -7,7 +9,7 @@ export async function tryClipboardSet(value: string) { await navigator.clipboard.writeText(value); return true; } catch (error) { - console.error('Failed to set clipboard', error); + widgetLogger.error('Failed to set clipboard', error); return false; } } @@ -18,7 +20,7 @@ export async function tryClipboardGet() { const value = await navigator.clipboard.readText(); return value; } catch (error) { - console.error('Failed to read from clipboard', error); + widgetLogger.error('Failed to read from clipboard', error); return null; } } diff --git a/typescript/widgets/src/utils/debounce.ts b/typescript/widgets/src/utils/debounce.ts new file mode 100644 index 000000000..43524d5b0 --- /dev/null +++ b/typescript/widgets/src/utils/debounce.ts @@ -0,0 +1,18 @@ +import { useEffect, useState } from 'react'; + +// Based on https://usehooks.com/useDebounce +export function useDebounce(value: T, delayMs = 500): T { + const [debouncedValue, setDebouncedValue] = useState(value); + + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedValue(value); + }, delayMs); + + return () => { + clearTimeout(handler); + }; + }, [value, delayMs]); + + return debouncedValue; +} diff --git a/typescript/widgets/src/utils/explorers.ts b/typescript/widgets/src/utils/explorers.ts index 38c470d31..b546f425d 100644 --- a/typescript/widgets/src/utils/explorers.ts +++ b/typescript/widgets/src/utils/explorers.ts @@ -1,6 +1,8 @@ import type { MultiProvider } from '@hyperlane-xyz/sdk'; import { fetchWithTimeout } from '@hyperlane-xyz/utils'; +import { widgetLogger } from '../logger.js'; + export interface ExplorerQueryResponse { status: string; message: string; @@ -29,7 +31,7 @@ export async function queryExplorer

( throw new Error(`No URL found for explorer for chain ${chainName}`); let url = `${baseUrl}/${path}`; - console.debug('Querying explorer url:', url); + widgetLogger.debug('Querying explorer url:', url); if (apiKey) { url += `&apikey=${apiKey}`; @@ -76,7 +78,7 @@ export async function queryExplorerForBlock( ); if (!block?.number || parseInt(block.number.toString()) < 0) { const msg = 'Invalid block result'; - console.error(msg, JSON.stringify(block), path); + widgetLogger.error(msg, JSON.stringify(block), path); throw new Error(msg); } return block; diff --git a/typescript/widgets/src/utils/ssr.ts b/typescript/widgets/src/utils/ssr.ts new file mode 100644 index 000000000..98ff02a8b --- /dev/null +++ b/typescript/widgets/src/utils/ssr.ts @@ -0,0 +1,10 @@ +import { useEffect, useState } from 'react'; + +export function useIsSsr() { + const [isSsr, setIsSsr] = useState(true); + // Effects are only run on the client side + useEffect(() => { + setIsSsr(false); + }, []); + return isSsr; +} diff --git a/typescript/widgets/src/utils/timeout.ts b/typescript/widgets/src/utils/timeout.ts new file mode 100644 index 000000000..e87f67b37 --- /dev/null +++ b/typescript/widgets/src/utils/timeout.ts @@ -0,0 +1,52 @@ +import { useCallback, useEffect, useLayoutEffect, useRef } from 'react'; + +const useIsomorphicLayoutEffect = + typeof window !== 'undefined' ? useLayoutEffect : useEffect; + +// https://usehooks-typescript.com/react-hook/use-interval +export function useInterval(callback: () => void, delay: number | null) { + const savedCallback = useRef(callback); + + // Remember the latest callback if it changes. + useIsomorphicLayoutEffect(() => { + savedCallback.current = callback; + }, [callback]); + + // Set up the interval. + useEffect(() => { + // Don't schedule if no delay is specified. + // Note: 0 is a valid value for delay. + if (!delay && delay !== 0) { + return; + } + + const id = setInterval(() => savedCallback.current(), delay); + + return () => clearInterval(id); + }, [delay]); +} + +// https://medium.com/javascript-in-plain-english/usetimeout-react-hook-3cc58b94af1f +export const useTimeout = ( + callback: () => void, + delay = 0, // in ms (default: immediately put into JS Event Queue) +): (() => void) => { + const timeoutIdRef = useRef(); + + const cancel = useCallback(() => { + const timeoutId = timeoutIdRef.current; + if (timeoutId) { + timeoutIdRef.current = undefined; + clearTimeout(timeoutId); + } + }, [timeoutIdRef]); + + useEffect(() => { + if (delay >= 0) { + timeoutIdRef.current = setTimeout(callback, delay); + } + return cancel; + }, [callback, delay, cancel]); + + return cancel; +}; diff --git a/typescript/widgets/src/utils/useChainConnectionTest.ts b/typescript/widgets/src/utils/useChainConnectionTest.ts index 920b2e7dd..6892fb83b 100644 --- a/typescript/widgets/src/utils/useChainConnectionTest.ts +++ b/typescript/widgets/src/utils/useChainConnectionTest.ts @@ -26,7 +26,7 @@ export function useConnectionHealthTest( timeout(tester(chainMetadata, index), HEALTH_TEST_TIMEOUT) .then((result) => setIsHealthy(result)) .catch(() => setIsHealthy(false)); - }, [chainMetadata, index, tester]); + }, [chainMetadata, index, type, tester]); return isHealthy; } diff --git a/typescript/widgets/src/utils/useInterval.ts b/typescript/widgets/src/utils/useInterval.ts deleted file mode 100644 index c8ae6d122..000000000 --- a/typescript/widgets/src/utils/useInterval.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { useEffect, useLayoutEffect, useRef } from 'react'; - -const useIsomorphicLayoutEffect = - typeof window !== 'undefined' ? useLayoutEffect : useEffect; - -// https://usehooks-typescript.com/react-hook/use-interval -export function useInterval(callback: () => void, delay: number | null) { - const savedCallback = useRef(callback); - - // Remember the latest callback if it changes. - useIsomorphicLayoutEffect(() => { - savedCallback.current = callback; - }, [callback]); - - // Set up the interval. - useEffect(() => { - // Don't schedule if no delay is specified. - // Note: 0 is a valid value for delay. - if (!delay && delay !== 0) { - return; - } - - const id = setInterval(() => savedCallback.current(), delay); - - return () => clearInterval(id); - }, [delay]); -} diff --git a/typescript/widgets/src/walletIntegrations/AccountList.tsx b/typescript/widgets/src/walletIntegrations/AccountList.tsx new file mode 100644 index 000000000..db99a33a4 --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/AccountList.tsx @@ -0,0 +1,143 @@ +import clsx from 'clsx'; +import React, { ButtonHTMLAttributes } from 'react'; + +import { MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { ProtocolType, objKeys } from '@hyperlane-xyz/utils'; + +import { Button } from '../components/Button.js'; +import { IconButton } from '../components/IconButton.js'; +import { LogoutIcon } from '../icons/Logout.js'; +import { WalletIcon } from '../icons/Wallet.js'; +import { XCircleIcon } from '../icons/XCircle.js'; +import { widgetLogger } from '../logger.js'; +import { tryClipboardSet } from '../utils/clipboard.js'; +import { WalletLogo } from '../walletIntegrations/WalletLogo.js'; +import { + useAccounts, + useDisconnectFns, + useWalletDetails, +} from '../walletIntegrations/multiProtocol.js'; + +import { AccountInfo, WalletDetails } from './types.js'; + +const logger = widgetLogger.child({ module: 'walletIntegrations/AccountList' }); + +export function AccountList({ + multiProvider, + onClickConnectWallet, + onCopySuccess, + className, +}: { + multiProvider: MultiProtocolProvider; + onClickConnectWallet: () => void; + onCopySuccess?: () => void; + className?: string; +}) { + const { readyAccounts } = useAccounts(multiProvider); + const disconnectFns = useDisconnectFns(); + const walletDetails = useWalletDetails(); + + const onClickDisconnect = async (protocol: ProtocolType) => { + try { + const disconnectFn = disconnectFns[protocol]; + if (disconnectFn) await disconnectFn(); + } catch (error) { + logger.error('Error disconnecting wallet', error); + } + }; + + const onClickDisconnectAll = async () => { + for (const protocol of objKeys(disconnectFns)) { + await onClickDisconnect(protocol); + } + }; + + return ( +

+ {readyAccounts.map((acc, i) => ( + onClickDisconnect(acc.protocol)} + /> + ))} + + +
+ ); +} + +type AccountSummaryProps = { + account: AccountInfo; + walletDetails: WalletDetails; + onCopySuccess?: () => void; + onClickDisconnect: () => Promise; +} & ButtonHTMLAttributes; + +export function AccountSummary({ + account, + onCopySuccess, + walletDetails, + onClickDisconnect, + className, + ...rest +}: AccountSummaryProps) { + const numAddresses = account?.addresses?.length || 0; + const onlyAddress = + numAddresses === 1 ? account.addresses[0].address : undefined; + + const onClickCopy = async () => { + const copyValue = account.addresses.map((a) => a.address).join(', '); + await tryClipboardSet(copyValue); + onCopySuccess?.(); + }; + + return ( +
+ +
+ + + +
+
+ ); +} + +const styles = { + btn: 'htw-flex htw-w-full htw-items-center all:htw-justify-start htw-rounded-sm htw-text-sm hover:htw-bg-gray-200 all:hover:htw-opacity-100', +}; diff --git a/typescript/widgets/src/walletIntegrations/ConnectWalletButton.tsx b/typescript/widgets/src/walletIntegrations/ConnectWalletButton.tsx new file mode 100644 index 000000000..8ecc32f84 --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/ConnectWalletButton.tsx @@ -0,0 +1,115 @@ +import clsx from 'clsx'; +import React, { ButtonHTMLAttributes } from 'react'; + +import { MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { ProtocolType, shortenAddress } from '@hyperlane-xyz/utils'; + +import { Button } from '../components/Button.js'; +import { ChevronIcon } from '../icons/Chevron.js'; +import { WalletIcon } from '../icons/Wallet.js'; +import { useIsSsr } from '../utils/ssr.js'; + +import { WalletLogo } from './WalletLogo.js'; +import { useAccounts, useWalletDetails } from './multiProtocol.js'; + +type Props = { + multiProvider: MultiProtocolProvider; + onClickWhenConnected: () => void; + onClickWhenUnconnected: () => void; + countClassName?: string; +} & ButtonHTMLAttributes; + +export function ConnectWalletButton({ + multiProvider, + onClickWhenConnected, + onClickWhenUnconnected, + className, + countClassName, + ...rest +}: Props) { + const isSsr = useIsSsr(); + + const { readyAccounts } = useAccounts(multiProvider); + const walletDetails = useWalletDetails(); + + const numReady = readyAccounts.length; + const firstAccount = readyAccounts[0]; + const firstWallet = + walletDetails[firstAccount?.protocol || ProtocolType.Ethereum]; + + if (isSsr) { + // https://github.com/wagmi-dev/wagmi/issues/542#issuecomment-1144178142 + return null; + } + + return ( +
+
+ {numReady === 0 && ( + + )} + + {numReady === 1 && ( + + )} + + {numReady > 1 && ( + + )} +
+
+ ); +} diff --git a/typescript/widgets/src/walletIntegrations/MultiProtocolWalletModal.tsx b/typescript/widgets/src/walletIntegrations/MultiProtocolWalletModal.tsx new file mode 100644 index 000000000..2c200f1ce --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/MultiProtocolWalletModal.tsx @@ -0,0 +1,86 @@ +import React, { PropsWithChildren } from 'react'; + +import { ProtocolType } from '@hyperlane-xyz/utils'; + +import { Modal } from '../layout/Modal.js'; +import { PROTOCOL_TO_LOGO } from '../logos/protocols.js'; + +import { useConnectFns } from './multiProtocol.js'; + +export function MultiProtocolWalletModal({ + isOpen, + close, + protocols, +}: { + isOpen: boolean; + close: () => void; + protocols?: ProtocolType[]; // defaults to all protocols if not provided +}) { + const connectFns = useConnectFns(); + + const onClickProtocol = (protocol: ProtocolType) => { + close(); + const connectFn = connectFns[protocol]; + if (connectFn) connectFn(); + }; + + const includesProtocol = (protocol: ProtocolType) => + !protocols || protocols.includes(protocol); + + return ( + +
+ {includesProtocol(ProtocolType.Ethereum) && ( + + Ethereum + + )} + {includesProtocol(ProtocolType.Sealevel) && ( + + Solana + + )} + {includesProtocol(ProtocolType.Cosmos) && ( + + Cosmos + + )} +
+
+ ); +} + +function ProtocolButton({ + onClick, + subTitle, + protocol, + children, +}: PropsWithChildren<{ + subTitle: string; + protocol: ProtocolType; + onClick: (protocol: ProtocolType) => void; +}>) { + const Logo = PROTOCOL_TO_LOGO[protocol]; + return ( + + ); +} diff --git a/typescript/widgets/src/walletIntegrations/WalletLogo.tsx b/typescript/widgets/src/walletIntegrations/WalletLogo.tsx new file mode 100644 index 000000000..a41658295 --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/WalletLogo.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import { WalletIcon } from '../icons/Wallet.js'; +import { WalletConnectLogo } from '../logos/WalletConnect.js'; + +import { WalletDetails } from './types.js'; + +export function WalletLogo({ + walletDetails, + size, +}: { + walletDetails: WalletDetails; + size?: number; +}) { + const src = walletDetails.logoUrl?.trim(); + + if (src) { + return ; + } else if (walletDetails.name?.toLowerCase() === 'walletconnect') { + return ; + } else { + return ; + } +} diff --git a/typescript/widgets/src/walletIntegrations/cosmos.ts b/typescript/widgets/src/walletIntegrations/cosmos.ts new file mode 100644 index 000000000..7b54c61cf --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/cosmos.ts @@ -0,0 +1,208 @@ +import type { AssetList, Chain as CosmosChain } from '@chain-registry/types'; +import type { + DeliverTxResponse, + ExecuteResult, + IndexedTx, +} from '@cosmjs/cosmwasm-stargate'; +import { useChain, useChains } from '@cosmos-kit/react'; +import { useCallback, useMemo } from 'react'; + +import { cosmoshub } from '@hyperlane-xyz/registry'; +import { + ChainMetadata, + ChainName, + MultiProtocolProvider, + ProviderType, + TypedTransactionReceipt, + WarpTypedTransaction, + chainMetadataToCosmosChain, +} from '@hyperlane-xyz/sdk'; +import { HexString, ProtocolType, assert } from '@hyperlane-xyz/utils'; + +import { widgetLogger } from '../logger.js'; + +import { + AccountInfo, + ActiveChainInfo, + ChainAddress, + ChainTransactionFns, + WalletDetails, +} from './types.js'; +import { getChainsForProtocol } from './utils.js'; + +// Used because the CosmosKit hooks always require a chain name +const PLACEHOLDER_COSMOS_CHAIN = cosmoshub.name; + +const logger = widgetLogger.child({ + module: 'widgets/walletIntegrations/cosmos', +}); + +export function useCosmosAccount( + multiProvider: MultiProtocolProvider, +): AccountInfo { + const cosmosChains = getCosmosChainNames(multiProvider); + const chainToContext = useChains(cosmosChains); + return useMemo(() => { + const addresses: Array = []; + let publicKey: Promise | undefined = undefined; + let connectorName: string | undefined = undefined; + let isReady = false; + for (const [chainName, context] of Object.entries(chainToContext)) { + if (!context.address) continue; + addresses.push({ address: context.address, chainName }); + publicKey = context + .getAccount() + .then((acc) => Buffer.from(acc.pubkey).toString('hex')); + isReady = true; + connectorName ||= context.wallet?.prettyName; + } + return { + protocol: ProtocolType.Cosmos, + addresses, + publicKey, + isReady, + }; + }, [chainToContext]); +} + +export function useCosmosWalletDetails() { + const { wallet } = useChain(PLACEHOLDER_COSMOS_CHAIN); + const { logo, prettyName } = wallet || {}; + + return useMemo( + () => ({ + name: prettyName, + logoUrl: typeof logo === 'string' ? logo : undefined, + }), + [prettyName, logo], + ); +} + +export function useCosmosConnectFn(): () => void { + const { openView } = useChain(PLACEHOLDER_COSMOS_CHAIN); + return openView; +} + +export function useCosmosDisconnectFn(): () => Promise { + const { disconnect, address } = useChain(PLACEHOLDER_COSMOS_CHAIN); + const safeDisconnect = async () => { + if (address) await disconnect(); + }; + return safeDisconnect; +} + +export function useCosmosActiveChain( + _multiProvider: MultiProtocolProvider, +): ActiveChainInfo { + // Cosmoskit doesn't have the concept of an active chain + return useMemo(() => ({} as ActiveChainInfo), []); +} + +export function useCosmosTransactionFns( + multiProvider: MultiProtocolProvider, +): ChainTransactionFns { + const cosmosChains = getCosmosChainNames(multiProvider); + const chainToContext = useChains(cosmosChains); + + const onSwitchNetwork = useCallback( + async (chainName: ChainName) => { + const displayName = + multiProvider.getChainMetadata(chainName).displayName || chainName; + // CosmosKit does not have switch capability + throw new Error( + `Cosmos wallet must be connected to origin chain ${displayName}}`, + ); + }, + [multiProvider], + ); + + const onSendTx = useCallback( + async ({ + tx, + chainName, + activeChainName, + }: { + tx: WarpTypedTransaction; + chainName: ChainName; + activeChainName?: ChainName; + }) => { + const chainContext = chainToContext[chainName]; + if (!chainContext?.address) + throw new Error(`Cosmos wallet not connected for ${chainName}`); + + if (activeChainName && activeChainName !== chainName) + await onSwitchNetwork(chainName); + + logger.debug(`Sending tx on chain ${chainName}`); + const { getSigningCosmWasmClient, getSigningStargateClient } = + chainContext; + let result: ExecuteResult | DeliverTxResponse; + let txDetails: IndexedTx | null; + if (tx.type === ProviderType.CosmJsWasm) { + const client = await getSigningCosmWasmClient(); + result = await client.executeMultiple( + chainContext.address, + [tx.transaction], + 'auto', + ); + txDetails = await client.getTx(result.transactionHash); + } else if (tx.type === ProviderType.CosmJs) { + const client = await getSigningStargateClient(); + // The fee param of 'auto' here stopped working for Neutron-based IBC transfers + // It seems the signAndBroadcast method uses a default fee multiplier of 1.4 + // https://github.com/cosmos/cosmjs/blob/e819a1fc0e99a3e5320d8d6667a08d3b92e5e836/packages/stargate/src/signingstargateclient.ts#L115 + // A multiplier of 1.6 was insufficient for Celestia -> Neutron|Cosmos -> XXX transfers, but 2 worked. + result = await client.signAndBroadcast( + chainContext.address, + [tx.transaction], + 2, + ); + txDetails = await client.getTx(result.transactionHash); + } else { + throw new Error(`Invalid cosmos provider type ${tx.type}`); + } + + const confirm = async (): Promise => { + assert(txDetails, `Cosmos tx failed: ${JSON.stringify(result)}`); + return { + type: tx.type, + receipt: { ...txDetails, transactionHash: result.transactionHash }, + }; + }; + return { hash: result.transactionHash, confirm }; + }, + [onSwitchNetwork, chainToContext], + ); + + return { sendTransaction: onSendTx, switchNetwork: onSwitchNetwork }; +} + +function getCosmosChains( + multiProvider: MultiProtocolProvider, +): ChainMetadata[] { + return [ + ...getChainsForProtocol(multiProvider, ProtocolType.Cosmos), + cosmoshub, + ]; +} + +function getCosmosChainNames( + multiProvider: MultiProtocolProvider, +): ChainName[] { + return getCosmosChains(multiProvider).map((c) => c.name); +} + +// Metadata formatted for use in Wagmi config +export function getCosmosKitChainConfigs( + multiProvider: MultiProtocolProvider, +): { + chains: CosmosChain[]; + assets: AssetList[]; +} { + const chains = getCosmosChains(multiProvider); + const configList = chains.map(chainMetadataToCosmosChain); + return { + chains: configList.map((c) => c.chain), + assets: configList.map((c) => c.assets), + }; +} diff --git a/typescript/widgets/src/walletIntegrations/ethereum.ts b/typescript/widgets/src/walletIntegrations/ethereum.ts new file mode 100644 index 000000000..0a9e8a4a1 --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/ethereum.ts @@ -0,0 +1,169 @@ +import { useConnectModal } from '@rainbow-me/rainbowkit'; +import { + getAccount, + sendTransaction, + switchChain, + waitForTransactionReceipt, +} from '@wagmi/core'; +import { useCallback, useMemo } from 'react'; +import { Chain as ViemChain } from 'viem'; +import { useAccount, useConfig, useDisconnect } from 'wagmi'; + +import { + ChainName, + MultiProtocolProvider, + ProviderType, + TypedTransactionReceipt, + WarpTypedTransaction, + chainMetadataToViemChain, +} from '@hyperlane-xyz/sdk'; +import { ProtocolType, assert, sleep } from '@hyperlane-xyz/utils'; + +import { widgetLogger } from '../logger.js'; + +import { + AccountInfo, + ActiveChainInfo, + ChainTransactionFns, + WalletDetails, +} from './types.js'; +import { ethers5TxToWagmiTx, getChainsForProtocol } from './utils.js'; + +const logger = widgetLogger.child({ module: 'walletIntegrations/ethereum' }); + +export function useEthereumAccount( + _multiProvider: MultiProtocolProvider, +): AccountInfo { + const { address, isConnected, connector } = useAccount(); + const isReady = !!(address && isConnected && connector); + + return useMemo( + () => ({ + protocol: ProtocolType.Ethereum, + addresses: address ? [{ address: `${address}` }] : [], + isReady: isReady, + }), + [address, isReady], + ); +} + +export function useEthereumWalletDetails() { + const { connector } = useAccount(); + const name = connector?.name; + const logoUrl = connector?.icon; + + return useMemo( + () => ({ + name, + logoUrl, + }), + [name, logoUrl], + ); +} + +export function useEthereumConnectFn(): () => void { + const { openConnectModal } = useConnectModal(); + return useCallback(() => openConnectModal?.(), [openConnectModal]); +} + +export function useEthereumDisconnectFn(): () => Promise { + const { disconnectAsync } = useDisconnect(); + return disconnectAsync; +} + +export function useEthereumActiveChain( + multiProvider: MultiProtocolProvider, +): ActiveChainInfo { + const { chain } = useAccount(); + return useMemo( + () => ({ + chainDisplayName: chain?.name, + chainName: chain + ? multiProvider.tryGetChainMetadata(chain.id)?.name + : undefined, + }), + [chain, multiProvider], + ); +} + +export function useEthereumTransactionFns( + multiProvider: MultiProtocolProvider, +): ChainTransactionFns { + const config = useConfig(); + + const onSwitchNetwork = useCallback( + async (chainName: ChainName) => { + const chainId = multiProvider.getChainMetadata(chainName) + .chainId as number; + await switchChain(config, { chainId }); + // Some wallets seem to require a brief pause after switch + await sleep(2000); + }, + [config, multiProvider], + ); + // Note, this doesn't use wagmi's prepare + send pattern because we're potentially sending two transactions + // The prepare hooks are recommended to use pre-click downtime to run async calls, but since the flow + // may require two serial txs, the prepare hooks aren't useful and complicate hook architecture considerably. + // See https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/issues/19 + // See https://github.com/wagmi-dev/wagmi/discussions/1564 + const onSendTx = useCallback( + async ({ + tx, + chainName, + activeChainName, + }: { + tx: WarpTypedTransaction; + chainName: ChainName; + activeChainName?: ChainName; + }) => { + if (tx.type !== ProviderType.EthersV5) + throw new Error(`Unsupported tx type: ${tx.type}`); + + // If the active chain is different from tx origin chain, try to switch network first + if (activeChainName && activeChainName !== chainName) + await onSwitchNetwork(chainName); + + // Since the network switching is not foolproof, we also force a network check here + const chainId = multiProvider.getChainMetadata(chainName) + .chainId as number; + logger.debug('Checking wallet current chain'); + const latestNetwork = await getAccount(config); + assert( + latestNetwork?.chain?.id === chainId, + `Wallet not on chain ${chainName} (ChainMismatchError)`, + ); + + logger.debug(`Sending tx on chain ${chainName}`); + const wagmiTx = ethers5TxToWagmiTx(tx.transaction); + const hash = await sendTransaction(config, { + chainId, + ...wagmiTx, + }); + const confirm = (): Promise => { + const foo = waitForTransactionReceipt(config, { + chainId, + hash, + confirmations: 1, + }); + return foo.then((r) => ({ + type: ProviderType.Viem, + receipt: { ...r, contractAddress: r.contractAddress || null }, + })); + }; + + return { hash, confirm }; + }, + [config, onSwitchNetwork, multiProvider], + ); + + return { sendTransaction: onSendTx, switchNetwork: onSwitchNetwork }; +} + +// Metadata formatted for use in Wagmi config +export function getWagmiChainConfigs( + multiProvider: MultiProtocolProvider, +): ViemChain[] { + return getChainsForProtocol(multiProvider, ProtocolType.Ethereum).map( + chainMetadataToViemChain, + ); +} diff --git a/typescript/widgets/src/walletIntegrations/multiProtocol.tsx b/typescript/widgets/src/walletIntegrations/multiProtocol.tsx new file mode 100644 index 000000000..9fb58abb1 --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/multiProtocol.tsx @@ -0,0 +1,256 @@ +import { useMemo } from 'react'; + +import { ChainName, MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { Address, HexString, ProtocolType } from '@hyperlane-xyz/utils'; + +import { widgetLogger } from '../logger.js'; + +import { + useCosmosAccount, + useCosmosActiveChain, + useCosmosConnectFn, + useCosmosDisconnectFn, + useCosmosTransactionFns, + useCosmosWalletDetails, +} from './cosmos.js'; +import { + useEthereumAccount, + useEthereumActiveChain, + useEthereumConnectFn, + useEthereumDisconnectFn, + useEthereumTransactionFns, + useEthereumWalletDetails, +} from './ethereum.js'; +import { + useSolanaAccount, + useSolanaActiveChain, + useSolanaConnectFn, + useSolanaDisconnectFn, + useSolanaTransactionFns, + useSolanaWalletDetails, +} from './solana.js'; +import { + AccountInfo, + ActiveChainInfo, + ChainTransactionFns, + WalletDetails, +} from './types.js'; + +const logger = widgetLogger.child({ + module: 'walletIntegrations/multiProtocol', +}); + +export function useAccounts( + multiProvider: MultiProtocolProvider, + blacklistedAddresses: Address[] = [], +): { + accounts: Record; + readyAccounts: Array; +} { + const evmAccountInfo = useEthereumAccount(multiProvider); + const solAccountInfo = useSolanaAccount(multiProvider); + const cosmAccountInfo = useCosmosAccount(multiProvider); + + // Filtered ready accounts + const readyAccounts = useMemo( + () => + [evmAccountInfo, solAccountInfo, cosmAccountInfo].filter( + (a) => a.isReady, + ), + [evmAccountInfo, solAccountInfo, cosmAccountInfo], + ); + + // Check if any of the ready accounts are blacklisted + const readyAddresses = readyAccounts + .map((a) => a.addresses) + .flat() + .map((a) => a.address.toLowerCase()); + if (readyAddresses.some((a) => blacklistedAddresses.includes(a))) { + throw new Error('Wallet address is blacklisted'); + } + + return useMemo( + () => ({ + accounts: { + [ProtocolType.Ethereum]: evmAccountInfo, + [ProtocolType.Sealevel]: solAccountInfo, + [ProtocolType.Cosmos]: cosmAccountInfo, + }, + readyAccounts, + }), + [evmAccountInfo, solAccountInfo, cosmAccountInfo, readyAccounts], + ); +} + +export function useAccountForChain( + multiProvider: MultiProtocolProvider, + chainName?: ChainName, +): AccountInfo | undefined { + const { accounts } = useAccounts(multiProvider); + const protocol = chainName ? multiProvider.getProtocol(chainName) : undefined; + if (!chainName || !protocol) return undefined; + return accounts?.[protocol]; +} + +export function useAccountAddressForChain( + multiProvider: MultiProtocolProvider, + chainName?: ChainName, +): Address | undefined { + const { accounts } = useAccounts(multiProvider); + return getAccountAddressForChain(multiProvider, chainName, accounts); +} + +export function getAccountAddressForChain( + multiProvider: MultiProtocolProvider, + chainName?: ChainName, + accounts?: Record, +): Address | undefined { + if (!chainName || !accounts) return undefined; + const protocol = multiProvider.getProtocol(chainName); + const account = accounts[protocol]; + if (protocol === ProtocolType.Cosmos) { + return account?.addresses.find((a) => a.chainName === chainName)?.address; + } else { + // Use first because only cosmos has the notion of per-chain addresses + return account?.addresses[0]?.address; + } +} + +export function getAccountAddressAndPubKey( + multiProvider: MultiProtocolProvider, + chainName?: ChainName, + accounts?: Record, +): { address?: Address; publicKey?: Promise } { + const address = getAccountAddressForChain(multiProvider, chainName, accounts); + if (!accounts || !chainName || !address) return {}; + const protocol = multiProvider.getProtocol(chainName); + const publicKey = accounts[protocol]?.publicKey; + return { address, publicKey }; +} + +export function useWalletDetails(): Record { + const evmWallet = useEthereumWalletDetails(); + const solWallet = useSolanaWalletDetails(); + const cosmosWallet = useCosmosWalletDetails(); + + return useMemo( + () => ({ + [ProtocolType.Ethereum]: evmWallet, + [ProtocolType.Sealevel]: solWallet, + [ProtocolType.Cosmos]: cosmosWallet, + }), + [evmWallet, solWallet, cosmosWallet], + ); +} + +export function useConnectFns(): Record void> { + const onConnectEthereum = useEthereumConnectFn(); + const onConnectSolana = useSolanaConnectFn(); + const onConnectCosmos = useCosmosConnectFn(); + + return useMemo( + () => ({ + [ProtocolType.Ethereum]: onConnectEthereum, + [ProtocolType.Sealevel]: onConnectSolana, + [ProtocolType.Cosmos]: onConnectCosmos, + }), + [onConnectEthereum, onConnectSolana, onConnectCosmos], + ); +} + +export function useDisconnectFns(): Record Promise> { + const disconnectEvm = useEthereumDisconnectFn(); + const disconnectSol = useSolanaDisconnectFn(); + const disconnectCosmos = useCosmosDisconnectFn(); + + const onClickDisconnect = + (env: ProtocolType, disconnectFn?: () => Promise | void) => + async () => { + try { + if (!disconnectFn) throw new Error('Disconnect function is null'); + await disconnectFn(); + } catch (error) { + logger.error(`Error disconnecting from ${env} wallet`, error); + } + }; + + return useMemo( + () => ({ + [ProtocolType.Ethereum]: onClickDisconnect( + ProtocolType.Ethereum, + disconnectEvm, + ), + [ProtocolType.Sealevel]: onClickDisconnect( + ProtocolType.Sealevel, + disconnectSol, + ), + [ProtocolType.Cosmos]: onClickDisconnect( + ProtocolType.Cosmos, + disconnectCosmos, + ), + }), + [disconnectEvm, disconnectSol, disconnectCosmos], + ); +} + +export function useActiveChains(multiProvider: MultiProtocolProvider): { + chains: Record; + readyChains: Array; +} { + const evmChain = useEthereumActiveChain(multiProvider); + const solChain = useSolanaActiveChain(multiProvider); + const cosmChain = useCosmosActiveChain(multiProvider); + + const readyChains = useMemo( + () => [evmChain, solChain, cosmChain].filter((c) => !!c.chainDisplayName), + [evmChain, solChain, cosmChain], + ); + + return useMemo( + () => ({ + chains: { + [ProtocolType.Ethereum]: evmChain, + [ProtocolType.Sealevel]: solChain, + [ProtocolType.Cosmos]: cosmChain, + }, + readyChains, + }), + [evmChain, solChain, cosmChain, readyChains], + ); +} + +export function useTransactionFns( + multiProvider: MultiProtocolProvider, +): Record { + const { switchNetwork: onSwitchEvmNetwork, sendTransaction: onSendEvmTx } = + useEthereumTransactionFns(multiProvider); + const { switchNetwork: onSwitchSolNetwork, sendTransaction: onSendSolTx } = + useSolanaTransactionFns(multiProvider); + const { switchNetwork: onSwitchCosmNetwork, sendTransaction: onSendCosmTx } = + useCosmosTransactionFns(multiProvider); + + return useMemo( + () => ({ + [ProtocolType.Ethereum]: { + sendTransaction: onSendEvmTx, + switchNetwork: onSwitchEvmNetwork, + }, + [ProtocolType.Sealevel]: { + sendTransaction: onSendSolTx, + switchNetwork: onSwitchSolNetwork, + }, + [ProtocolType.Cosmos]: { + sendTransaction: onSendCosmTx, + switchNetwork: onSwitchCosmNetwork, + }, + }), + [ + onSendEvmTx, + onSendSolTx, + onSwitchEvmNetwork, + onSwitchSolNetwork, + onSendCosmTx, + onSwitchCosmNetwork, + ], + ); +} diff --git a/typescript/widgets/src/walletIntegrations/solana.ts b/typescript/widgets/src/walletIntegrations/solana.ts new file mode 100644 index 000000000..94874645a --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/solana.ts @@ -0,0 +1,138 @@ +import { useConnection, useWallet } from '@solana/wallet-adapter-react'; +import { useWalletModal } from '@solana/wallet-adapter-react-ui'; +import { Connection } from '@solana/web3.js'; +import { useCallback, useMemo } from 'react'; + +import { + ChainName, + MultiProtocolProvider, + ProviderType, + TypedTransactionReceipt, + WarpTypedTransaction, +} from '@hyperlane-xyz/sdk'; +import { ProtocolType } from '@hyperlane-xyz/utils'; + +import { widgetLogger } from '../logger.js'; + +import { + AccountInfo, + ActiveChainInfo, + ChainTransactionFns, + WalletDetails, +} from './types.js'; +import { findChainByRpcUrl } from './utils.js'; + +const logger = widgetLogger.child({ module: 'walletIntegrations/solana' }); + +export function useSolanaAccount( + _multiProvider: MultiProtocolProvider, +): AccountInfo { + const { publicKey, connected, wallet } = useWallet(); + const isReady = !!(publicKey && wallet && connected); + const address = publicKey?.toBase58(); + + return useMemo( + () => ({ + protocol: ProtocolType.Sealevel, + addresses: address ? [{ address: address }] : [], + isReady: isReady, + }), + [address, isReady], + ); +} + +export function useSolanaWalletDetails() { + const { wallet } = useWallet(); + const { name, icon } = wallet?.adapter || {}; + + return useMemo( + () => ({ + name, + logoUrl: icon, + }), + [name, icon], + ); +} + +export function useSolanaConnectFn(): () => void { + const { setVisible } = useWalletModal(); + return useCallback(() => setVisible(true), [setVisible]); +} + +export function useSolanaDisconnectFn(): () => Promise { + const { disconnect } = useWallet(); + return disconnect; +} + +export function useSolanaActiveChain( + multiProvider: MultiProtocolProvider, +): ActiveChainInfo { + const { connection } = useConnection(); + const connectionEndpoint = connection?.rpcEndpoint; + return useMemo(() => { + try { + const hostname = new URL(connectionEndpoint).hostname; + const metadata = findChainByRpcUrl(multiProvider, hostname); + if (!metadata) return {}; + return { + chainDisplayName: metadata.displayName, + chainName: metadata.name, + }; + } catch (error) { + logger.warn('Error finding sol active chain', error); + return {}; + } + }, [connectionEndpoint, multiProvider]); +} + +export function useSolanaTransactionFns( + multiProvider: MultiProtocolProvider, +): ChainTransactionFns { + const { sendTransaction: sendSolTransaction } = useWallet(); + + const onSwitchNetwork = useCallback(async (chainName: ChainName) => { + logger.warn(`Solana wallet must be connected to origin chain ${chainName}`); + }, []); + + const onSendTx = useCallback( + async ({ + tx, + chainName, + activeChainName, + }: { + tx: WarpTypedTransaction; + chainName: ChainName; + activeChainName?: ChainName; + }) => { + if (tx.type !== ProviderType.SolanaWeb3) + throw new Error(`Unsupported tx type: ${tx.type}`); + if (activeChainName && activeChainName !== chainName) + await onSwitchNetwork(chainName); + const rpcUrl = multiProvider.getRpcUrl(chainName); + const connection = new Connection(rpcUrl, 'confirmed'); + const { + context: { slot: minContextSlot }, + value: { blockhash, lastValidBlockHeight }, + } = await connection.getLatestBlockhashAndContext(); + + logger.debug(`Sending tx on chain ${chainName}`); + const signature = await sendSolTransaction(tx.transaction, connection, { + minContextSlot, + }); + + const confirm = (): Promise => + connection + .confirmTransaction({ blockhash, lastValidBlockHeight, signature }) + .then(() => connection.getTransaction(signature)) + .then((r) => ({ + type: ProviderType.SolanaWeb3, + receipt: r!, + })); + + return { hash: signature, confirm }; + }, + [onSwitchNetwork, sendSolTransaction, multiProvider], + ); + + return { sendTransaction: onSendTx, switchNetwork: onSwitchNetwork }; +} diff --git a/typescript/widgets/src/walletIntegrations/types.ts b/typescript/widgets/src/walletIntegrations/types.ts new file mode 100644 index 000000000..cab39fbdf --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/types.ts @@ -0,0 +1,48 @@ +import { + ChainName, + TypedTransactionReceipt, + WarpTypedTransaction, +} from '@hyperlane-xyz/sdk'; +import { HexString, ProtocolType } from '@hyperlane-xyz/utils'; + +export interface ChainAddress { + address: string; + chainName?: ChainName; +} + +export interface AccountInfo { + protocol: ProtocolType; + // This needs to be an array instead of a single address b.c. + // Cosmos wallets have different addresses per chain + addresses: Array; + // And another Cosmos exception, public keys are needed + // for tx simulation and gas estimation + publicKey?: Promise; + isReady: boolean; +} + +export interface WalletDetails { + name?: string; + logoUrl?: string; +} + +export interface ActiveChainInfo { + chainDisplayName?: string; + chainName?: ChainName; +} + +export type SendTransactionFn< + TxReq extends WarpTypedTransaction = WarpTypedTransaction, + TxResp extends TypedTransactionReceipt = TypedTransactionReceipt, +> = (params: { + tx: TxReq; + chainName: ChainName; + activeChainName?: ChainName; +}) => Promise<{ hash: string; confirm: () => Promise }>; + +export type SwitchNetworkFn = (chainName: ChainName) => Promise; + +export interface ChainTransactionFns { + sendTransaction: SendTransactionFn; + switchNetwork?: SwitchNetworkFn; +} diff --git a/typescript/widgets/src/walletIntegrations/utils.ts b/typescript/widgets/src/walletIntegrations/utils.ts new file mode 100644 index 000000000..b0a994f1d --- /dev/null +++ b/typescript/widgets/src/walletIntegrations/utils.ts @@ -0,0 +1,56 @@ +import { SendTransactionParameters } from '@wagmi/core'; +import { + PopulatedTransaction as Ethers5Transaction, + BigNumber as EthersBN, +} from 'ethers'; + +import { ChainMetadata, MultiProtocolProvider } from '@hyperlane-xyz/sdk'; +import { ProtocolType } from '@hyperlane-xyz/utils'; + +export function ethers5TxToWagmiTx( + tx: Ethers5Transaction, +): SendTransactionParameters { + if (!tx.to) throw new Error('No tx recipient address specified'); + if (!tx.data) throw new Error('No tx data specified'); + return { + to: tx.to as `0x${string}`, + value: ethersBnToBigInt(tx.value || EthersBN.from('0')), + data: tx.data as `0x{string}`, + nonce: tx.nonce, + chainId: tx.chainId, + gas: tx.gasLimit ? ethersBnToBigInt(tx.gasLimit) : undefined, + gasPrice: tx.gasPrice ? ethersBnToBigInt(tx.gasPrice) : undefined, + maxFeePerGas: tx.maxFeePerGas + ? ethersBnToBigInt(tx.maxFeePerGas) + : undefined, + maxPriorityFeePerGas: tx.maxPriorityFeePerGas + ? ethersBnToBigInt(tx.maxPriorityFeePerGas) + : undefined, + }; +} + +function ethersBnToBigInt(bn: EthersBN): bigint { + return BigInt(bn.toString()); +} + +export function getChainsForProtocol( + multiProvider: MultiProtocolProvider, + protocol: ProtocolType, +): ChainMetadata[] { + return Object.values(multiProvider.metadata).filter( + (c) => c.protocol === protocol, + ); +} + +export function findChainByRpcUrl( + multiProvider: MultiProtocolProvider, + url?: string, +) { + if (!url) return undefined; + const allMetadata = Object.values(multiProvider.metadata); + const searchUrl = url.toLowerCase(); + return allMetadata.find( + (m) => + !!m.rpcUrls.find((rpc) => rpc.http.toLowerCase().includes(searchUrl)), + ); +} diff --git a/typescript/widgets/tailwind.config.cjs b/typescript/widgets/tailwind.config.cjs index f410968ec..48dedefff 100644 --- a/typescript/widgets/tailwind.config.cjs +++ b/typescript/widgets/tailwind.config.cjs @@ -12,6 +12,7 @@ module.exports = { mono: ['Courier New', 'monospace'], }, screens: { + all: '1px', xs: '480px', ...defaultTheme.screens, }, diff --git a/yarn.lock b/yarn.lock index 9ba2eef3e..1a658284c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,7 +19,7 @@ __metadata: languageName: node linkType: hard -"@adraffy/ens-normalize@npm:1.11.0": +"@adraffy/ens-normalize@npm:^1.10.1": version: 1.11.0 resolution: "@adraffy/ens-normalize@npm:1.11.0" checksum: 10/abef75f21470ea43dd6071168e092d2d13e38067e349e76186c78838ae174a46c3e18ca50921d05bea6ec3203074147c9e271f8cb6531d1c2c0e146f3199ddcb @@ -3281,6 +3281,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.8, @babel/compat-data@npm:^7.25.0": version: 7.25.0 resolution: "@babel/compat-data@npm:7.25.0" @@ -3388,6 +3399,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" + dependencies: + "@babel/parser": "npm:^7.26.2" + "@babel/types": "npm:^7.26.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10/71ace82b5b07a554846a003624bfab93275ccf73cdb9f1a37a4c1094bf9dc94bb677c67e8b8c939dbd6c5f0eda2e8f268aa2b0d9c3b9511072565660e717e045 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" @@ -3514,6 +3538,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.16.7": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e090be5dee94dda6cd769972231b21ddfae988acd76b703a480ac0c96f3334557d70a965bf41245d6ee43891e7571a8b400ccf2b2be5803351375d0f4e5bcf08 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" @@ -3670,6 +3704,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10/c28656c52bd48e8c1d9f3e8e68ecafd09d949c57755b0d353739eb4eae7ba4f7e67e92e4036f1cd43378cc1397a2c943ed7bcaf5949b04ab48607def0258b775 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -3698,6 +3739,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10/3f9b649be0c2fd457fa1957b694b4e69532a668866b8a0d81eabfa34ba16dbf3107b39e0e7144c55c3c652bf773ec816af8df4a61273a2bb4eb3145ca9cf478e + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" @@ -3834,6 +3882,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" + dependencies: + "@babel/types": "npm:^7.26.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10/8baee43752a3678ad9f9e360ec845065eeee806f1fdc8e0f348a8a0e13eef0959dabed4a197c978896c493ea205c804d0a1187cc52e4a1ba017c7935bab4983d + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.0" @@ -4961,6 +5020,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.25.0": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10/9f4ea1c1d566c497c052d505587554e782e021e6ccd302c2ad7ae8291c8e16e3f19d4a7726fb64469e057779ea2081c28b7dbefec6d813a22f08a35712c0f699 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.25.0 resolution: "@babel/runtime@npm:7.25.0" @@ -4997,15 +5065,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.25.0": - version: 7.26.0 - resolution: "@babel/runtime@npm:7.26.0" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10/9f4ea1c1d566c497c052d505587554e782e021e6ccd302c2ad7ae8291c8e16e3f19d4a7726fb64469e057779ea2081c28b7dbefec6d813a22f08a35712c0f699 - languageName: node - linkType: hard - "@babel/template@npm:^7.22.15": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" @@ -5039,6 +5098,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10/e861180881507210150c1335ad94aff80fd9e9be6202e1efa752059c93224e2d5310186ddcdd4c0f0b0fc658ce48cb47823f15142b5c00c8456dde54f5de80b2 + languageName: node + linkType: hard + "@babel/traverse@npm:7.23.2": version: 7.23.2 resolution: "@babel/traverse@npm:7.23.2" @@ -5090,6 +5160,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10/7431614d76d4a053e429208db82f2846a415833f3d9eb2e11ef72eeb3c64dfd71f4a4d983de1a4a047b36165a1f5a64de8ca2a417534cc472005c740ffcb9c6a + languageName: node + linkType: hard + "@babel/types@npm:7.17.0": version: 7.17.0 resolution: "@babel/types@npm:7.17.0" @@ -5165,6 +5250,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10/40780741ecec886ed9edae234b5eb4976968cc70d72b4e5a40d55f83ff2cc457de20f9b0f4fe9d858350e43dab0ea496e7ef62e2b2f08df699481a76df02cd6e + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -5179,6 +5274,62 @@ __metadata: languageName: node linkType: hard +"@chain-registry/client@npm:^1.49.11": + version: 1.53.13 + resolution: "@chain-registry/client@npm:1.53.13" + dependencies: + "@chain-registry/types": "npm:^0.50.13" + "@chain-registry/utils": "npm:^1.51.13" + bfs-path: "npm:^1.0.2" + cross-fetch: "npm:^3.1.5" + checksum: 10/d80b71ad6c607a2577cc4cc96213de192f7d004c7901c52f50d6a2f79570ff5b1bd477d409f7d6ba88aca5c8f555911414805e4dc81a1a58ec3f0b41f79530ea + languageName: node + linkType: hard + +"@chain-registry/keplr@npm:^1.69.13": + version: 1.74.32 + resolution: "@chain-registry/keplr@npm:1.74.32" + dependencies: + "@chain-registry/types": "npm:^0.50.13" + "@keplr-wallet/cosmos": "npm:0.12.28" + "@keplr-wallet/crypto": "npm:0.12.28" + semver: "npm:^7.5.0" + checksum: 10/df93c4253c75ab52b682a166921e826030836bf77a434903472c60290fc7ee477841173931a2d804ec68671014d97bae8c919a32ade12990b6638f282c1644cd + languageName: node + linkType: hard + +"@chain-registry/types@npm:^0.46.11": + version: 0.46.15 + resolution: "@chain-registry/types@npm:0.46.15" + checksum: 10/de63ace15b36ec3f06a401483d8ad8822c794658df3541cff00aa54756499ea5e881f8709b0a7876ae2a0b8b05848e87e41e8baf0fdb46e12e8c68cacbccb5f3 + languageName: node + linkType: hard + +"@chain-registry/types@npm:^0.50.13": + version: 0.50.13 + resolution: "@chain-registry/types@npm:0.50.13" + checksum: 10/de71473b2de9fa2a3deff734496ef3c5839345355bd816f1d87c71a379e01b5740ba286b0203310fe803e69f25349447d11b6c088d80022973d7da7b5145784b + languageName: node + linkType: hard + +"@chain-registry/types@npm:^0.50.14": + version: 0.50.14 + resolution: "@chain-registry/types@npm:0.50.14" + checksum: 10/4a1e6978de66d50f98a804174fb8bfa712e42284473edc9e85e6c308dac3fcf381d1888248579128e7a78cec7539378bf7a149b20654741daa85b1c88b8beb8c + languageName: node + linkType: hard + +"@chain-registry/utils@npm:^1.51.13": + version: 1.51.13 + resolution: "@chain-registry/utils@npm:1.51.13" + dependencies: + "@chain-registry/types": "npm:^0.50.13" + bignumber.js: "npm:9.1.2" + sha.js: "npm:^2.4.11" + checksum: 10/d8b1bf249ae13f794a70bd12d2e916394f44d1d949dedf72c4e7532c08bc0da137dd87abd8f2d78562adf5c8c68fa37ccf0a00eed2ee35367d9975721b9b3a93 + languageName: node + linkType: hard + "@chainlink/ccip-read-server@npm:^0.2.1": version: 0.2.1 resolution: "@chainlink/ccip-read-server@npm:0.2.1" @@ -5236,6 +5387,99 @@ __metadata: languageName: node linkType: hard +"@chakra-ui/anatomy@npm:2.3.5": + version: 2.3.5 + resolution: "@chakra-ui/anatomy@npm:2.3.5" + checksum: 10/14b56dfffb76730ac94760443811f952bb2373939ad7539d56b313505733e840eea8cee45c95f96805cb0ed80bbde95d98227b155a02d86d3c1984747b4466ab + languageName: node + linkType: hard + +"@chakra-ui/hooks@npm:2.4.3": + version: 2.4.3 + resolution: "@chakra-ui/hooks@npm:2.4.3" + dependencies: + "@chakra-ui/utils": "npm:2.2.3" + "@zag-js/element-size": "npm:0.31.1" + copy-to-clipboard: "npm:3.3.3" + framesync: "npm:6.1.2" + peerDependencies: + react: ">=18" + checksum: 10/cf740474d5deba1286df8e61acadd1558e97900c6ca162bd0d0354edebfb38a311c0182c35ed95592d2b5ca7af0781dffb354d2048e5268ed3ae5efb61929e39 + languageName: node + linkType: hard + +"@chakra-ui/react@npm:^2.8.2": + version: 2.10.4 + resolution: "@chakra-ui/react@npm:2.10.4" + dependencies: + "@chakra-ui/hooks": "npm:2.4.3" + "@chakra-ui/styled-system": "npm:2.12.1" + "@chakra-ui/theme": "npm:3.4.7" + "@chakra-ui/utils": "npm:2.2.3" + "@popperjs/core": "npm:^2.11.8" + "@zag-js/focus-visible": "npm:^0.31.1" + aria-hidden: "npm:^1.2.3" + react-fast-compare: "npm:3.2.2" + react-focus-lock: "npm:^2.9.6" + react-remove-scroll: "npm:^2.5.7" + peerDependencies: + "@emotion/react": ">=11" + "@emotion/styled": ">=11" + framer-motion: ">=4.0.0" + react: ">=18" + react-dom: ">=18" + checksum: 10/d56ce89499c4c3b9563e7ce3d6fa981201b5e0bc0d7265d995b7ffccf71cbac0d308b304c9d42a220dba07ee4cac6243d276cf1258370208e71c49d2fcda9310 + languageName: node + linkType: hard + +"@chakra-ui/styled-system@npm:2.12.1": + version: 2.12.1 + resolution: "@chakra-ui/styled-system@npm:2.12.1" + dependencies: + "@chakra-ui/utils": "npm:2.2.3" + csstype: "npm:^3.1.2" + checksum: 10/2abddc5fa5cd6c2d8de555f4fb7ffeda1c3ffd65d4649286af2a58a5cc9560fe3c3f9acab8a1cdc58e16f35deaf5719fe3c9ff3f26dc45a4e5e5c9655085e549 + languageName: node + linkType: hard + +"@chakra-ui/theme-tools@npm:2.2.7": + version: 2.2.7 + resolution: "@chakra-ui/theme-tools@npm:2.2.7" + dependencies: + "@chakra-ui/anatomy": "npm:2.3.5" + "@chakra-ui/utils": "npm:2.2.3" + color2k: "npm:^2.0.2" + peerDependencies: + "@chakra-ui/styled-system": ">=2.0.0" + checksum: 10/0ab73ffe6eac1c7211f8661e323c99c844f1a0e466d39351898a3f08bb0436dd820726a989c3016098bf4c799c99b50cd82c13c6dee27cd4c59a8b78cd911a43 + languageName: node + linkType: hard + +"@chakra-ui/theme@npm:3.4.7": + version: 3.4.7 + resolution: "@chakra-ui/theme@npm:3.4.7" + dependencies: + "@chakra-ui/anatomy": "npm:2.3.5" + "@chakra-ui/theme-tools": "npm:2.2.7" + "@chakra-ui/utils": "npm:2.2.3" + peerDependencies: + "@chakra-ui/styled-system": ">=2.8.0" + checksum: 10/d15a7fe94c4fd8984a6167e67f41e72201bbc860171ddd7d8553c8db4e1327ae1c763ec505b80936b758b9ac524ee5c10905b59506f16b38f237e8966e310b70 + languageName: node + linkType: hard + +"@chakra-ui/utils@npm:2.2.3": + version: 2.2.3 + resolution: "@chakra-ui/utils@npm:2.2.3" + dependencies: + "@types/lodash.mergewith": "npm:4.6.9" + lodash.mergewith: "npm:4.6.2" + peerDependencies: + react: ">=16.8.0" + checksum: 10/0c22261c77b565e9bc44aa6891cc30324b05539de73061d2218c9e8859600eabca930217b11a1b614816d0bef04cdeab0f43d6060607670c5490fc9e8c166298 + languageName: node + linkType: hard + "@changesets/apply-release-plan@npm:^6.1.4": version: 6.1.4 resolution: "@changesets/apply-release-plan@npm:6.1.4" @@ -5550,6 +5794,18 @@ __metadata: languageName: node linkType: hard +"@coinbase/wallet-sdk@npm:4.2.3": + version: 4.2.3 + resolution: "@coinbase/wallet-sdk@npm:4.2.3" + dependencies: + "@noble/hashes": "npm:^1.4.0" + clsx: "npm:^1.2.1" + eventemitter3: "npm:^5.0.1" + preact: "npm:^10.24.2" + checksum: 10/dd16ae6d5f7f81b38dfcd95e7538adbe920380bb52206f494f1fafaa38906f2f97265f3eb3f5fe2e9bfab19618447cc19581935586c113d51945c8bab62c7f9a + languageName: node + linkType: hard + "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" @@ -5567,7 +5823,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/amino@npm:^0.32.4": +"@cosmjs/amino@npm:^0.32.3, @cosmjs/amino@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/amino@npm:0.32.4" dependencies: @@ -5579,7 +5835,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/cosmwasm-stargate@npm:^0.32.4": +"@cosmjs/cosmwasm-stargate@npm:^0.32.3, @cosmjs/cosmwasm-stargate@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/cosmwasm-stargate@npm:0.32.4" dependencies: @@ -5642,7 +5898,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/proto-signing@npm:^0.32.4": +"@cosmjs/proto-signing@npm:^0.32.3, @cosmjs/proto-signing@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/proto-signing@npm:0.32.4" dependencies: @@ -5668,7 +5924,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/stargate@npm:^0.32.4": +"@cosmjs/stargate@npm:^0.32.3, @cosmjs/stargate@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/stargate@npm:0.32.4" dependencies: @@ -5720,6 +5976,62 @@ __metadata: languageName: node linkType: hard +"@cosmos-kit/core@npm:^2.15.0": + version: 2.15.0 + resolution: "@cosmos-kit/core@npm:2.15.0" + dependencies: + "@chain-registry/client": "npm:^1.49.11" + "@chain-registry/keplr": "npm:^1.69.13" + "@chain-registry/types": "npm:^0.46.11" + "@cosmjs/amino": "npm:^0.32.3" + "@cosmjs/cosmwasm-stargate": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@dao-dao/cosmiframe": "npm:^0.1.0" + "@walletconnect/types": "npm:2.11.0" + bowser: "npm:2.11.0" + cosmjs-types: "npm:^0.9.0" + events: "npm:3.3.0" + nock: "npm:13.5.4" + uuid: "npm:^9.0.1" + checksum: 10/fe13203a71390cbbcb014454ab28c9440281fdeedb23f8bca0984c0b756c4049d0716e104be7eeae809726ebf55bb1a67fc92cd3159e19b9d864177e0bf83215 + languageName: node + linkType: hard + +"@cosmos-kit/react-lite@npm:^2.15.1": + version: 2.15.1 + resolution: "@cosmos-kit/react-lite@npm:2.15.1" + dependencies: + "@chain-registry/types": "npm:^0.46.11" + "@cosmos-kit/core": "npm:^2.15.0" + "@dao-dao/cosmiframe": "npm:^0.1.0" + peerDependencies: + "@types/react": ">= 17" + "@types/react-dom": ">= 17" + react: ^18 + react-dom: ^18 + checksum: 10/3b3c3b7f9fea92c65d1fbb5585d397b09a06fb0a91089a6e4960259fa43d96fdf85ad4d285512df33373ee35fb85e487dace701700afb846960e505e795d80cb + languageName: node + linkType: hard + +"@cosmos-kit/react@npm:^2.18.0": + version: 2.20.1 + resolution: "@cosmos-kit/react@npm:2.20.1" + dependencies: + "@chain-registry/types": "npm:^0.46.11" + "@cosmos-kit/core": "npm:^2.15.0" + "@cosmos-kit/react-lite": "npm:^2.15.1" + "@react-icons/all-files": "npm:^4.1.0" + peerDependencies: + "@interchain-ui/react": ^1.23.9 + "@types/react": ">= 17" + "@types/react-dom": ">= 17" + react: ^18 + react-dom: ^18 + checksum: 10/dc66aedf2cf485262cac805b128f49cf8466d9e16916c242684e47468b5b9f7dec94d396926ae4be808532446864de48987311578d4fd1343d4abdf4876205d2 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:0.8.1, @cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -5729,6 +6041,18 @@ __metadata: languageName: node linkType: hard +"@dao-dao/cosmiframe@npm:^0.1.0": + version: 0.1.0 + resolution: "@dao-dao/cosmiframe@npm:0.1.0" + dependencies: + uuid: "npm:^9.0.1" + peerDependencies: + "@cosmjs/amino": "*" + "@cosmjs/proto-signing": "*" + checksum: 10/7a53a9047b3deecf1ad9b9aa80467d7d9e91f7187bfdd97b8fde77cdfaf4e828f9c9a85cacfb8f13ebe9ad30f578d1e652c7afc4dcd13b30f04440ff50c3a1d0 + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.3": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -5736,7 +6060,155 @@ __metadata: languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": +"@ecies/ciphers@npm:^0.2.1": + version: 0.2.1 + resolution: "@ecies/ciphers@npm:0.2.1" + peerDependencies: + "@noble/ciphers": ^1.0.0 + checksum: 10/4a2012358f79ef842c6a9fdcf3d4e1f7d3d59ad3d025cca52b3e7135f62d5c35d394882cbfe8ad5aa17f707663921bf466707d20712b5027a0af5813a6ad7b08 + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/babel-plugin@npm:11.12.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/runtime": "npm:^7.18.3" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/serialize": "npm:^1.2.0" + babel-plugin-macros: "npm:^3.1.0" + convert-source-map: "npm:^1.5.0" + escape-string-regexp: "npm:^4.0.0" + find-root: "npm:^1.1.0" + source-map: "npm:^0.5.7" + stylis: "npm:4.2.0" + checksum: 10/fe6f4522ea2b61ef4214dd0b0f3778aad9c18434b47e50ae5091af226526bf305455c313065826a090682520c9462c151d4df62ec128f14671d3125afc05b148 + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.13.0": + version: 11.13.1 + resolution: "@emotion/cache@npm:11.13.1" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + "@emotion/sheet": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.0" + "@emotion/weak-memoize": "npm:^0.4.0" + stylis: "npm:4.2.0" + checksum: 10/090c8ad2e5b23f1b3a95e94f1f0554a40ed1dcd844c9d31629a68ff824eff40f32d1362f67aefa440ee0aabd5a8cabcc76870fd6d77144d3ff251bdcdf1420b9 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.0, @emotion/hash@npm:^0.9.2": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 10/379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^0.8.2": + version: 0.8.8 + resolution: "@emotion/is-prop-valid@npm:0.8.8" + dependencies: + "@emotion/memoize": "npm:0.7.4" + checksum: 10/e85bdeb9d9d23de422f271e0f5311a0142b15055bb7e610440dbf250f0cdfd049df88af72a49e2c6081954481f1cbeca9172e2116ff536b38229397dfbed8082 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + checksum: 10/abbc5c7bf4017415da5b06067fc0b4771d1f22cf94ec37fd54c07b3bd1bcffbda2405ca686e7ee64a9cfc51461262b712f724850e838775347a949f72949ad03 + languageName: node + linkType: hard + +"@emotion/memoize@npm:0.7.4": + version: 0.7.4 + resolution: "@emotion/memoize@npm:0.7.4" + checksum: 10/4e3920d4ec95995657a37beb43d3f4b7d89fed6caa2b173a4c04d10482d089d5c3ea50bbc96618d918b020f26ed6e9c4026bbd45433566576c1f7b056c3271dc + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/memoize@npm:0.9.0" + checksum: 10/038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.13.3": + version: 11.13.3 + resolution: "@emotion/react@npm:11.13.3" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.12.0" + "@emotion/cache": "npm:^11.13.0" + "@emotion/serialize": "npm:^1.3.1" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" + "@emotion/utils": "npm:^1.4.0" + "@emotion/weak-memoize": "npm:^0.4.0" + hoist-non-react-statics: "npm:^3.3.1" + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/ee70d3afc2e8dd771e6fe176d27dd87a5e21a54e54d871438fd1caa5aa2312d848c6866292fdc65a6ea1c945147c8422bda2d22ed739178af9902dc86d6b298a + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": + version: 1.3.2 + resolution: "@emotion/serialize@npm:1.3.2" + dependencies: + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/unitless": "npm:^0.10.0" + "@emotion/utils": "npm:^1.4.1" + csstype: "npm:^3.0.2" + checksum: 10/ead557c1ff19d917ef8169c02738ef36f0851fbfdf0bf69a543045bddea3b7281dc8252ee466cc5fb44ed27d1e61280ff943bb60a2c04158751fb07b3457cc93 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.4.0": + version: 1.4.0 + resolution: "@emotion/sheet@npm:1.4.0" + checksum: 10/8ac6e9bf6b373a648f26ae7f1c24041038524f4c72f436f4f8c4761c665e58880c3229d8d89b1f7a4815dd8e5b49634d03e60187cb6f93097d7f7c1859e869d5 + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.13.0": + version: 11.13.0 + resolution: "@emotion/styled@npm:11.13.0" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.12.0" + "@emotion/is-prop-valid": "npm:^1.3.0" + "@emotion/serialize": "npm:^1.3.0" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" + "@emotion/utils": "npm:^1.4.0" + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/5463a0f15fc12a9e20340f52df49461e948c3ae7e2dd763db0ff937b0b96dd4e82eed85cd15e24621efb3b097a095b88b01d60f50cf6f38fe3ab7db6e77f9615 + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.10.0": + version: 0.10.0 + resolution: "@emotion/unitless@npm:0.10.0" + checksum: 10/6851c16edce01c494305f43b2cad7a26b939a821131b7c354e49b8e3b012c8810024755b0f4a03ef51117750309e55339825a97bd10411fb3687e68904769106 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0, @emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": version: 1.1.0 resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" peerDependencies: @@ -5745,6 +6217,20 @@ __metadata: languageName: node linkType: hard +"@emotion/utils@npm:^1.4.0, @emotion/utils@npm:^1.4.1": + version: 1.4.1 + resolution: "@emotion/utils@npm:1.4.1" + checksum: 10/95e56fc0c9e05cf01a96268f0486ce813f1109a8653d2f575c67df9e8765d9c1b2daf09ad1ada67d933efbb08ca7990228e14b210c713daf90156b4869abe6a7 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.4.0": + version: 0.4.0 + resolution: "@emotion/weak-memoize@npm:0.4.0" + checksum: 10/db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 + languageName: node + linkType: hard + "@esbuild-plugins/node-globals-polyfill@npm:^0.2.3": version: 0.2.3 resolution: "@esbuild-plugins/node-globals-polyfill@npm:0.2.3" @@ -6812,6 +7298,16 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/common@npm:^3.2.0": + version: 3.2.0 + resolution: "@ethereumjs/common@npm:3.2.0" + dependencies: + "@ethereumjs/util": "npm:^8.1.0" + crc-32: "npm:^1.2.0" + checksum: 10/b3f612406b6bcefaf9117ceb42eff58d311e2b50205e3d55b4c793d803de517efbc84075e058dc0e2ec27a2bff11dfc279dda1fa2b249ed6ab3973be045898f4 + languageName: node + linkType: hard + "@ethereumjs/ethash@npm:^1.1.0": version: 1.1.0 resolution: "@ethereumjs/ethash@npm:1.1.0" @@ -6825,6 +7321,15 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: 10/bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 + languageName: node + linkType: hard + "@ethereumjs/tx@npm:3.3.2": version: 3.3.2 resolution: "@ethereumjs/tx@npm:3.3.2" @@ -6855,6 +7360,29 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": + version: 4.2.0 + resolution: "@ethereumjs/tx@npm:4.2.0" + dependencies: + "@ethereumjs/common": "npm:^3.2.0" + "@ethereumjs/rlp": "npm:^4.0.1" + "@ethereumjs/util": "npm:^8.1.0" + ethereum-cryptography: "npm:^2.0.0" + checksum: 10/cbd2ffc3ef76ca5416d58f2f694858d9fcac946e6a107fef44cf3f308a7c9fcc996a6847868609354d72d5b356faee68408e9d5601c4c4f7dad8e18cb2c24a95 + languageName: node + linkType: hard + +"@ethereumjs/util@npm:^8.1.0": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" + dependencies: + "@ethereumjs/rlp": "npm:^4.0.1" + ethereum-cryptography: "npm:^2.0.0" + micro-ftch: "npm:^0.3.1" + checksum: 10/cc35338932e49b15e54ca6e548b32a1f48eed7d7e1d34ee743e4d3600dd616668bd50f70139e86c5c35f55aac35fba3b6cc4e6f679cf650aeba66bf93016200c + languageName: node + linkType: hard + "@ethereumjs/vm@npm:5.6.0": version: 5.6.0 resolution: "@ethereumjs/vm@npm:5.6.0" @@ -6965,7 +7493,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.8, @ethersproject/address@npm:^5.4.0, @ethersproject/address@npm:^5.7.0": +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.0.8, @ethersproject/address@npm:^5.4.0, @ethersproject/address@npm:^5.6.0, @ethersproject/address@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/address@npm:5.7.0" dependencies: @@ -7561,6 +8089,15 @@ __metadata: languageName: node linkType: hard +"@floating-ui/core@npm:^1.6.7": + version: 1.6.8 + resolution: "@floating-ui/core@npm:1.6.8" + dependencies: + "@floating-ui/utils": "npm:^0.2.8" + checksum: 10/87d52989c3d2cc80373bc153b7a40814db3206ce7d0b2a2bdfb63e2ff39ffb8b999b1b0ccf28e548000ebf863bf16e2bed45eab4c4d287a5dbe974ef22368d82 + languageName: node + linkType: hard + "@floating-ui/dom@npm:^1.0.0": version: 1.6.8 resolution: "@floating-ui/dom@npm:1.6.8" @@ -7581,6 +8118,16 @@ __metadata: languageName: node linkType: hard +"@floating-ui/dom@npm:^1.6.10": + version: 1.6.12 + resolution: "@floating-ui/dom@npm:1.6.12" + dependencies: + "@floating-ui/core": "npm:^1.6.0" + "@floating-ui/utils": "npm:^0.2.8" + checksum: 10/5c8e5fdcd3843140a606ab6dc6c12ad740f44e66b898966ef877393faaede0bbe14586e1049e2c2f08856437da8847e884a2762e78275fefa65a5a9cd71e580d + languageName: node + linkType: hard + "@floating-ui/react-dom@npm:^2.0.0": version: 2.1.1 resolution: "@floating-ui/react-dom@npm:2.1.1" @@ -7593,7 +8140,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^2.1.2": +"@floating-ui/react-dom@npm:^2.1.1, @floating-ui/react-dom@npm:^2.1.2": version: 2.1.2 resolution: "@floating-ui/react-dom@npm:2.1.2" dependencies: @@ -7619,6 +8166,20 @@ __metadata: languageName: node linkType: hard +"@floating-ui/react@npm:^0.26.23": + version: 0.26.27 + resolution: "@floating-ui/react@npm:0.26.27" + dependencies: + "@floating-ui/react-dom": "npm:^2.1.2" + "@floating-ui/utils": "npm:^0.2.8" + tabbable: "npm:^6.0.0" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 10/ab6d05e5cc2c29272a6830c06dff07e8330f2b90234674f2d74ed8084659ebe3ac9472770a5f0e76007dd2ae89f9da75189d188437aea4b8ac2789afc21bb6b2 + languageName: node + linkType: hard + "@floating-ui/utils@npm:^0.2.5": version: 0.2.5 resolution: "@floating-ui/utils@npm:0.2.5" @@ -7640,6 +8201,63 @@ __metadata: languageName: node linkType: hard +"@formatjs/ecma402-abstract@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/ecma402-abstract@npm:2.2.3" + dependencies: + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/intl-localematcher": "npm:0.5.7" + tslib: "npm:2" + checksum: 10/d39e9f0d36c296a635f52aa35e07a67b6aa90383a30a046a0508e5d730676399fd0e67188eff463fe2a4d5febc9f567af45788fdf881e070910be7eb9294dd8c + languageName: node + linkType: hard + +"@formatjs/fast-memoize@npm:2.2.3": + version: 2.2.3 + resolution: "@formatjs/fast-memoize@npm:2.2.3" + dependencies: + tslib: "npm:2" + checksum: 10/a9634acb5e03d051e09881eea5484ab02271f7d6b5f96ae9485674ab3c359aa881bc45fc07a1181ae4b2d6e288dadc169f578d142d698913ebbefa373014cac2 + languageName: node + linkType: hard + +"@formatjs/icu-messageformat-parser@npm:2.9.3": + version: 2.9.3 + resolution: "@formatjs/icu-messageformat-parser@npm:2.9.3" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/icu-skeleton-parser": "npm:1.8.7" + tslib: "npm:2" + checksum: 10/b24a3db43e4bf612107e981d5b40c077543d2266a08aac5cf01d5f65bf60527d5d16795e2e30063cb180b1d36d401944cd2ffb3a19d79b0cd28fa59751d19b7c + languageName: node + linkType: hard + +"@formatjs/icu-skeleton-parser@npm:1.8.7": + version: 1.8.7 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.7" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + tslib: "npm:2" + checksum: 10/1a39815e5048f3c12a8d6a5b553271437b62e302724fc15c3b6967dc3e24823fcd9b8d3231a064991e163c147e54e588c571a092d557e93e78e738d218c6ef43 + languageName: node + linkType: hard + +"@formatjs/intl-localematcher@npm:0.5.7": + version: 0.5.7 + resolution: "@formatjs/intl-localematcher@npm:0.5.7" + dependencies: + tslib: "npm:2" + checksum: 10/52201f12212e7e9cba1a4f99020da587b13e44e06e03c4ccd4e5ac0829b411e73dfe0904a9039ef81eeabeea04ed8cfae9e727e6791acd0230745b7bd3ad059e + languageName: node + linkType: hard + +"@formkit/auto-animate@npm:^0.8.2": + version: 0.8.2 + resolution: "@formkit/auto-animate@npm:0.8.2" + checksum: 10/4414fbc9d13ddf8f9e39adfa1a96a9d3affca8d5fb3b148bd4bb9149066910a179b8477a9ce0af51d2abb2ee8d126d25d290460845ed8018858c569eed15655f + languageName: node + linkType: hard + "@ganache/ethereum-address@npm:0.1.4": version: 0.1.4 resolution: "@ganache/ethereum-address@npm:0.1.4" @@ -7823,9 +8441,9 @@ __metadata: "@aws-sdk/client-s3": "npm:^3.577.0" "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" - "@hyperlane-xyz/registry": "npm:4.7.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.0" + "@hyperlane-xyz/registry": "npm:6.1.0" + "@hyperlane-xyz/sdk": "npm:7.1.0" + "@hyperlane-xyz/utils": "npm:7.1.0" "@inquirer/core": "npm:9.0.10" "@inquirer/figures": "npm:1.0.5" "@inquirer/prompts": "npm:^3.0.0" @@ -7860,13 +8478,13 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/core@npm:5.8.0, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@npm:5.8.1, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@arbitrum/nitro-contracts": "npm:^1.2.1" "@eth-optimism/contracts": "npm:^0.6.0" - "@hyperlane-xyz/utils": "npm:7.0.0" + "@hyperlane-xyz/utils": "npm:7.1.0" "@layerzerolabs/lz-evm-oapp-v2": "npm:2.0.2" "@layerzerolabs/solidity-examples": "npm:^1.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" @@ -7917,13 +8535,13 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/helloworld@npm:7.0.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@npm:7.1.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": "npm:5.8.0" - "@hyperlane-xyz/registry": "npm:4.7.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" + "@hyperlane-xyz/core": "npm:5.8.1" + "@hyperlane-xyz/registry": "npm:6.1.0" + "@hyperlane-xyz/sdk": "npm:7.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@openzeppelin/contracts-upgradeable": "npm:^4.9.3" @@ -7970,10 +8588,10 @@ __metadata: "@ethersproject/hardware-wallets": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.2" "@google-cloud/secret-manager": "npm:^5.5.0" - "@hyperlane-xyz/helloworld": "npm:7.0.0" - "@hyperlane-xyz/registry": "npm:4.10.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.0" + "@hyperlane-xyz/helloworld": "npm:7.1.0" + "@hyperlane-xyz/registry": "npm:6.1.0" + "@hyperlane-xyz/sdk": "npm:7.1.0" + "@hyperlane-xyz/utils": "npm:7.1.0" "@inquirer/prompts": "npm:^5.3.8" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-etherscan": "npm:^3.0.3" @@ -8029,36 +8647,27 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/registry@npm:4.10.0": - version: 4.10.0 - resolution: "@hyperlane-xyz/registry@npm:4.10.0" - dependencies: - yaml: "npm:2.4.5" - zod: "npm:^3.21.2" - checksum: 10/22bb18f426cbada8b97db0894fe5d0980dfc08ecbd5174c978b7aeb6d8df9706f93d7e9cf0630644d2455ad05feee714dc2a38ec515a717b0b257184637902fb - languageName: node - linkType: hard - -"@hyperlane-xyz/registry@npm:4.7.0": - version: 4.7.0 - resolution: "@hyperlane-xyz/registry@npm:4.7.0" +"@hyperlane-xyz/registry@npm:6.1.0": + version: 6.1.0 + resolution: "@hyperlane-xyz/registry@npm:6.1.0" dependencies: yaml: "npm:2.4.5" zod: "npm:^3.21.2" - checksum: 10/d5b0090869417c3fc263c379791f439070113aee239990ffc20d9d90d74102b77008f3c630ce955a9b3f1f92f79b1df67d83a097b327cd5db2b01b382bf40f18 + checksum: 10/a0e1ecc02d83604793ddda0a3e00a9ffcaa38b1cddf9883b47cf8f1919b4474abd6cc2ee84846e6a35e1bc7539299b9bec92bfdf06be72beecff6aa44b73d382 languageName: node linkType: hard -"@hyperlane-xyz/sdk@npm:7.0.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@npm:7.1.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: "@arbitrum/sdk": "npm:^4.0.0" "@aws-sdk/client-s3": "npm:^3.74.0" + "@chain-registry/types": "npm:^0.50.14" "@cosmjs/cosmwasm-stargate": "npm:^0.32.4" "@cosmjs/stargate": "npm:^0.32.4" - "@hyperlane-xyz/core": "npm:5.8.0" - "@hyperlane-xyz/utils": "npm:7.0.0" + "@hyperlane-xyz/core": "npm:5.8.1" + "@hyperlane-xyz/utils": "npm:7.1.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" "@safe-global/api-kit": "npm:1.3.0" @@ -8087,7 +8696,7 @@ __metadata: ts-node: "npm:^10.8.0" tsx: "npm:^4.7.1" typescript: "npm:5.3.3" - viem: "npm:^2.21.40" + viem: "npm:^2.21.45" yaml: "npm:2.4.5" zod: "npm:^3.21.2" peerDependencies: @@ -8096,7 +8705,7 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/utils@npm:7.0.0, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@npm:7.1.0, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: @@ -8123,10 +8732,20 @@ __metadata: version: 0.0.0-use.local resolution: "@hyperlane-xyz/widgets@workspace:typescript/widgets" dependencies: + "@chakra-ui/react": "npm:^2.8.2" + "@cosmjs/cosmwasm-stargate": "npm:^0.32.4" + "@cosmos-kit/react": "npm:^2.18.0" + "@emotion/react": "npm:^11.13.3" + "@emotion/styled": "npm:^11.13.0" "@headlessui/react": "npm:^2.1.8" - "@hyperlane-xyz/registry": "npm:4.7.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.0" + "@hyperlane-xyz/registry": "npm:6.1.0" + "@hyperlane-xyz/sdk": "npm:7.1.0" + "@hyperlane-xyz/utils": "npm:7.1.0" + "@interchain-ui/react": "npm:^1.23.28" + "@rainbow-me/rainbowkit": "npm:^2.2.0" + "@solana/wallet-adapter-react": "npm:^0.15.32" + "@solana/wallet-adapter-react-ui": "npm:^0.9.31" + "@solana/web3.js": "npm:^1.95.4" "@storybook/addon-essentials": "npm:^7.6.14" "@storybook/addon-interactions": "npm:^7.6.14" "@storybook/addon-links": "npm:^7.6.14" @@ -8135,6 +8754,7 @@ __metadata: "@storybook/react": "npm:^7.6.14" "@storybook/react-vite": "npm:^7.6.14" "@storybook/test": "npm:^7.6.14" + "@tanstack/react-query": "npm:^5.59.20" "@types/node": "npm:^18.11.18" "@types/react": "npm:^18.0.27" "@types/react-dom": "npm:^18.0.10" @@ -8148,6 +8768,7 @@ __metadata: eslint-plugin-react: "npm:^7.37.2" eslint-plugin-react-hooks: "npm:^5.0.0" eslint-plugin-storybook: "npm:^0.6.15" + framer-motion: "npm:^10.16.4" postcss: "npm:^8.4.21" prettier: "npm:^2.8.8" react: "npm:^18.2.0" @@ -8157,7 +8778,9 @@ __metadata: tailwindcss: "npm:^3.4.13" ts-node: "npm:^10.8.0" typescript: "npm:5.3.3" + viem: "npm:^2.21.41" vite: "npm:^5.1.1" + wagmi: "npm:^2.12.26" peerDependencies: react: ^18 react-dom: ^18 @@ -8471,6 +9094,80 @@ __metadata: languageName: node linkType: hard +"@interchain-ui/react@npm:^1.23.28": + version: 1.26.1 + resolution: "@interchain-ui/react@npm:1.26.1" + dependencies: + "@floating-ui/core": "npm:^1.6.7" + "@floating-ui/dom": "npm:^1.6.10" + "@floating-ui/react": "npm:^0.26.23" + "@floating-ui/react-dom": "npm:^2.1.1" + "@floating-ui/utils": "npm:^0.2.7" + "@formkit/auto-animate": "npm:^0.8.2" + "@react-aria/listbox": "npm:^3.13.3" + "@react-aria/overlays": "npm:^3.23.2" + "@react-aria/utils": "npm:^3.25.2" + "@tanstack/react-virtual": "npm:^3.10.5" + "@vanilla-extract/css": "npm:^1.15.5" + "@vanilla-extract/css-utils": "npm:^0.1.4" + "@vanilla-extract/dynamic": "npm:^2.1.2" + "@vanilla-extract/private": "npm:^1.0.6" + "@vanilla-extract/recipes": "npm:^0.5.5" + animejs: "npm:^3.2.2" + bignumber.js: "npm:^9.1.2" + client-only: "npm:^0.0.1" + clsx: "npm:^2.1.1" + copy-to-clipboard: "npm:^3.3.3" + immer: "npm:^10.1.1" + lodash: "npm:^4.17.21" + rainbow-sprinkles: "npm:^0.17.3" + react-aria: "npm:^3.34.3" + react-stately: "npm:^3.32.2" + zustand: "npm:^4.5.5" + peerDependencies: + react: ^16.14.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 + checksum: 10/30bc0bc47799586f9eb58ed955aa2dc640dce1674653c87603a838462f3bacaaf64ae3202731f86b60aaff7393bf066b472657f51a3e2272e95e3df23b0a878a + languageName: node + linkType: hard + +"@internationalized/date@npm:^3.5.6": + version: 3.5.6 + resolution: "@internationalized/date@npm:3.5.6" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10/54734b53ca74a32aae368a8f963324352b1fd5b13029b6e82555307b8f2ff355658c90e82a4f38f154a3edf874387d1efd26fc80f2edd068ce04f48f6467f26c + languageName: node + linkType: hard + +"@internationalized/message@npm:^3.1.5": + version: 3.1.5 + resolution: "@internationalized/message@npm:3.1.5" + dependencies: + "@swc/helpers": "npm:^0.5.0" + intl-messageformat: "npm:^10.1.0" + checksum: 10/210951fd8055af4db70d465e49bcbbdf2545ed223b936af9c1f18b745a51689ecb0ca49cbd5ee2dbfeccce2447808b7fe309bd12ee81f7e09283f20bf04200e9 + languageName: node + linkType: hard + +"@internationalized/number@npm:^3.5.4": + version: 3.5.4 + resolution: "@internationalized/number@npm:3.5.4" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10/16641aecb58c075a6322dc6b36a2c6e521845296f81b86a128d015f072d1af998289b71b4d8b9521e7576bdeabfaf8067a3e741b0116c8595d82a4461c1ae03b + languageName: node + linkType: hard + +"@internationalized/string@npm:^3.2.4": + version: 3.2.4 + resolution: "@internationalized/string@npm:3.2.4" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10/5fdb7f0bf7fa7055cdf62ded4efd6849d3db9cf0e6d53f349889e2ec9517b9135ad38a6bb8dcf25142c69c381618c0dd1a6a072117dd7cf2867ce17374f0f835 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -8915,6 +9612,91 @@ __metadata: languageName: node linkType: hard +"@keplr-wallet/common@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/common@npm:0.12.28" + dependencies: + "@keplr-wallet/crypto": "npm:0.12.28" + "@keplr-wallet/types": "npm:0.12.28" + buffer: "npm:^6.0.3" + delay: "npm:^4.4.0" + mobx: "npm:^6.1.7" + checksum: 10/32efe4a89290c89aa5a593a0fa4bf635c0c5b8814d61b80ecc3baea837d2733a355db4cb057184227cf1712658795978cd66e7797574d639e6ba9dbcb7fde3d2 + languageName: node + linkType: hard + +"@keplr-wallet/cosmos@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/cosmos@npm:0.12.28" + dependencies: + "@ethersproject/address": "npm:^5.6.0" + "@keplr-wallet/common": "npm:0.12.28" + "@keplr-wallet/crypto": "npm:0.12.28" + "@keplr-wallet/proto-types": "npm:0.12.28" + "@keplr-wallet/simple-fetch": "npm:0.12.28" + "@keplr-wallet/types": "npm:0.12.28" + "@keplr-wallet/unit": "npm:0.12.28" + bech32: "npm:^1.1.4" + buffer: "npm:^6.0.3" + long: "npm:^4.0.0" + protobufjs: "npm:^6.11.2" + checksum: 10/685e84369f9fa0fd0e292e8c5031b8aa7ee2998285727eb31436b1f7a862e97c6731de6f84fd66ef4a20f0731c013f2f46296f57b7bf52ace6a874c8540004b8 + languageName: node + linkType: hard + +"@keplr-wallet/crypto@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/crypto@npm:0.12.28" + dependencies: + "@ethersproject/keccak256": "npm:^5.5.0" + bip32: "npm:^2.0.6" + bip39: "npm:^3.0.3" + bs58check: "npm:^2.1.2" + buffer: "npm:^6.0.3" + crypto-js: "npm:^4.0.0" + elliptic: "npm:^6.5.3" + sha.js: "npm:^2.4.11" + checksum: 10/76e5cf1c60b5108b9fb5bb5b8a841e6e51cbca76e0707198bef16bf6073cf574baee020216ead8acea8e5e60ee4f7386ee2c290bacfbe333ec1dfc849d942347 + languageName: node + linkType: hard + +"@keplr-wallet/proto-types@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/proto-types@npm:0.12.28" + dependencies: + long: "npm:^4.0.0" + protobufjs: "npm:^6.11.2" + checksum: 10/0537db803ce9a295443c206180220e932798f2769aaa8b552a3d99cbfa3f052ddace0dd50d09eb28bdd32c7d1ca3e10dcd2012c1611575da42650f478b162d5d + languageName: node + linkType: hard + +"@keplr-wallet/simple-fetch@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/simple-fetch@npm:0.12.28" + checksum: 10/36f8d769098b309a5069b992ffc3ed562e97d4e2553d04a97c0f55c423b80435d3b8c38f4ed57b5255c2342bf1675e2eb5cb64f158a6499e753b7e96ca90ef18 + languageName: node + linkType: hard + +"@keplr-wallet/types@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/types@npm:0.12.28" + dependencies: + long: "npm:^4.0.0" + checksum: 10/17ee47aac5690b89feb2109fb901a9af81ad7f94b743ba5de0203b051f7977941a78d3da70ef4ae5c2d82af0afd2de8de156f027c95c05d4f1a1fed39ea2df7d + languageName: node + linkType: hard + +"@keplr-wallet/unit@npm:0.12.28": + version: 0.12.28 + resolution: "@keplr-wallet/unit@npm:0.12.28" + dependencies: + "@keplr-wallet/types": "npm:0.12.28" + big-integer: "npm:^1.6.48" + utility-types: "npm:^3.10.0" + checksum: 10/f18361c2bdc2b59c0b7c3340466cab50d12634056ed89aee8363414e65eb314b570e43d019107c8ae6ee67e533b1b5e5bfa3beaec313763e68297bb9a3d6a3e8 + languageName: node + linkType: hard + "@layerzerolabs/lz-evm-messagelib-v2@npm:^2.0.2": version: 2.0.6 resolution: "@layerzerolabs/lz-evm-messagelib-v2@npm:2.0.6" @@ -9092,6 +9874,22 @@ __metadata: languageName: node linkType: hard +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.2.1 + resolution: "@lit-labs/ssr-dom-shim@npm:1.2.1" + checksum: 10/48e28c1f132eb1d5b385454dd23db2837bf913d108a0908e73816ceb594b1b09db34e05ccb86a18fb9c02fc100d62bbab350b6ec88e2c175f2c21c5f0220bfdd + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.0.0" + checksum: 10/664c899bb0b144590dc4faf83b358b1504810eac107778c3aeb384affc65a7ef4eda754944bcc34a57237db03dff145332406345ac24da19ca37cf4b3cb343d3 + languageName: node + linkType: hard + "@manypkg/find-root@npm:^1.1.0": version: 1.1.0 resolution: "@manypkg/find-root@npm:1.1.0" @@ -9130,6 +9928,17 @@ __metadata: languageName: node linkType: hard +"@metamask/eth-json-rpc-provider@npm:^1.0.0": + version: 1.0.1 + resolution: "@metamask/eth-json-rpc-provider@npm:1.0.1" + dependencies: + "@metamask/json-rpc-engine": "npm:^7.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + checksum: 10/4ed1a96afc32eb46f585ff54e16cb2aee2e7027dcf6a142d875b9c6248f15c9a00dd1df43035f2e64efbf01a96954040699d9d97e3b483c958f5b1d6c0fa6f50 + languageName: node + linkType: hard + "@metamask/eth-sig-util@npm:^4.0.0": version: 4.0.1 resolution: "@metamask/eth-sig-util@npm:4.0.1" @@ -9143,6 +9952,318 @@ __metadata: languageName: node linkType: hard +"@metamask/json-rpc-engine@npm:^7.0.0": + version: 7.3.3 + resolution: "@metamask/json-rpc-engine@npm:7.3.3" + dependencies: + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: 10/116664c974c522d280335d9a02cba731e4f08562c2980415f7535513cd308c7e612e52618086996e5ac2b67db7f1e6ac1bd8201aba7825163db17a25f2874cc9 + languageName: node + linkType: hard + +"@metamask/json-rpc-engine@npm:^8.0.1, @metamask/json-rpc-engine@npm:^8.0.2": + version: 8.0.2 + resolution: "@metamask/json-rpc-engine@npm:8.0.2" + dependencies: + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: 10/f088f4b648b9b55875b56e8237853e7282f13302a9db6a1f9bba06314dfd6cd0a23b3d27f8fde05a157b97ebb03b67bc2699ba455c99553dfb2ecccd73ab3474 + languageName: node + linkType: hard + +"@metamask/json-rpc-middleware-stream@npm:^7.0.1": + version: 7.0.2 + resolution: "@metamask/json-rpc-middleware-stream@npm:7.0.2" + dependencies: + "@metamask/json-rpc-engine": "npm:^8.0.2" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + readable-stream: "npm:^3.6.2" + checksum: 10/850a857418fc6b8c73fb4f978b76d2cdc0372ccb2f0f7e6f0229117882a4687d716fc37638483c9ac1338f7957b3f8207bc6be8a3d4c0708339fe9dfc3510fe0 + languageName: node + linkType: hard + +"@metamask/object-multiplex@npm:^2.0.0": + version: 2.1.0 + resolution: "@metamask/object-multiplex@npm:2.1.0" + dependencies: + once: "npm:^1.4.0" + readable-stream: "npm:^3.6.2" + checksum: 10/e119f695e89eb20c3174f8ac6d74587498d85cff92c37e83e167cb758b3d3147d5b5e1a997d6198d430ebcf2cede6265bf5d4513fe96dbb2d82bbc6167752caa + languageName: node + linkType: hard + +"@metamask/onboarding@npm:^1.0.1": + version: 1.0.1 + resolution: "@metamask/onboarding@npm:1.0.1" + dependencies: + bowser: "npm:^2.9.0" + checksum: 10/2aa288e58fc34cb4708e311fc08abd33a0d9bc67671610955a2bd8d43a16330261f1159174c365611e249751ec984da9a9cb963bb0a87b3a6945d7caa6cc8799 + languageName: node + linkType: hard + +"@metamask/providers@npm:16.1.0": + version: 16.1.0 + resolution: "@metamask/providers@npm:16.1.0" + dependencies: + "@metamask/json-rpc-engine": "npm:^8.0.1" + "@metamask/json-rpc-middleware-stream": "npm:^7.0.1" + "@metamask/object-multiplex": "npm:^2.0.0" + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.1.1" + "@metamask/utils": "npm:^8.3.0" + detect-browser: "npm:^5.2.0" + extension-port-stream: "npm:^3.0.0" + fast-deep-equal: "npm:^3.1.3" + is-stream: "npm:^2.0.0" + readable-stream: "npm:^3.6.2" + webextension-polyfill: "npm:^0.10.0" + checksum: 10/596bcc0206355e5698cc41458b07caa748f589790e1a3210f1a32d21103a3318902d953a641d4583b8179d653659ba29c42e65fba019a98533bdcf68316bf915 + languageName: node + linkType: hard + +"@metamask/rpc-errors@npm:^6.2.1": + version: 6.4.0 + resolution: "@metamask/rpc-errors@npm:6.4.0" + dependencies: + "@metamask/utils": "npm:^9.0.0" + fast-safe-stringify: "npm:^2.0.6" + checksum: 10/9a17525aa8ce9ac142a94c04000dba7f0635e8e155c6c045f57eca36cc78c255318cca2fad4571719a427dfd2df64b70bc6442989523a8de555480668d666ad5 + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 10/3e4f00c64aa1ddf9b9ae5c2337fb8cee359b6c481ded0ec21ef70610960c51cdcc4a9b569de334dcd7cb1fe445cafd298360907c1e211e244c5990b55246f350 + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:^3.0.0, @metamask/safe-event-emitter@npm:^3.1.1": + version: 3.1.2 + resolution: "@metamask/safe-event-emitter@npm:3.1.2" + checksum: 10/8ef7579f9317eb5c94ecf3e6abb8d13b119af274b678805eac76abe4c0667bfdf539f385e552bb973e96333b71b77aa7c787cb3fce9cd5fb4b00f1dbbabf880d + languageName: node + linkType: hard + +"@metamask/sdk-communication-layer@npm:0.30.0": + version: 0.30.0 + resolution: "@metamask/sdk-communication-layer@npm:0.30.0" + dependencies: + bufferutil: "npm:^4.0.8" + date-fns: "npm:^2.29.3" + debug: "npm:^4.3.4" + utf-8-validate: "npm:^5.0.2" + uuid: "npm:^8.3.2" + peerDependencies: + cross-fetch: ^4.0.0 + eciesjs: ^0.3.16 + eventemitter2: ^6.4.7 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + checksum: 10/a68f67abbff258f89d3179869f85f7353e36ea26d2ba1e226a43959701207dff1015c5c2536a2a7afd72c8414131e451c84df9b926079f8b930c299328342b92 + languageName: node + linkType: hard + +"@metamask/sdk-install-modal-web@npm:0.30.0": + version: 0.30.0 + resolution: "@metamask/sdk-install-modal-web@npm:0.30.0" + dependencies: + qr-code-styling: "npm:^1.6.0-rc.1" + peerDependencies: + i18next: 23.11.5 + react: ^18.2.0 + react-dom: ^18.2.0 + react-native: "*" + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + react-native: + optional: true + checksum: 10/b1ea701706fcbb734c6e780bb3a28e4fe2cea99b8e03faf4330b0fe2682b0ec31d35c79fab4bd007584937d32602f4eb0f09ae1c1dd0fdec927de229014e1c6d + languageName: node + linkType: hard + +"@metamask/sdk@npm:0.30.1": + version: 0.30.1 + resolution: "@metamask/sdk@npm:0.30.1" + dependencies: + "@metamask/onboarding": "npm:^1.0.1" + "@metamask/providers": "npm:16.1.0" + "@metamask/sdk-communication-layer": "npm:0.30.0" + "@metamask/sdk-install-modal-web": "npm:0.30.0" + bowser: "npm:^2.9.0" + cross-fetch: "npm:^4.0.0" + debug: "npm:^4.3.4" + eciesjs: "npm:^0.4.8" + eth-rpc-errors: "npm:^4.0.3" + eventemitter2: "npm:^6.4.7" + i18next: "npm:23.11.5" + i18next-browser-languagedetector: "npm:7.1.0" + obj-multiplex: "npm:^1.0.0" + pump: "npm:^3.0.0" + qrcode-terminal-nooctal: "npm:^0.12.1" + react-native-webview: "npm:^11.26.0" + readable-stream: "npm:^3.6.2" + socket.io-client: "npm:^4.5.1" + util: "npm:^0.12.4" + uuid: "npm:^8.3.2" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10/a30e975de75493daefcd34eebf37ebbe13a9aa811cf5acb82f727742f86fdef3a051f9abd209478e0f9c65efa0d4ea5010d4efcdb0d5701c05e317172ac30dfc + languageName: node + linkType: hard + +"@metamask/superstruct@npm:^3.0.0, @metamask/superstruct@npm:^3.1.0": + version: 3.1.0 + resolution: "@metamask/superstruct@npm:3.1.0" + checksum: 10/5066fe228d5f11da387606d7f9545de2b473ab5a9e0f1bb8aea2f52d3e2c9d25e427151acde61f4a2de80a07a9871fe9505ad06abca6a61b7c3b54ed5c403b01 + languageName: node + linkType: hard + +"@metamask/utils@npm:^5.0.1": + version: 5.0.2 + resolution: "@metamask/utils@npm:5.0.2" + dependencies: + "@ethereumjs/tx": "npm:^4.1.2" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + semver: "npm:^7.3.8" + superstruct: "npm:^1.0.3" + checksum: 10/c0d3ee4c3144b557936ab01c1a64950c0f99782bd0cf5596c0fabe8fd224dba48ed3483c0ea954791fe2ee81064a445adb489df50c776bbbeb67b5b96e930115 + languageName: node + linkType: hard + +"@metamask/utils@npm:^8.3.0": + version: 8.5.0 + resolution: "@metamask/utils@npm:8.5.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@metamask/superstruct": "npm:^3.0.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + uuid: "npm:^9.0.1" + checksum: 10/68a42a55f7dc750b75467fb7c05a496c20dac073a2753e0f4d9642c4d8dcb3f9ddf51a09d30337e11637f1777f3dfe22e15b5159dbafb0fdb7bd8c9236056153 + languageName: node + linkType: hard + +"@metamask/utils@npm:^9.0.0": + version: 9.3.0 + resolution: "@metamask/utils@npm:9.3.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@metamask/superstruct": "npm:^3.1.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + uuid: "npm:^9.0.1" + checksum: 10/ed6648cd973bbf3b4eb0e862903b795a99d27784c820e19f62f0bc0ddf353e98c2858d7e9aaebc0249a586391b344e35b9249d13c08e3ea0c74b23dc1c6b1558 + languageName: node + linkType: hard + +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/animation@npm:10.18.0" + dependencies: + "@motionone/easing": "npm:^10.18.0" + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/c7fc04dd10d6cade3d3b63d26f2532a2b2731233afc0454722e55ad8061fb3923d926db9cc09f1bcedb39f504fcee1e80adaab270523846998aad3017364a583 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.18.0 + resolution: "@motionone/dom@npm:10.18.0" + dependencies: + "@motionone/animation": "npm:^10.18.0" + "@motionone/generators": "npm:^10.18.0" + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 10/18abb5c174a84c90b2e59459fa3a9f8b655d063c259f2f3be5b6740e660285d2f66a8b25437dd963c3b9cdeae9fa5984ee8d217881088ea4d392cf39f8493a84 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/easing@npm:10.18.0" + dependencies: + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/a455a06ccee907ce9da7b1dfe392060a473132733e3f92bbee3a99c36af7baa333cf3c6e38c6d44ad0f9878fdafca3c3f4bcfe55aaeb2a633e45d8e0429f8fa5 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/generators@npm:10.18.0" + dependencies: + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/149720881e8db6a1ff38cea98349c3a00f72e5318b645459b68a2aeddb1f2be63ad2ae8978f6c4a63e2414f39e65f06de13a43fd35cf24dc3fb3e3c7f87526bc + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 10/5ad532d4d9bb16a9f311487e6409fa7e1a66ec12f82e3c36434ab6dfe3cedc61b35dae6314cee4fba8dca463b8a259cafb83801a932b7ad5f4a6e45baaa581f4 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.17.1": + version: 10.17.1 + resolution: "@motionone/types@npm:10.17.1" + checksum: 10/21d92d733ba30f810b72609fe04f2ef86125ba0160b826974605cc4cc5fbb6ab7bbf1640cbc64fd6298eb8d36fb920ad3ca646c76adf0e2c47a4920200616952 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/utils@npm:10.18.0" + dependencies: + "@motionone/types": "npm:^10.17.1" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 10/0fa9232d132383880d6004522ded763d60f490946584e02bca7f64df98fae07421071f3a85de06aa6ecb52632a47a7586b4143e824e459a87cc852fab657e549 + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 10/2400d31bbf5c3e02bc68f4b88d96d9c0672ba646bca0b6566e555cd7e8f14849a645f558f574e658fd90574a0b548b61712ae5edcee055c60288fd9382d711ea + languageName: node + linkType: hard + "@ndelangen/get-tarball@npm:^3.0.7": version: 3.0.9 resolution: "@ndelangen/get-tarball@npm:3.0.9" @@ -9154,7 +10275,23 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.6.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:^1.4.2, @noble/curves@npm:~1.6.0": +"@noble/ciphers@npm:^1.0.0": + version: 1.0.0 + resolution: "@noble/ciphers@npm:1.0.0" + checksum: 10/0a03d2bfac316f6f235ae4cdbeeba372f8d32997239c27cb56d55cbd3d42e0f867e8d7c8d76716f5f645bb7d5d73f05ba1f2d2e7d8391e86936e3b97021bfcf6 + languageName: node + linkType: hard + +"@noble/curves@npm:1.4.2, @noble/curves@npm:~1.4.0": + version: 1.4.2 + resolution: "@noble/curves@npm:1.4.2" + dependencies: + "@noble/hashes": "npm:1.4.0" + checksum: 10/f433a2e8811ae345109388eadfa18ef2b0004c1f79417553241db4f0ad0d59550be6298a4f43d989c627e9f7551ffae6e402a4edf0173981e6da95fc7cab5123 + languageName: node + linkType: hard + +"@noble/curves@npm:1.6.0, @noble/curves@npm:^1.1.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:^1.4.2, @noble/curves@npm:^1.6.0, @noble/curves@npm:~1.6.0": version: 1.6.0 resolution: "@noble/curves@npm:1.6.0" dependencies: @@ -9186,7 +10323,14 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.5.0, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.5.0": +"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": + version: 1.4.0 + resolution: "@noble/hashes@npm:1.4.0" + checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.5.0, @noble/hashes@npm:^1.2.0, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:^1.5.0, @noble/hashes@npm:~1.5.0": version: 1.5.0 resolution: "@noble/hashes@npm:1.5.0" checksum: 10/da7fc7af52af7afcf59810a7eea6155075464ff462ffda2572dc6d57d53e2669b1ea2ec774e814f6273f1697e567f28d36823776c9bf7068cba2a2855140f26e @@ -9875,6 +11019,161 @@ __metadata: languageName: node linkType: hard +"@parcel/watcher-android-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-android-arm64@npm:2.5.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-wasm@npm:^2.4.1": + version: 2.5.0 + resolution: "@parcel/watcher-wasm@npm:2.5.0" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + napi-wasm: "npm:^1.1.0" + checksum: 10/2e17915320267b6d6305406a4b59cb0b0e88eb93ba6acc61c5382c517421a9132992fb8d1468a0030ee9945a1d6216ee6112452e78b30089590cd206c49d98a0 + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.5.0": + version: 2.5.0 + resolution: "@parcel/watcher-win32-x64@npm:2.5.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.5.0 + resolution: "@parcel/watcher@npm:2.5.0" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.0" + "@parcel/watcher-darwin-arm64": "npm:2.5.0" + "@parcel/watcher-darwin-x64": "npm:2.5.0" + "@parcel/watcher-freebsd-x64": "npm:2.5.0" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.0" + "@parcel/watcher-linux-arm-musl": "npm:2.5.0" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.0" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.0" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.0" + "@parcel/watcher-linux-x64-musl": "npm:2.5.0" + "@parcel/watcher-win32-arm64": "npm:2.5.0" + "@parcel/watcher-win32-ia32": "npm:2.5.0" + "@parcel/watcher-win32-x64": "npm:2.5.0" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm-musl": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10/1e28b1aa9a63456ebfa7af3e41297d088bd31d9e32548604f4f26ed96c5808f4330cd515062e879c24a9eaab7894066c8a3951ee30b59e7cbe6786ab2c790dae + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -9909,6 +11208,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10/ddd16090cde777aaf102940f05d0274602079a95ad9805bd20bc55dcc7c3a2ba1b99dd5c73e5cc2753c3d31250ca52a67d58059459d7d27debb983a9f552936c + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -10703,6 +12009,219 @@ __metadata: languageName: node linkType: hard +"@rainbow-me/rainbowkit@npm:^2.2.0": + version: 2.2.0 + resolution: "@rainbow-me/rainbowkit@npm:2.2.0" + dependencies: + "@vanilla-extract/css": "npm:1.15.5" + "@vanilla-extract/dynamic": "npm:2.1.2" + "@vanilla-extract/sprinkles": "npm:1.6.3" + clsx: "npm:2.1.1" + qrcode: "npm:1.5.4" + react-remove-scroll: "npm:2.6.0" + ua-parser-js: "npm:^1.0.37" + peerDependencies: + "@tanstack/react-query": ">=5.0.0" + react: ">=18" + react-dom: ">=18" + viem: 2.x + wagmi: ^2.9.0 + checksum: 10/5848d39c2b34b533481ed636e44de2cde9d25cbe3fc5bebd77ce1e60ebddcb5cbfc3bfc3ecbc93a74c0fc8ddff4a4b098e2174b6a35a45231a0351e54ccd3ed4 + languageName: node + linkType: hard + +"@react-aria/breadcrumbs@npm:^3.5.18": + version: 3.5.18 + resolution: "@react-aria/breadcrumbs@npm:3.5.18" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/link": "npm:^3.7.6" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/breadcrumbs": "npm:^3.7.8" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/4f4eaa50606a725bc00e95cc2123bed3db32c03c4a93067aeac12ea1d577cde34f2b4021f0eaace3a4e35dd77a0d36ad057449e7f50dbff1964d2de82f3aa9a0 + languageName: node + linkType: hard + +"@react-aria/button@npm:^3.10.1": + version: 3.10.1 + resolution: "@react-aria/button@npm:3.10.1" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/toggle": "npm:^3.7.8" + "@react-types/button": "npm:^3.10.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/da59869337fb810adf4fef3f10a8b687604193533deec347e1f67ce48b04a2a07b4b83ef463f5b03fa6134e254fad0afc3a94e63cbda59022fbb09e3b99f7f5b + languageName: node + linkType: hard + +"@react-aria/calendar@npm:^3.5.13": + version: 3.5.13 + resolution: "@react-aria/calendar@npm:3.5.13" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/calendar": "npm:^3.5.5" + "@react-types/button": "npm:^3.10.0" + "@react-types/calendar": "npm:^3.4.10" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/8e5d5a556d9b94e0f98452944f409d189cab20111ea87ef1151c27763236cd778dc836d63a49832d792279ab2a6dc5cffb01fa099073986b1dac58f0d41af7ee + languageName: node + linkType: hard + +"@react-aria/checkbox@npm:^3.14.8": + version: 3.14.8 + resolution: "@react-aria/checkbox@npm:3.14.8" + dependencies: + "@react-aria/form": "npm:^3.0.10" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/toggle": "npm:^3.10.9" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/checkbox": "npm:^3.6.9" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/toggle": "npm:^3.7.8" + "@react-types/checkbox": "npm:^3.8.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/4389f9650da1a58c027ac63ce7973c6886ba0d9b3c19d2267e2e0c08f64aa0f97070c2a67d74b2d1758f9b50ca009ed2f2a5999dca5a6f392c163b7e0c4a9b23 + languageName: node + linkType: hard + +"@react-aria/color@npm:^3.0.1": + version: 3.0.1 + resolution: "@react-aria/color@npm:3.0.1" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/numberfield": "npm:^3.11.8" + "@react-aria/slider": "npm:^3.7.13" + "@react-aria/spinbutton": "npm:^3.6.9" + "@react-aria/textfield": "npm:^3.14.10" + "@react-aria/utils": "npm:^3.25.3" + "@react-aria/visually-hidden": "npm:^3.8.17" + "@react-stately/color": "npm:^3.8.0" + "@react-stately/form": "npm:^3.0.6" + "@react-types/color": "npm:^3.0.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/5a805e173fe48db2ef5e550fee96829891d527be190d6af2c7d6ce66db6a04c6a3524148576f6e86d99dff43b8475493a428f81a07676a0d954611f45fe304ef + languageName: node + linkType: hard + +"@react-aria/combobox@npm:^3.10.5": + version: 3.10.5 + resolution: "@react-aria/combobox@npm:3.10.5" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/listbox": "npm:^3.13.5" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/menu": "npm:^3.15.5" + "@react-aria/overlays": "npm:^3.23.4" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/textfield": "npm:^3.14.10" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/combobox": "npm:^3.10.0" + "@react-stately/form": "npm:^3.0.6" + "@react-types/button": "npm:^3.10.0" + "@react-types/combobox": "npm:^3.13.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/8267d6dc11fdaef68cbabce8d17f4d9f4943e3eb7de8cad93e316a4f3fd0d68334b68e01a9e9bc3ed6f4f09b2e5c6f6c497d49b2544a15242dec64ee8a7b84e5 + languageName: node + linkType: hard + +"@react-aria/datepicker@npm:^3.11.4": + version: 3.11.4 + resolution: "@react-aria/datepicker@npm:3.11.4" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@internationalized/number": "npm:^3.5.4" + "@internationalized/string": "npm:^3.2.4" + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/form": "npm:^3.0.10" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/spinbutton": "npm:^3.6.9" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/datepicker": "npm:^3.10.3" + "@react-stately/form": "npm:^3.0.6" + "@react-types/button": "npm:^3.10.0" + "@react-types/calendar": "npm:^3.4.10" + "@react-types/datepicker": "npm:^3.8.3" + "@react-types/dialog": "npm:^3.5.13" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/11a6f8249139ca902bad9ec5b52a252ed08635afbcebd4a5516359e6b79487b70a42d000b0cf11c40cf4b4c3cb2e5a34aae9b702c67f0b20420086ac6b6b4233 + languageName: node + linkType: hard + +"@react-aria/dialog@npm:^3.5.19": + version: 3.5.19 + resolution: "@react-aria/dialog@npm:3.5.19" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/overlays": "npm:^3.23.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/dialog": "npm:^3.5.13" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/44eba70f927cbdb003da37021ee6dde363abfa3c179437d83e19c72931c0fab12db20dbd603578d372df534ddce119e22b6908935544ce7a696523aa71b72e2e + languageName: node + linkType: hard + +"@react-aria/dnd@npm:^3.7.4": + version: 3.7.4 + resolution: "@react-aria/dnd@npm:3.7.4" + dependencies: + "@internationalized/string": "npm:^3.2.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/overlays": "npm:^3.23.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/dnd": "npm:^3.4.3" + "@react-types/button": "npm:^3.10.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/02ea56a553a79bc9669e1ed1fbfec5d073e0627262112a215f9c8789c069cb8393f3ee761860e369601939a2f7f15a1462ca1e5ada1a8373bd29a21517e2dfae + languageName: node + linkType: hard + "@react-aria/focus@npm:^3.17.1": version: 3.18.2 resolution: "@react-aria/focus@npm:3.18.2" @@ -10718,6 +12237,100 @@ __metadata: languageName: node linkType: hard +"@react-aria/focus@npm:^3.18.4": + version: 3.18.4 + resolution: "@react-aria/focus@npm:3.18.4" + dependencies: + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + clsx: "npm:^2.0.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/912cd8a98cbe978240991bec8077c7956ca03ee78cb10152c7a1131a53fb622a5c9b87a4047909f032a7550c37ed9ec50488437a17c761c5c852b721cbaa0bd2 + languageName: node + linkType: hard + +"@react-aria/form@npm:^3.0.10": + version: 3.0.10 + resolution: "@react-aria/form@npm:3.0.10" + dependencies: + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/form": "npm:^3.0.6" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/339b75055b9332e6f082dccf3b3d8c5fb2b5f72ab65a2b1f2e17ac2d2140dde543f18b36501378e7ee4703e4dee49a1dc324ddea2f42614f6c11a827c72856c8 + languageName: node + linkType: hard + +"@react-aria/grid@npm:^3.10.5": + version: 3.10.5 + resolution: "@react-aria/grid@npm:3.10.5" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/grid": "npm:^3.9.3" + "@react-stately/selection": "npm:^3.17.0" + "@react-types/checkbox": "npm:^3.8.4" + "@react-types/grid": "npm:^3.2.9" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/bbfccebfdc0aafb53d21f5bdc0b3e96ecd2e7d197c277938e6d373fdc560496cd633358aeb03ec3c2b020d2f7a2ddddb2bc3ab2c7fbc4d95a4403fee0dca1a2b + languageName: node + linkType: hard + +"@react-aria/gridlist@npm:^3.9.5": + version: 3.9.5 + resolution: "@react-aria/gridlist@npm:3.9.5" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/grid": "npm:^3.10.5" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/list": "npm:^3.11.0" + "@react-stately/tree": "npm:^3.8.5" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/a36d1028bf1affa6d628326ce1af303dbc2691d14e02f154563fe4177bfae3116fbef69282898a1bfeaf8d1c6c0f04e28ab2335e0cd09506a64a9b1a084987e7 + languageName: node + linkType: hard + +"@react-aria/i18n@npm:^3.12.3": + version: 3.12.3 + resolution: "@react-aria/i18n@npm:3.12.3" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@internationalized/message": "npm:^3.1.5" + "@internationalized/number": "npm:^3.5.4" + "@internationalized/string": "npm:^3.2.4" + "@react-aria/ssr": "npm:^3.9.6" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/54f111d9a9da68edcb8b821f7c8ead92f0c4d85307dbabee78bc5c89f5a19cdfa406b1e40b7c6f9dc26f7cedce4c9c5a10f8dcdae289e5a404c07b6fdda98aba + languageName: node + linkType: hard + "@react-aria/interactions@npm:^3.21.3, @react-aria/interactions@npm:^3.22.2": version: 3.22.2 resolution: "@react-aria/interactions@npm:3.22.2" @@ -10732,6 +12345,306 @@ __metadata: languageName: node linkType: hard +"@react-aria/interactions@npm:^3.22.4": + version: 3.22.4 + resolution: "@react-aria/interactions@npm:3.22.4" + dependencies: + "@react-aria/ssr": "npm:^3.9.6" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/095d084bd642b47a5cc2a846fa50e0953682ddcad694cc78df344b1f235e292945746692f84d27f465f7ff0117b485c3f5b69f050be196df0c3e7343d3239551 + languageName: node + linkType: hard + +"@react-aria/label@npm:^3.7.12": + version: 3.7.12 + resolution: "@react-aria/label@npm:3.7.12" + dependencies: + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/f93475462e0b962e9447f4c13c6d6ed0862e56c02747f87a81c986f6abaa1226fd215d5a32844e94b0a032cba36f80b3b6e05eed2926553cd30ab631a791bb64 + languageName: node + linkType: hard + +"@react-aria/link@npm:^3.7.6": + version: 3.7.6 + resolution: "@react-aria/link@npm:3.7.6" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/link": "npm:^3.5.8" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c14fb2abbd5c6b3f539fce11c244aa36f698ba6cb8dd591a0a79b2aedd499d81b1c2c6af03fa29a1531509bb9194483805c30773f17be015fbc9ccbac47b5023 + languageName: node + linkType: hard + +"@react-aria/listbox@npm:^3.13.3, @react-aria/listbox@npm:^3.13.5": + version: 3.13.5 + resolution: "@react-aria/listbox@npm:3.13.5" + dependencies: + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/list": "npm:^3.11.0" + "@react-types/listbox": "npm:^3.5.2" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/631ec625e0c3e9db0fa2701bd288f093128e4b49558129467d34dee0748eb6ac371bf63f716ef62fbdff9e4f5d4a33e0ca1b45aae1213c7f624f799b2f0ec4b6 + languageName: node + linkType: hard + +"@react-aria/live-announcer@npm:^3.4.0": + version: 3.4.0 + resolution: "@react-aria/live-announcer@npm:3.4.0" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10/d5fdd048eaaf2d048881d5b8fec369e558c039a4461908b10a28f2d7dc39b94b3b7b1eb385f9e577f7cf6e5f8e0e233facfbed0da98df3abffb1d74b3c8beb89 + languageName: node + linkType: hard + +"@react-aria/menu@npm:^3.15.5": + version: 3.15.5 + resolution: "@react-aria/menu@npm:3.15.5" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/overlays": "npm:^3.23.4" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/menu": "npm:^3.8.3" + "@react-stately/tree": "npm:^3.8.5" + "@react-types/button": "npm:^3.10.0" + "@react-types/menu": "npm:^3.9.12" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/6714b959f34497e6377732103b83dabb6011cb95df61fa6a415a9737d8fad70a8e419b60ab4f4f553b5f034fba9f07104b0e6f7756c5cec64048e7d9ef743ac0 + languageName: node + linkType: hard + +"@react-aria/meter@npm:^3.4.17": + version: 3.4.17 + resolution: "@react-aria/meter@npm:3.4.17" + dependencies: + "@react-aria/progress": "npm:^3.4.17" + "@react-types/meter": "npm:^3.4.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/4d485940733dfb2f2a3fc77ef3c98ec78a37fcbd258cc343444616591998c72ef473dfbc3f3111b845de41f9cfc211a2636c579b122844226f39dca0072c5f73 + languageName: node + linkType: hard + +"@react-aria/numberfield@npm:^3.11.8": + version: 3.11.8 + resolution: "@react-aria/numberfield@npm:3.11.8" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/spinbutton": "npm:^3.6.9" + "@react-aria/textfield": "npm:^3.14.10" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/numberfield": "npm:^3.9.7" + "@react-types/button": "npm:^3.10.0" + "@react-types/numberfield": "npm:^3.8.6" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/2709e946298ee4a3be1802fddc87921e96be23c058c1fd50564a7c13e96779507de0ad005a3b51aefe41bcf0abf115ebb15f3be69887db4151bf2bcf7efec0eb + languageName: node + linkType: hard + +"@react-aria/overlays@npm:^3.23.2, @react-aria/overlays@npm:^3.23.4": + version: 3.23.4 + resolution: "@react-aria/overlays@npm:3.23.4" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/ssr": "npm:^3.9.6" + "@react-aria/utils": "npm:^3.25.3" + "@react-aria/visually-hidden": "npm:^3.8.17" + "@react-stately/overlays": "npm:^3.6.11" + "@react-types/button": "npm:^3.10.0" + "@react-types/overlays": "npm:^3.8.10" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/6f641a1f7c1976758dd062c4345d2e8882575e2b645a4e4693f051699bae48c48979db3539e77c387aee64600d7a555b94687cd01449094cf875ce80ec6aa2ed + languageName: node + linkType: hard + +"@react-aria/progress@npm:^3.4.17": + version: 3.4.17 + resolution: "@react-aria/progress@npm:3.4.17" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/progress": "npm:^3.5.7" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/72c97dcd5b0fbbf5bde0d4282887d6621f7ad31f1895c93f77528ad54c673122a93aeea555ef517eb58dd3ae5e57310d15d5cd722870b4797a97673ebd449c95 + languageName: node + linkType: hard + +"@react-aria/radio@npm:^3.10.9": + version: 3.10.9 + resolution: "@react-aria/radio@npm:3.10.9" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/form": "npm:^3.0.10" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/radio": "npm:^3.10.8" + "@react-types/radio": "npm:^3.8.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/5254109a582d97eb9505c98b256de9b45ef019fb8a0e397def279be05ed539b69ea3c0e7842896df1574d576600a5168ae6e5a1178d8ee3ea0ba600be33ec143 + languageName: node + linkType: hard + +"@react-aria/searchfield@npm:^3.7.10": + version: 3.7.10 + resolution: "@react-aria/searchfield@npm:3.7.10" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/textfield": "npm:^3.14.10" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/searchfield": "npm:^3.5.7" + "@react-types/button": "npm:^3.10.0" + "@react-types/searchfield": "npm:^3.5.9" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/1ec6fc47c85b7ca8677683bcc54a88c471314931a876040425ec16e1f92293e635f55ee638f885592927b4c2d7f7fb797c6272511cca526d3fcfbb0c64660ba0 + languageName: node + linkType: hard + +"@react-aria/select@npm:^3.14.11": + version: 3.14.11 + resolution: "@react-aria/select@npm:3.14.11" + dependencies: + "@react-aria/form": "npm:^3.0.10" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/listbox": "npm:^3.13.5" + "@react-aria/menu": "npm:^3.15.5" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-aria/visually-hidden": "npm:^3.8.17" + "@react-stately/select": "npm:^3.6.8" + "@react-types/button": "npm:^3.10.0" + "@react-types/select": "npm:^3.9.7" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/580a72f0d5738d30fbf31c6f4e56b69f5a0f1c5ef56d5da069c128540740ecc88b2ef285829ad3bedf7a2fed76255250fd54c94d46e705667ccc8f6d045e0553 + languageName: node + linkType: hard + +"@react-aria/selection@npm:^3.20.1": + version: 3.20.1 + resolution: "@react-aria/selection@npm:3.20.1" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/selection": "npm:^3.17.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/38693581ab743fb4e23a7d16a370330b5462c42119ae38862623a7ace2466f74f080dee50df9f3d1ab4d83c58a3ac17a5197061e5a31b70d6f14993109c468e8 + languageName: node + linkType: hard + +"@react-aria/separator@npm:^3.4.3": + version: 3.4.3 + resolution: "@react-aria/separator@npm:3.4.3" + dependencies: + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c30b4386283dd7658377952a708b27c103c8c1f9077bdca3f67e4458be6dd327d8884f2036442ef8cebc698a4444be248bcc0ace202db9a2c30d44ce1b3ee5db + languageName: node + linkType: hard + +"@react-aria/slider@npm:^3.7.13": + version: 3.7.13 + resolution: "@react-aria/slider@npm:3.7.13" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/slider": "npm:^3.5.8" + "@react-types/shared": "npm:^3.25.0" + "@react-types/slider": "npm:^3.7.6" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/48f666cd6171daa5c6913409a0ef9ee94fdb5471af5b03f9960fd659308e586dafc821251c7b861595e44d5b9222796ddb7783e239ddc039f9d7f944309f454f + languageName: node + linkType: hard + +"@react-aria/spinbutton@npm:^3.6.9": + version: 3.6.9 + resolution: "@react-aria/spinbutton@npm:3.6.9" + dependencies: + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/button": "npm:^3.10.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/98ed79bfd2b502a91833f5546e665c514aec3367d9cc902d32c7c6a18be4b332e905322f9916e39e64aea2cbf08da368faee6916991a861c6719ad4b7b58951f + languageName: node + linkType: hard + "@react-aria/ssr@npm:^3.9.5": version: 3.9.5 resolution: "@react-aria/ssr@npm:3.9.5" @@ -10743,6 +12656,151 @@ __metadata: languageName: node linkType: hard +"@react-aria/ssr@npm:^3.9.6": + version: 3.9.6 + resolution: "@react-aria/ssr@npm:3.9.6" + dependencies: + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/ea6b290346ce1e119ed9233fc0e34693d52ab9dc2509f07ab10710409b89484a544b7f26c1438802e97f3fb634844ae54638850cdd95caca0d1f5571781bf982 + languageName: node + linkType: hard + +"@react-aria/switch@npm:^3.6.9": + version: 3.6.9 + resolution: "@react-aria/switch@npm:3.6.9" + dependencies: + "@react-aria/toggle": "npm:^3.10.9" + "@react-stately/toggle": "npm:^3.7.8" + "@react-types/shared": "npm:^3.25.0" + "@react-types/switch": "npm:^3.5.6" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/ce627d19e48db97fbf7f5201e0d8c8108aa5f59714ca44e852902a1e6483e5f0b929e6523534ca9d5fdefbbf3c36414cb9c52a914ce13e8bd44d2f818bd4c853 + languageName: node + linkType: hard + +"@react-aria/table@npm:^3.15.5": + version: 3.15.5 + resolution: "@react-aria/table@npm:3.15.5" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/grid": "npm:^3.10.5" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/live-announcer": "npm:^3.4.0" + "@react-aria/utils": "npm:^3.25.3" + "@react-aria/visually-hidden": "npm:^3.8.17" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/flags": "npm:^3.0.4" + "@react-stately/table": "npm:^3.12.3" + "@react-types/checkbox": "npm:^3.8.4" + "@react-types/grid": "npm:^3.2.9" + "@react-types/shared": "npm:^3.25.0" + "@react-types/table": "npm:^3.10.2" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/ef229d6d6319c8cfa135c56a7eeb6915e72a3f9d05dc49f51222cf79990976fdb18529b3bf3038aca82ac71d75058b0b09507d70dbfa0fd4166afa3671e5f19a + languageName: node + linkType: hard + +"@react-aria/tabs@npm:^3.9.7": + version: 3.9.7 + resolution: "@react-aria/tabs@npm:3.9.7" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/tabs": "npm:^3.6.10" + "@react-types/shared": "npm:^3.25.0" + "@react-types/tabs": "npm:^3.3.10" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/17837148337d68cb1b2468b76967b809a3c085c19da1dab3e7d701e585499e66d926f9ebec410de2c6a925b37d232871412b36c657fa54c4e48048b63ef4ad74 + languageName: node + linkType: hard + +"@react-aria/tag@npm:^3.4.7": + version: 3.4.7 + resolution: "@react-aria/tag@npm:3.4.7" + dependencies: + "@react-aria/gridlist": "npm:^3.9.5" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/list": "npm:^3.11.0" + "@react-types/button": "npm:^3.10.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/1624d1b6f44bf350dc46e0ee8a1550123ce73c4a2508e325e2eee4603bc5cb13d8f8d8a997be12c34756b47154d4a1e60281d572615a97507198bcd65d80b870 + languageName: node + linkType: hard + +"@react-aria/textfield@npm:^3.14.10": + version: 3.14.10 + resolution: "@react-aria/textfield@npm:3.14.10" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/form": "npm:^3.0.10" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@react-types/textfield": "npm:^3.9.7" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/bac8bb98030ff889bee1d57abbfd073b31a23b275e6aea0a0f27b829e37eb041c836873daa507d4def8abc233a24bf56bf9aad6bdfb9a21412e4a3e7b47e1a34 + languageName: node + linkType: hard + +"@react-aria/toggle@npm:^3.10.9": + version: 3.10.9 + resolution: "@react-aria/toggle@npm:3.10.9" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/toggle": "npm:^3.7.8" + "@react-types/checkbox": "npm:^3.8.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/51adc665376a36cf0ccf2250d7ef1c5c4c97073c5e9dc987b7e0710a1c3c7916e668d2fca6e84fff60a16b586206260b6fc27e3267e65ae4fd670b4ca70643d1 + languageName: node + linkType: hard + +"@react-aria/tooltip@npm:^3.7.9": + version: 3.7.9 + resolution: "@react-aria/tooltip@npm:3.7.9" + dependencies: + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-stately/tooltip": "npm:^3.4.13" + "@react-types/shared": "npm:^3.25.0" + "@react-types/tooltip": "npm:^3.4.12" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/2e043bc87a8aa4e95e16c8d0ec98812cedd6b6e32099700b1fd2acdea74cf357c1476e1f5bf17c3b1bd45642089b2a09a0f1fb245544023146226df665fae594 + languageName: node + linkType: hard + "@react-aria/utils@npm:^3.25.2": version: 3.25.2 resolution: "@react-aria/utils@npm:3.25.2" @@ -10758,6 +12816,418 @@ __metadata: languageName: node linkType: hard +"@react-aria/utils@npm:^3.25.3": + version: 3.25.3 + resolution: "@react-aria/utils@npm:3.25.3" + dependencies: + "@react-aria/ssr": "npm:^3.9.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + clsx: "npm:^2.0.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/86aed35da5cb0d48d949e40bf8226d5a6d6c92a8cdc60e3e12d524d1f3cc91ab6b54c5e1642823773cbb889fb61af7da22e89488b704b56fc5f4d8d59da7519b + languageName: node + linkType: hard + +"@react-aria/visually-hidden@npm:^3.8.17": + version: 3.8.17 + resolution: "@react-aria/visually-hidden@npm:3.8.17" + dependencies: + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/utils": "npm:^3.25.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/d9cdc97d80e750f4582cc3f2bcc0bde12b6c70fbd408ca9ebba2ef654ab27b0181cdd072a8b30ae36f14d9ec16a79c2d38d7cbe834c96fad693daebc7be41616 + languageName: node + linkType: hard + +"@react-icons/all-files@npm:^4.1.0": + version: 4.1.0 + resolution: "@react-icons/all-files@npm:4.1.0" + peerDependencies: + react: "*" + checksum: 10/56252b205bd5960e605e9de9a9eacd4b2a5cf9f2e6156f4a1803eee502a7d1749e479a56d68dfc5514decc06cf4ffdf11e36c71359a984892c54cfc4a4604bc8 + languageName: node + linkType: hard + +"@react-native-async-storage/async-storage@npm:^1.17.7": + version: 1.24.0 + resolution: "@react-native-async-storage/async-storage@npm:1.24.0" + dependencies: + merge-options: "npm:^3.0.4" + peerDependencies: + react-native: ^0.0.0-0 || >=0.60 <1.0 + checksum: 10/5a6b7ac8bd7a9e537a53a3f2301530c284fd885a45ce4a4e0014859bc0f7c89bee5c4b5a6b3740b8d83751561159b237474d18f32fad75ea7d56d4ddb2180d91 + languageName: node + linkType: hard + +"@react-stately/calendar@npm:^3.5.5": + version: 3.5.5 + resolution: "@react-stately/calendar@npm:3.5.5" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/calendar": "npm:^3.4.10" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/97d436bcedfff4975c74da301ad71fd63b329da5cf2ffe4ed80c71539decaa47000e24f11de2e6bf78378cfa68501aa4320448f686cdde6f7b1d7d6ecddc7b97 + languageName: node + linkType: hard + +"@react-stately/checkbox@npm:^3.6.9": + version: 3.6.9 + resolution: "@react-stately/checkbox@npm:3.6.9" + dependencies: + "@react-stately/form": "npm:^3.0.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/checkbox": "npm:^3.8.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/45fe2277fc40ab457d374de150376f3093868153aeb144c3d7810ca2cfab15f5edb2adba7ed213eb3ee4e038cacb0607ce1f67e5066eaf9cd69b8b59577c8339 + languageName: node + linkType: hard + +"@react-stately/collections@npm:^3.11.0": + version: 3.11.0 + resolution: "@react-stately/collections@npm:3.11.0" + dependencies: + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/241bedc27fb6f156d21642ab6a5ecc67b000569c6da58b93e693c1d2c57b27eaf58e71aabab8b5041e023d67ea8cbdf771e8a5bea43b86f1904ff1f4682a49da + languageName: node + linkType: hard + +"@react-stately/color@npm:^3.8.0": + version: 3.8.0 + resolution: "@react-stately/color@npm:3.8.0" + dependencies: + "@internationalized/number": "npm:^3.5.4" + "@internationalized/string": "npm:^3.2.4" + "@react-aria/i18n": "npm:^3.12.3" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/numberfield": "npm:^3.9.7" + "@react-stately/slider": "npm:^3.5.8" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/color": "npm:^3.0.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/9049c3222707e3699fb2a22ee6d6be89e5b9c4b784a46fb9d4b9d22c9e09974905902d37a228bc344efed8147d40dd5bbc59875cc54ccb92d6d2d4827e89281e + languageName: node + linkType: hard + +"@react-stately/combobox@npm:^3.10.0": + version: 3.10.0 + resolution: "@react-stately/combobox@npm:3.10.0" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/list": "npm:^3.11.0" + "@react-stately/overlays": "npm:^3.6.11" + "@react-stately/select": "npm:^3.6.8" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/combobox": "npm:^3.13.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/8897052576e311c522db246f11f950e62f19d41f4739c4992c9485f1c4ee0e1d7675421c6f0d982f3a5ae5c7de874d2050749ed44e08a316405a5fa960e993ac + languageName: node + linkType: hard + +"@react-stately/data@npm:^3.11.7": + version: 3.11.7 + resolution: "@react-stately/data@npm:3.11.7" + dependencies: + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/31ba0cb0d1363370c7b22c3bb152e4556ff93e72dca2a4cb042e4750c32a835a15c42d262bde4e0ab4e9ddee6c0c5e501a0ebcb032d476db16fd63407f9504b8 + languageName: node + linkType: hard + +"@react-stately/datepicker@npm:^3.10.3": + version: 3.10.3 + resolution: "@react-stately/datepicker@npm:3.10.3" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@internationalized/string": "npm:^3.2.4" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/overlays": "npm:^3.6.11" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/datepicker": "npm:^3.8.3" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/f3435997c14dc8466ecac63171412296021323c2b935795b067bddb165afcccb06ef85f425315aa3b0d2073b9b26549d33cc0e97d7416368c45b955ecc4228ef + languageName: node + linkType: hard + +"@react-stately/dnd@npm:^3.4.3": + version: 3.4.3 + resolution: "@react-stately/dnd@npm:3.4.3" + dependencies: + "@react-stately/selection": "npm:^3.17.0" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/ecfadefa4be8e914af040a376c64e1a2945f3a53f9374d4446615c5a33e81e0f1a2732c177a4fac37fec44ee6acb66338757f7ebbb2d6c20d643fdcc92e6366a + languageName: node + linkType: hard + +"@react-stately/flags@npm:^3.0.4": + version: 3.0.4 + resolution: "@react-stately/flags@npm:3.0.4" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10/de1004c2e670a4876d4cb7beae9058e1e1ded410c4b51b11d076ad66feb83b0461321617fce488143330d17c0ab468641ddbd3e9883ed4371ed4578d61834bdf + languageName: node + linkType: hard + +"@react-stately/form@npm:^3.0.6": + version: 3.0.6 + resolution: "@react-stately/form@npm:3.0.6" + dependencies: + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/9bd911e7d23ae334a025a0000f9b4faa4e86384c26f07534acfc86e467d2d9507b89f6bf54f54f3aad661cf97d86398ef2bc5b0bd69f2a8602b42b7f5bded78c + languageName: node + linkType: hard + +"@react-stately/grid@npm:^3.9.3": + version: 3.9.3 + resolution: "@react-stately/grid@npm:3.9.3" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/selection": "npm:^3.17.0" + "@react-types/grid": "npm:^3.2.9" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c2dcd9cda30c4bc6ae7da0f612c9d288734e5ab58be674f1e4983d6dd5e0def0cac4be3a759b4974a49b97476d9119c92b79fba8b40576696f370fc30b7b684f + languageName: node + linkType: hard + +"@react-stately/list@npm:^3.11.0": + version: 3.11.0 + resolution: "@react-stately/list@npm:3.11.0" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/selection": "npm:^3.17.0" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/1ba76430c5c112311fc07a6861fd7046562a60d25676d2a14dfb76cb9a00d0673b241ef11093551f819276b3dc7261d2fd7ffaf2b61c8fd634b03672c4443861 + languageName: node + linkType: hard + +"@react-stately/menu@npm:^3.8.3": + version: 3.8.3 + resolution: "@react-stately/menu@npm:3.8.3" + dependencies: + "@react-stately/overlays": "npm:^3.6.11" + "@react-types/menu": "npm:^3.9.12" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/67c73ca6adfaa24a836a148a7b57cbe348aac5b865cd58525d1fc41f2abd17da0540565ffba509c216de1008d8b24ae87a198aa8057b34825a0668090e2d0d27 + languageName: node + linkType: hard + +"@react-stately/numberfield@npm:^3.9.7": + version: 3.9.7 + resolution: "@react-stately/numberfield@npm:3.9.7" + dependencies: + "@internationalized/number": "npm:^3.5.4" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/numberfield": "npm:^3.8.6" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/da4d0493d5a8e76af9a4d66ec477999fd9e26acc07dfc025494425ccdf3c5d72b104cfa9933b549e5c47b389dc7dfdc00ba34703d4d88da3e2171ddc44508385 + languageName: node + linkType: hard + +"@react-stately/overlays@npm:^3.6.11": + version: 3.6.11 + resolution: "@react-stately/overlays@npm:3.6.11" + dependencies: + "@react-stately/utils": "npm:^3.10.4" + "@react-types/overlays": "npm:^3.8.10" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/98190b4b0ced5c94d924cf97b5d43a6e28f68aa44de7bb789c20354f30f00309c86089fb6948b5ec9d09f01605b5a412fb246545b7ee9bc34e3183e7261a2805 + languageName: node + linkType: hard + +"@react-stately/radio@npm:^3.10.8": + version: 3.10.8 + resolution: "@react-stately/radio@npm:3.10.8" + dependencies: + "@react-stately/form": "npm:^3.0.6" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/radio": "npm:^3.8.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/a750896af85433719281814d394378b612465d3078488b8b541812260a795933699b1d0ca3e71fbb68003aff203916670370ef0de6895cc0cce0b9d8c6e85b84 + languageName: node + linkType: hard + +"@react-stately/searchfield@npm:^3.5.7": + version: 3.5.7 + resolution: "@react-stately/searchfield@npm:3.5.7" + dependencies: + "@react-stately/utils": "npm:^3.10.4" + "@react-types/searchfield": "npm:^3.5.9" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/bcd6f7fcb644bf0202c365f6017faf0e0cea1320a81b7e44d1c4faa49e541a8911d027da695bb6870718cbfb70a6028bd870d69eb6cc91178bccb8232d25741e + languageName: node + linkType: hard + +"@react-stately/select@npm:^3.6.8": + version: 3.6.8 + resolution: "@react-stately/select@npm:3.6.8" + dependencies: + "@react-stately/form": "npm:^3.0.6" + "@react-stately/list": "npm:^3.11.0" + "@react-stately/overlays": "npm:^3.6.11" + "@react-types/select": "npm:^3.9.7" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/fe79ed549db5ef5fbccf4312a90cd7a43e62e2a6ba7c183cb2b3c11dd6f17ba81c7c3f44eac42be67e7ebdf4eecf7a33513d5ef2badb9c13b22552da55b43df7 + languageName: node + linkType: hard + +"@react-stately/selection@npm:^3.17.0": + version: 3.17.0 + resolution: "@react-stately/selection@npm:3.17.0" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/5ecb13294b85c0b6fa1fda1665fd81105601ca3976672a5faae95a67ab484a2538b913be68cb924ca0be0b010c9eb7bba139c34da7c61e3f581d2054029b9978 + languageName: node + linkType: hard + +"@react-stately/slider@npm:^3.5.8": + version: 3.5.8 + resolution: "@react-stately/slider@npm:3.5.8" + dependencies: + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@react-types/slider": "npm:^3.7.6" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c7c51f7d153b70d785b5ced5e918fd0f72278a4f288bb78c62da51a3ef0277db50f365803a1c7d9b57071cb99315a17fc9796b8aca608682711adb288c888dc6 + languageName: node + linkType: hard + +"@react-stately/table@npm:^3.12.3": + version: 3.12.3 + resolution: "@react-stately/table@npm:3.12.3" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/flags": "npm:^3.0.4" + "@react-stately/grid": "npm:^3.9.3" + "@react-stately/selection": "npm:^3.17.0" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/grid": "npm:^3.2.9" + "@react-types/shared": "npm:^3.25.0" + "@react-types/table": "npm:^3.10.2" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c82b4153c9205101b63e7974c72238997d05345b6c8cd15c4bb5484174df56f85128c3b4fe731734e0720e4ad98a3e8f1c933831c1cf7b5e24ed20c97229cd1b + languageName: node + linkType: hard + +"@react-stately/tabs@npm:^3.6.10": + version: 3.6.10 + resolution: "@react-stately/tabs@npm:3.6.10" + dependencies: + "@react-stately/list": "npm:^3.11.0" + "@react-types/shared": "npm:^3.25.0" + "@react-types/tabs": "npm:^3.3.10" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/b5b2c78300fdaa6bd5a94964bd9e44e2aad39070170ac7202f4c78d327e174b8c1c4e051c7edc794c729e0430ab57e76a1e510942efe1adcf7477f2ecd40004c + languageName: node + linkType: hard + +"@react-stately/toggle@npm:^3.7.8": + version: 3.7.8 + resolution: "@react-stately/toggle@npm:3.7.8" + dependencies: + "@react-stately/utils": "npm:^3.10.4" + "@react-types/checkbox": "npm:^3.8.4" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/65c662eab8a57e09228864399e46cbca3fdab1e7fea8c994431441bfc87a6d40c6897473ec48145cb9220067a7bf058d22d0f5257f2d49bfc6bc981b59a3b3ef + languageName: node + linkType: hard + +"@react-stately/tooltip@npm:^3.4.13": + version: 3.4.13 + resolution: "@react-stately/tooltip@npm:3.4.13" + dependencies: + "@react-stately/overlays": "npm:^3.6.11" + "@react-types/tooltip": "npm:^3.4.12" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/8c2a44b20dad82bb10e7b8eb26c5844dd842468ac8e39e17c511e4122e1ee9a8ba63b66adc14a643330a0f08f6407b0e4a3896a05d4c71b170624006d67b55ac + languageName: node + linkType: hard + +"@react-stately/tree@npm:^3.8.5": + version: 3.8.5 + resolution: "@react-stately/tree@npm:3.8.5" + dependencies: + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/selection": "npm:^3.17.0" + "@react-stately/utils": "npm:^3.10.4" + "@react-types/shared": "npm:^3.25.0" + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/a853a272b53b6159c98118171cff2088ab5b262860106d4f0867d38c13c1ca7ab3f4b2c6c335b79cb07e045ffa9ac81c3061e46914150a460839e2b1dbd695ea + languageName: node + linkType: hard + "@react-stately/utils@npm:^3.10.3": version: 3.10.3 resolution: "@react-stately/utils@npm:3.10.3" @@ -10769,6 +13239,235 @@ __metadata: languageName: node linkType: hard +"@react-stately/utils@npm:^3.10.4": + version: 3.10.4 + resolution: "@react-stately/utils@npm:3.10.4" + dependencies: + "@swc/helpers": "npm:^0.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/8a56b4d0cf8d5a7a692d6f94ffff63feac2d7078fbc5642b94b0afcaaf7c8f7f4682cfe546f98265034c52576c198be5502cff3f9b145137884e50eb9ffb96d5 + languageName: node + linkType: hard + +"@react-types/breadcrumbs@npm:^3.7.8": + version: 3.7.8 + resolution: "@react-types/breadcrumbs@npm:3.7.8" + dependencies: + "@react-types/link": "npm:^3.5.8" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/5a085a3e6fa8486ce39451c9698c1fc9d1d33526db78e06cdf8e38a02e6c9765c232ea8b7bdb2a5462d2917ccef62b570dc04cb825204747c29d43af30af776c + languageName: node + linkType: hard + +"@react-types/button@npm:^3.10.0": + version: 3.10.0 + resolution: "@react-types/button@npm:3.10.0" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/13973108d935e81a9e852bdc3a530a26a4cacc4a7ec37f1dde48202be0545066a71f4d7c476806d7911e91b2b9193c79f4e89dc616280b74db37cec3dd749fea + languageName: node + linkType: hard + +"@react-types/calendar@npm:^3.4.10": + version: 3.4.10 + resolution: "@react-types/calendar@npm:3.4.10" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/0f90aa3394d160b09e93ce0acb66a226c1d4211e818f69b5ac0d9faf01a6729085d1fcad83566ddf425d18308c05f70e56007429ef2060f0bf4f595d3c28f066 + languageName: node + linkType: hard + +"@react-types/checkbox@npm:^3.8.4": + version: 3.8.4 + resolution: "@react-types/checkbox@npm:3.8.4" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/15eb9951dc7ab24cb9f95b500df09d17e1c675f33121b589f778508f8c803f6f29bf6744441c48c1dc5e6d7755feda83e9464832b6771b1662757b564bfb80dd + languageName: node + linkType: hard + +"@react-types/color@npm:^3.0.0": + version: 3.0.0 + resolution: "@react-types/color@npm:3.0.0" + dependencies: + "@react-types/shared": "npm:^3.25.0" + "@react-types/slider": "npm:^3.7.6" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/ca56d14fbb70e43b67aa696abeeb1aba4df44b09081227b49bc476342119b5b374be4bf25f753799f28cb994f0dffc2abecea16f9c940fa091007416e485c81b + languageName: node + linkType: hard + +"@react-types/combobox@npm:^3.13.0": + version: 3.13.0 + resolution: "@react-types/combobox@npm:3.13.0" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/e69ae7389ff7b38aca0e6cee6c854b2f343c9a18cbec03a3773d59f2e148a97b3948abd49ed1f79c8d62e36f9f067dbd08c42c1e871090cab4dc2c421c3b6fc9 + languageName: node + linkType: hard + +"@react-types/datepicker@npm:^3.8.3": + version: 3.8.3 + resolution: "@react-types/datepicker@npm:3.8.3" + dependencies: + "@internationalized/date": "npm:^3.5.6" + "@react-types/calendar": "npm:^3.4.10" + "@react-types/overlays": "npm:^3.8.10" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/15e4c21569f69be8de94ea3831c4fc7e1c62d7b704cfa4970da32677a152e20c13dd47dd4bd969e5598a9e100c572031159445100c4d08b7dcf92dcb932228db + languageName: node + linkType: hard + +"@react-types/dialog@npm:^3.5.13": + version: 3.5.13 + resolution: "@react-types/dialog@npm:3.5.13" + dependencies: + "@react-types/overlays": "npm:^3.8.10" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c7ee923c326b7377660400ec794ef98330388250aa32df23f5c22a63e483bcad221283de26181bf2a5cab2c20d517f528bf351c9786ac9fece3e3726e4ae07c3 + languageName: node + linkType: hard + +"@react-types/grid@npm:^3.2.9": + version: 3.2.9 + resolution: "@react-types/grid@npm:3.2.9" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/db85cb813a662de2673d14119036aa437c60358436bb9099c46706485fad47d1f7aa9df69131ec7ce122f78a684f9082a2aa03ac37d0370069ffd1bec1c11c3e + languageName: node + linkType: hard + +"@react-types/link@npm:^3.5.8": + version: 3.5.8 + resolution: "@react-types/link@npm:3.5.8" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/3e20323be7cebfcd10cde779a884e1bea3cd5068cbd6eff60f62cb03718fb88cb024c14d0f79c86fe41fd790e10849d405b0115a68a08ffcc9715f303cc4563d + languageName: node + linkType: hard + +"@react-types/listbox@npm:^3.5.2": + version: 3.5.2 + resolution: "@react-types/listbox@npm:3.5.2" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/5aadf4665538613c8fc60dab1fe58ff02eff9f9b653fc6df772c94df17170cc7b31dd869e9293bdd437fccf168124d165162080084d32c2c01cd51f64ec2e3fd + languageName: node + linkType: hard + +"@react-types/menu@npm:^3.9.12": + version: 3.9.12 + resolution: "@react-types/menu@npm:3.9.12" + dependencies: + "@react-types/overlays": "npm:^3.8.10" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/a6276115c5da08c63b9641b985c366435e69847af680ace5fef32ce2ca6eab9669db5cc8f5a20e01377a54f17392a95864ee40831b13b2258ed6d43bcc1398f5 + languageName: node + linkType: hard + +"@react-types/meter@npm:^3.4.4": + version: 3.4.4 + resolution: "@react-types/meter@npm:3.4.4" + dependencies: + "@react-types/progress": "npm:^3.5.7" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/cd05949d2ff361dedc576369d7a38688ac8be62b237881c8cf0314825bae5d923814c81dc83922b76d54c46936571ad7da186d6dcfeb37fb5425c119f77d8f21 + languageName: node + linkType: hard + +"@react-types/numberfield@npm:^3.8.6": + version: 3.8.6 + resolution: "@react-types/numberfield@npm:3.8.6" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/47ca14f31d970bad272ff9a2d06ee722d5ca7d5d5d60e47277040f9bbf0cb6b9835c234387e29446148c28df0a0d747c4ddb56d8a53c510b63a91547f808cf51 + languageName: node + linkType: hard + +"@react-types/overlays@npm:^3.8.10": + version: 3.8.10 + resolution: "@react-types/overlays@npm:3.8.10" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/2e8edf37f75df2884a280cbd25a3798d24b93669b8b2b606cadacaf40f605f63e437749cea28861fabecd78293302ac39108f4e65cedd412c474e92be9895561 + languageName: node + linkType: hard + +"@react-types/progress@npm:^3.5.7": + version: 3.5.7 + resolution: "@react-types/progress@npm:3.5.7" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/610cfd88946e566dd3cfe745a4b4f90b6216b6df6c55d19aab9e1c0c099e062baa7cf221c79e7fd1f46a7d4604df71bcd8914d8ec5e79b2694e9e605a0115dcc + languageName: node + linkType: hard + +"@react-types/radio@npm:^3.8.4": + version: 3.8.4 + resolution: "@react-types/radio@npm:3.8.4" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/b00f2a97ef56b4860b2bb196433d78a068031427b4f99d2350f45ee444f49de7cad646220dae53ed1126555fe715050deefc67f9728e264a27b910b274f4a6b3 + languageName: node + linkType: hard + +"@react-types/searchfield@npm:^3.5.9": + version: 3.5.9 + resolution: "@react-types/searchfield@npm:3.5.9" + dependencies: + "@react-types/shared": "npm:^3.25.0" + "@react-types/textfield": "npm:^3.9.7" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/b5d53113f7cd6d55c69350345e042412fcd31fbd69ea9eff3a0b74e9575b9a50b6e3b9f6443e760bfce73c6950c513a6b0c43a6b5cbffa9b0d5f8a29236ee56d + languageName: node + linkType: hard + +"@react-types/select@npm:^3.9.7": + version: 3.9.7 + resolution: "@react-types/select@npm:3.9.7" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/c53a9408e22cc7c622955a11a80339c412564720d08d621bbd5a28953731eb8afda8d0bb56b5242f8f94e99c3264b913f1228ec9454c3b637f4e8d2374e00f99 + languageName: node + linkType: hard + "@react-types/shared@npm:^3.24.1": version: 3.24.1 resolution: "@react-types/shared@npm:3.24.1" @@ -10778,6 +13477,83 @@ __metadata: languageName: node linkType: hard +"@react-types/shared@npm:^3.25.0": + version: 3.25.0 + resolution: "@react-types/shared@npm:3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/fa31eb6153c223210c2eee46934a63b922917bcde0ee583f2cfe59675db122c10e1cbae6549b1fea4284391fdbeca6888b36e9dc797231ad4a76def01490aea5 + languageName: node + linkType: hard + +"@react-types/slider@npm:^3.7.6": + version: 3.7.6 + resolution: "@react-types/slider@npm:3.7.6" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/01d15d8f946188cc45ddf63f3300c21aebaea015c88bd8883d64e740ead54873407fdbfb3dcc8b3c5198a40355c5c0027c006d41123220189783d1ac2193eee6 + languageName: node + linkType: hard + +"@react-types/switch@npm:^3.5.6": + version: 3.5.6 + resolution: "@react-types/switch@npm:3.5.6" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/1741c5c98686847a3a9c2f07bb47f409c0f35d32c3b8759c418ddee24a2e02e8f9a7f49690f8dfe304e811af191ea3d97bb68a0dd9355bfb85e95140dd8433c8 + languageName: node + linkType: hard + +"@react-types/table@npm:^3.10.2": + version: 3.10.2 + resolution: "@react-types/table@npm:3.10.2" + dependencies: + "@react-types/grid": "npm:^3.2.9" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/0fb7b38c56809500e0cc7a958965b54fb2d5172da3df28b994f24630c3aa931fef0993f15d3ec1c2716b910435aeb90c210abd27badec2de1f77ecdf6d03ab16 + languageName: node + linkType: hard + +"@react-types/tabs@npm:^3.3.10": + version: 3.3.10 + resolution: "@react-types/tabs@npm:3.3.10" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/4b2fd7d6f978067a7a603c83ed7292ff12c47b89a9c556da2cdc10c8a185868311318d4f6f7703e4cf4234a5cd2cb882ec48e4771fb61b2dfa00f47c0474949f + languageName: node + linkType: hard + +"@react-types/textfield@npm:^3.9.7": + version: 3.9.7 + resolution: "@react-types/textfield@npm:3.9.7" + dependencies: + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/73fc23fd7a83f0a44add2bdb1c10e1361a3aa4ee1d5e1dfb6b63f661140b58052d8dce735e79c0a2c9c66db596dfe9c312ee70ebcd100d2c8b102fbe6b8199ad + languageName: node + linkType: hard + +"@react-types/tooltip@npm:^3.4.12": + version: 3.4.12 + resolution: "@react-types/tooltip@npm:3.4.12" + dependencies: + "@react-types/overlays": "npm:^3.8.10" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/3321d0c938a46343f2961b53d9533ab62ea5fc1c4b199e7e1740dab2ba59765bc87ed04903819596f61bdaa07e2a1c8c29d6f6b34e3d495c0f43d656a7ac8d18 + languageName: node + linkType: hard + "@resolver-engine/core@npm:^0.3.3": version: 0.3.3 resolution: "@resolver-engine/core@npm:0.3.3" @@ -11092,6 +13868,26 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-apps-provider@npm:0.18.4": + version: 0.18.4 + resolution: "@safe-global/safe-apps-provider@npm:0.18.4" + dependencies: + "@safe-global/safe-apps-sdk": "npm:^9.1.0" + events: "npm:^3.3.0" + checksum: 10/252ccad3416f73e9fa5e7bdd074955ca6b81c55be89c3cd3e25a7cab9b01922cb9f9a02d2766dff15003908c7cccc47bc22f58dd2d4a65b504fd7870eabda41b + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:9.1.0, @safe-global/safe-apps-sdk@npm:^9.1.0": + version: 9.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:9.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" + viem: "npm:^2.1.1" + checksum: 10/b81e1a554509fc41f5b8ec3bcccaf477fd55824010774699dd2c00dee8431cfd351bf13893ff6acb1450028ce4de31a1316548a0e77a66d801ff9e0b4e08b9ff + languageName: node + linkType: hard + "@safe-global/safe-core-sdk-types@npm:2.3.0": version: 2.3.0 resolution: "@safe-global/safe-core-sdk-types@npm:2.3.0" @@ -11136,20 +13932,27 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:~1.0.0": - version: 1.0.0 - resolution: "@scure/base@npm:1.0.0" - checksum: 10/cbf631e1f13536287e1f19137039d29757a008fad2d9b0c8113c140e1900519a95f4884cd61633fbb2adbe426c3c9bbfde2b77519145b3d81bac9853a52c599e +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.22.2 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.22.2" + checksum: 10/7f2b3cab4a1673647c8f7fd927be280f891dc74dba733f302862dee135fedd9d8e1875b1790c75b84c54164b517727bfe08a6dcaf7411659db13eeaefd1407fd languageName: node linkType: hard -"@scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": +"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.6, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": version: 1.1.9 resolution: "@scure/base@npm:1.1.9" checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb languageName: node linkType: hard +"@scure/base@npm:~1.0.0": + version: 1.0.0 + resolution: "@scure/base@npm:1.0.0" + checksum: 10/cbf631e1f13536287e1f19137039d29757a008fad2d9b0c8113c140e1900519a95f4884cd61633fbb2adbe426c3c9bbfde2b77519145b3d81bac9853a52c599e + languageName: node + linkType: hard + "@scure/bip32@npm:1.0.1": version: 1.0.1 resolution: "@scure/bip32@npm:1.0.1" @@ -11161,7 +13964,18 @@ __metadata: languageName: node linkType: hard -"@scure/bip32@npm:1.5.0": +"@scure/bip32@npm:1.4.0": + version: 1.4.0 + resolution: "@scure/bip32@npm:1.4.0" + dependencies: + "@noble/curves": "npm:~1.4.0" + "@noble/hashes": "npm:~1.4.0" + "@scure/base": "npm:~1.1.6" + checksum: 10/6cd5062d902564d9e970597ec8b1adacb415b2eadfbb95aee1a1a0480a52eb0de4d294d3753aa8b48548064c9795ed108d348a31a8ce3fc88785377bb12c63b9 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.5.0, @scure/bip32@npm:^1.5.0": version: 1.5.0 resolution: "@scure/bip32@npm:1.5.0" dependencies: @@ -11182,7 +13996,17 @@ __metadata: languageName: node linkType: hard -"@scure/bip39@npm:1.4.0": +"@scure/bip39@npm:1.3.0": + version: 1.3.0 + resolution: "@scure/bip39@npm:1.3.0" + dependencies: + "@noble/hashes": "npm:~1.4.0" + "@scure/base": "npm:~1.1.6" + checksum: 10/7d71fd58153de22fe8cd65b525f6958a80487bc9d0fbc32c71c328aeafe41fa259f989d2f1e0fa4fdfeaf83b8fcf9310d52ed9862987e46c2f2bfb9dd8cf9fc1 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.4.0, @scure/bip39@npm:^1.4.0": version: 1.4.0 resolution: "@scure/bip39@npm:1.4.0" dependencies: @@ -11913,6 +14737,60 @@ __metadata: languageName: node linkType: hard +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.2 + resolution: "@socket.io/component-emitter@npm:3.1.2" + checksum: 10/89888f00699eb34e3070624eb7b8161fa29f064aeb1389a48f02195d55dd7c52a504e52160016859f6d6dffddd54324623cdd47fd34b3d46f9ed96c18c456edc + languageName: node + linkType: hard + +"@solana-mobile/mobile-wallet-adapter-protocol-web3js@npm:^2.1.4": + version: 2.1.4 + resolution: "@solana-mobile/mobile-wallet-adapter-protocol-web3js@npm:2.1.4" + dependencies: + "@solana-mobile/mobile-wallet-adapter-protocol": "npm:^2.1.4" + bs58: "npm:^5.0.0" + js-base64: "npm:^3.7.5" + peerDependencies: + "@solana/web3.js": ^1.58.0 + checksum: 10/477ccde5bfa9bb9f108dac4a3ae515b4c37489d9314076951cc467f9c0212780a03f10356c1d57d34197a384cb1aeaba90a1f743ee3cb7733373e6b1ff7d4f19 + languageName: node + linkType: hard + +"@solana-mobile/mobile-wallet-adapter-protocol@npm:^2.1.4": + version: 2.1.4 + resolution: "@solana-mobile/mobile-wallet-adapter-protocol@npm:2.1.4" + dependencies: + "@solana/wallet-standard": "npm:^1.1.2" + "@solana/wallet-standard-util": "npm:^1.1.1" + "@wallet-standard/core": "npm:^1.0.3" + js-base64: "npm:^3.7.5" + peerDependencies: + "@solana/web3.js": ^1.58.0 + react-native: ">0.69" + checksum: 10/48270b536251f601b635a0c6ecb46da332bf3f1f419b83affbb609a15242f199fda896babbea4a647a747af57e62f0aa8abf0e5d7b2047d260576c17e883528d + languageName: node + linkType: hard + +"@solana-mobile/wallet-adapter-mobile@npm:^2.0.0": + version: 2.1.4 + resolution: "@solana-mobile/wallet-adapter-mobile@npm:2.1.4" + dependencies: + "@react-native-async-storage/async-storage": "npm:^1.17.7" + "@solana-mobile/mobile-wallet-adapter-protocol-web3js": "npm:^2.1.4" + "@solana/wallet-adapter-base": "npm:^0.9.23" + "@solana/wallet-standard-features": "npm:^1.2.0" + js-base64: "npm:^3.7.5" + qrcode: "npm:^1.5.4" + peerDependencies: + "@solana/web3.js": ^1.58.0 + dependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 10/9dfc46a6b030f2b9dd8ae80c3bb6173a6cd9b0024b89894f14618fb7eb7b90c6041966a2265b71dcde5445ccf91eb2b8d2b1e2f3e73c7e13ea496717fcbbe632 + languageName: node + linkType: hard + "@solana/buffer-layout-utils@npm:^0.2.0": version: 0.2.0 resolution: "@solana/buffer-layout-utils@npm:0.2.0" @@ -12065,6 +14943,155 @@ __metadata: languageName: node linkType: hard +"@solana/wallet-adapter-base-ui@npm:^0.1.2": + version: 0.1.2 + resolution: "@solana/wallet-adapter-base-ui@npm:0.1.2" + dependencies: + "@solana/wallet-adapter-react": "npm:^0.15.35" + peerDependencies: + "@solana/web3.js": ^1.77.3 + react: "*" + checksum: 10/5f4045defe8caedfbd777c7e46590b320a5e8526291aba83c2b1c2666b9bdfa97f46ee1820d2beb1d2cfe62a09c134018a40679023e54e9d583826d2333981d0 + languageName: node + linkType: hard + +"@solana/wallet-adapter-base@npm:^0.9.23": + version: 0.9.23 + resolution: "@solana/wallet-adapter-base@npm:0.9.23" + dependencies: + "@solana/wallet-standard-features": "npm:^1.1.0" + "@wallet-standard/base": "npm:^1.0.1" + "@wallet-standard/features": "npm:^1.0.3" + eventemitter3: "npm:^4.0.7" + peerDependencies: + "@solana/web3.js": ^1.77.3 + checksum: 10/7b0ab2a3b33bf4796c9e544d13b3ac2b6628cdbff9e839772eb2b2ab34355708fe662cc8971b68748febffdcc2ced79725f6c1ff7832d0c1660558ad0052b372 + languageName: node + linkType: hard + +"@solana/wallet-adapter-react-ui@npm:^0.9.31": + version: 0.9.35 + resolution: "@solana/wallet-adapter-react-ui@npm:0.9.35" + dependencies: + "@solana/wallet-adapter-base": "npm:^0.9.23" + "@solana/wallet-adapter-base-ui": "npm:^0.1.2" + "@solana/wallet-adapter-react": "npm:^0.15.35" + peerDependencies: + "@solana/web3.js": ^1.77.3 + react: "*" + react-dom: "*" + checksum: 10/4c1dccec09bf2197bb757952d4229cdf272ea0b1c1b06e0f09aea55482c0754b96495ffdcf67391ff6a5df6a3f5bd144b501bb90946bd0038dec302ec6fbfb20 + languageName: node + linkType: hard + +"@solana/wallet-adapter-react@npm:^0.15.32, @solana/wallet-adapter-react@npm:^0.15.35": + version: 0.15.35 + resolution: "@solana/wallet-adapter-react@npm:0.15.35" + dependencies: + "@solana-mobile/wallet-adapter-mobile": "npm:^2.0.0" + "@solana/wallet-adapter-base": "npm:^0.9.23" + "@solana/wallet-standard-wallet-adapter-react": "npm:^1.1.0" + peerDependencies: + "@solana/web3.js": ^1.77.3 + react: "*" + checksum: 10/52e009d8a49fb92e2fac90e9427fa790644e3f4b387ef39a1bb30047f8ae394a6367d3e9a9a97785d8e3fd90141800e7268f492aee0b9de0b88e113f565dd071 + languageName: node + linkType: hard + +"@solana/wallet-standard-chains@npm:^1.1.0": + version: 1.1.0 + resolution: "@solana/wallet-standard-chains@npm:1.1.0" + dependencies: + "@wallet-standard/base": "npm:^1.0.1" + checksum: 10/c87141660a01b1e4cb394c12bfa1b779e2c231dfe098518273b90c80afa0a4185bc4aeadca801452af7f8396eecec81c7e9f820d478cd4495d5918924a8bfaf3 + languageName: node + linkType: hard + +"@solana/wallet-standard-core@npm:^1.1.1": + version: 1.1.1 + resolution: "@solana/wallet-standard-core@npm:1.1.1" + dependencies: + "@solana/wallet-standard-chains": "npm:^1.1.0" + "@solana/wallet-standard-features": "npm:^1.2.0" + "@solana/wallet-standard-util": "npm:^1.1.1" + checksum: 10/3c4f8aca67856cea12928a5cf99f2cb022a787263765f879024c69ef3d89a090777301b4ec68e534de2d1df33feee34ec530bf755488dd49415c131521d06b6c + languageName: node + linkType: hard + +"@solana/wallet-standard-features@npm:^1.1.0, @solana/wallet-standard-features@npm:^1.2.0": + version: 1.2.0 + resolution: "@solana/wallet-standard-features@npm:1.2.0" + dependencies: + "@wallet-standard/base": "npm:^1.0.1" + "@wallet-standard/features": "npm:^1.0.3" + checksum: 10/6a638783b282078f7c38ba0d2a69f302293d0c3226ea257d1cafd16d7b7332631d284e738d53d443dac984900a3b6d5fa34a1c92a51200901a43966048d4475c + languageName: node + linkType: hard + +"@solana/wallet-standard-util@npm:^1.1.1": + version: 1.1.1 + resolution: "@solana/wallet-standard-util@npm:1.1.1" + dependencies: + "@noble/curves": "npm:^1.1.0" + "@solana/wallet-standard-chains": "npm:^1.1.0" + "@solana/wallet-standard-features": "npm:^1.2.0" + checksum: 10/be04a8905d1cb2bfe7b10119be374a3e51787375c3435563a935133ff3e6a4bcb482a65ba18024400fe2a2781e7900bce867fd4789de86731a7f15dd0d7978b2 + languageName: node + linkType: hard + +"@solana/wallet-standard-wallet-adapter-base@npm:^1.1.2": + version: 1.1.2 + resolution: "@solana/wallet-standard-wallet-adapter-base@npm:1.1.2" + dependencies: + "@solana/wallet-adapter-base": "npm:^0.9.23" + "@solana/wallet-standard-chains": "npm:^1.1.0" + "@solana/wallet-standard-features": "npm:^1.2.0" + "@solana/wallet-standard-util": "npm:^1.1.1" + "@wallet-standard/app": "npm:^1.0.1" + "@wallet-standard/base": "npm:^1.0.1" + "@wallet-standard/features": "npm:^1.0.3" + "@wallet-standard/wallet": "npm:^1.0.1" + peerDependencies: + "@solana/web3.js": ^1.58.0 + bs58: ^4.0.1 + checksum: 10/458269e1ca5205be4b3fe758a5bda528a03a6f65199a87968d008498901b221428690c0b4e75fd63344470a0a84206a28ab27868489b445428001cee7f770f68 + languageName: node + linkType: hard + +"@solana/wallet-standard-wallet-adapter-react@npm:^1.1.0, @solana/wallet-standard-wallet-adapter-react@npm:^1.1.2": + version: 1.1.2 + resolution: "@solana/wallet-standard-wallet-adapter-react@npm:1.1.2" + dependencies: + "@solana/wallet-standard-wallet-adapter-base": "npm:^1.1.2" + "@wallet-standard/app": "npm:^1.0.1" + "@wallet-standard/base": "npm:^1.0.1" + peerDependencies: + "@solana/wallet-adapter-base": "*" + react: "*" + checksum: 10/1e64f9ee7be8371b16ba51dfb01a6cea499bf0157c333bbc759f6e8c113a7930d6e47cf44ab25a497296be9a83a36caabc53f8ce0837091f38391f08b4a45539 + languageName: node + linkType: hard + +"@solana/wallet-standard-wallet-adapter@npm:^1.1.2": + version: 1.1.2 + resolution: "@solana/wallet-standard-wallet-adapter@npm:1.1.2" + dependencies: + "@solana/wallet-standard-wallet-adapter-base": "npm:^1.1.2" + "@solana/wallet-standard-wallet-adapter-react": "npm:^1.1.2" + checksum: 10/01571705e747129099006c45d2272117248d7f1be55190e519b78cfcfee9ce5f3307a65c32f50d6a4d388e56cb5a0be4dd028419c842d70680c665180f50dbf6 + languageName: node + linkType: hard + +"@solana/wallet-standard@npm:^1.1.2": + version: 1.1.2 + resolution: "@solana/wallet-standard@npm:1.1.2" + dependencies: + "@solana/wallet-standard-core": "npm:^1.1.1" + "@solana/wallet-standard-wallet-adapter": "npm:^1.1.2" + checksum: 10/3c17b9cafde0d796c50242916ac3fe07edbd1655dfe8a34d4e44dfbe8a82e5cbc389e867c48b802914785354c2310e237edb4ce7b9d22977ab2430f3cf52557f + languageName: node + linkType: hard + "@solana/web3.js@npm:^1.32.0": version: 1.78.5 resolution: "@solana/web3.js@npm:1.78.5" @@ -12136,6 +15163,176 @@ __metadata: languageName: node linkType: hard +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 10/1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": "npm:^1.0.1" + checksum: 10/c5ed769e2b5d607a5cdb72d325fcf98db437627862fade839daad934bd9ccf02a6f6e34f9de8cb3b18d72fce2ba6cc019a5d22398187d7d69d2607165f27f8bf + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 10/23d4d632a8a15ca91be1dc56da92eefed695d9b66068d1ab27a5655d0233dc2ac0b8668f875af542ca4ed526893c65dd53e777c72c8056f3648115aac98823ee + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": "npm:^1.0.1" + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/chacha": "npm:^1.0.1" + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/poly1305": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/2a4df136b078b7c09acb3c6fe029613d4c9f70a0ce8bec65551a4a5016930a4f9091d3b83ed1cfc9c2e7bd6ec7f5ee93a7dc729b784b3900dcb97f3c7f5da84a + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/38cd8095d94eda29a9bb8a742b1c945dba7f9ec91fc07ab351c826680d03976641ac6366c3d004a00a72d746fcd838215fe1263ef4b0660c453c5de18a0a4295 + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: 10/dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": "npm:^1.0.2" + "@stablelib/sha512": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/52e861e4fbd9d3d0a1a370d9ad96de8e2e15f133249bbbc32da66b8993e843db598054a3af17a746beb3fd5043b7529613a5dda7f2e79de6613eb3ebe5ffe3dd + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 10/3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/hmac": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d + languageName: node + linkType: hard + +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/d3ac9e2fea2b4972a5d874ee9d96c94f8c8207452e2d243a2668b1325a7b20bd9a1541df32387789a0e9bfef82c3fe021a785f46eb3442c782443863faf75205 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 10/65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": "npm:^1.0.1" + checksum: 10/3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/b01d4b532a42e5260f7f263e3a670924849c7ba51569abd8ece8279a448e625cbe4049bff1d50ad0d3a9d5f268c1b52fc611808640a6e684550edd7589a0a581 + languageName: node + linkType: hard + +"@stablelib/random@npm:1.0.2, @stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/4d55f6c676e2cc0dd2a32be0cfa96837f3e15ae48dc50a340e56db2b201f1341a9ecabb429a3a44a5bf31adee0a8151467a8e7cc15346c561c914faad415d4d4 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/35d188cd62f20d27e1d61ea07984022e9a78815a023c8f7c747d92456a60823f0683138591e87158a47cd72e73cf24ecf97f8936aa6fba8b3bef6fcb138e723d + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 10/287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": "npm:^1.0.1" + "@stablelib/random": "npm:^1.0.2" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/fb5469e390ee2515d926633e3e179038894ac4f5e8c8cd2c2fc912022e34a051112eab0fe80c4dbc6e59129679844182562a036abff89444e5c4a05dd42ed329 + languageName: node + linkType: hard + "@storybook/addon-actions@npm:7.6.20": version: 7.6.20 resolution: "@storybook/addon-actions@npm:7.6.20" @@ -12948,6 +16145,36 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-core@npm:5.60.5": + version: 5.60.5 + resolution: "@tanstack/query-core@npm:5.60.5" + checksum: 10/2c85ed3a26db31ea9fb2e44f94afee4564c8a5e47fc2c9f4e7a3b477e90642d1330ecdbc48f3b503205401772cedd94545eff23e628badd2bff5509b1da62e94 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^5.59.20": + version: 5.60.5 + resolution: "@tanstack/react-query@npm:5.60.5" + dependencies: + "@tanstack/query-core": "npm:5.60.5" + peerDependencies: + react: ^18 || ^19 + checksum: 10/00a5ef74ceb50f6bbacec2545392de65d3d9e6dc6de2a7107943460a83d1988eb66740f40b8682c8de0e9a1faff76256ab1584a816c70dd4ff9205dedc209f0a + languageName: node + linkType: hard + +"@tanstack/react-virtual@npm:^3.10.5": + version: 3.10.9 + resolution: "@tanstack/react-virtual@npm:3.10.9" + dependencies: + "@tanstack/virtual-core": "npm:3.10.9" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10/a6c90118d0b084aedf0a2b02bc718df5cc1e594fb60d1dededf8a393d3e519e574e2ba67bb7adcaf8b4d6b206f6a10b37166f006bc7e50ad566475323d545b8c + languageName: node + linkType: hard + "@tanstack/react-virtual@npm:^3.8.1": version: 3.10.8 resolution: "@tanstack/react-virtual@npm:3.10.8" @@ -12967,6 +16194,13 @@ __metadata: languageName: node linkType: hard +"@tanstack/virtual-core@npm:3.10.9": + version: 3.10.9 + resolution: "@tanstack/virtual-core@npm:3.10.9" + checksum: 10/15140fc41c728ed08486eba4c9caadbdb3c594f02d3b55fddca63813bc32e8cde64faf6ca6385f9815aeeedbc441dd8c9590aca4319c16a91f39b1937ef4eac7 + languageName: node + linkType: hard + "@testing-library/dom@npm:^9.3.1": version: 9.3.4 resolution: "@testing-library/dom@npm:9.3.4" @@ -13306,6 +16540,15 @@ __metadata: languageName: node linkType: hard +"@types/debug@npm:^4.1.7": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "npm:*" + checksum: 10/47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + "@types/detect-port@npm:^1.3.0": version: 1.3.5 resolution: "@types/detect-port@npm:1.3.5" @@ -13545,6 +16788,15 @@ __metadata: languageName: node linkType: hard +"@types/lodash.mergewith@npm:4.6.9": + version: 4.6.9 + resolution: "@types/lodash.mergewith@npm:4.6.9" + dependencies: + "@types/lodash": "npm:*" + checksum: 10/c5a67e83040103decfd37090127118f5758773d0ce2a1756d442b371721737c7752f48f62544cc970f44abec8471f260cc4c844e1a4fdef8b76cb96bdec8a595 + languageName: node + linkType: hard + "@types/lodash@npm:*, @types/lodash@npm:^4.14.167": version: 4.17.7 resolution: "@types/lodash@npm:4.17.7" @@ -13617,6 +16869,13 @@ __metadata: languageName: node linkType: hard +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: 10/f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + languageName: node + linkType: hard + "@types/mute-stream@npm:^0.0.1": version: 0.0.1 resolution: "@types/mute-stream@npm:0.0.1" @@ -13671,6 +16930,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:10.12.18": + version: 10.12.18 + resolution: "@types/node@npm:10.12.18" + checksum: 10/cfa39e797eed0f9eb2070315c66a5be3839ba91c57ace4eff63203f2e8c871127dd45fa5a3bd2ee6d7760608ea13f30b4fbd9a7b0b6a71b478162b2eb23d07b6 + languageName: node + linkType: hard + "@types/node@npm:11.11.6": version: 11.11.6 resolution: "@types/node@npm:11.11.6" @@ -13763,6 +17029,13 @@ __metadata: languageName: node linkType: hard +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10/5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 + languageName: node + linkType: hard + "@types/pbkdf2@npm:^3.0.0": version: 3.1.0 resolution: "@types/pbkdf2@npm:3.1.0" @@ -13994,6 +17267,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10/8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + "@types/unist@npm:^2.0.0": version: 2.0.10 resolution: "@types/unist@npm:2.0.10" @@ -14339,6 +17619,87 @@ __metadata: languageName: node linkType: hard +"@vanilla-extract/css-utils@npm:^0.1.4": + version: 0.1.4 + resolution: "@vanilla-extract/css-utils@npm:0.1.4" + checksum: 10/37edf1f8a6dae124bc84bc0ed1260b866f563a9e4487cca6888b4eaf8d74c2f07c92566f7290e435deb38c6cba6e4c6b8fb7c22c62917afb22a9491e5d7e4c2c + languageName: node + linkType: hard + +"@vanilla-extract/css@npm:1.15.5": + version: 1.15.5 + resolution: "@vanilla-extract/css@npm:1.15.5" + dependencies: + "@emotion/hash": "npm:^0.9.0" + "@vanilla-extract/private": "npm:^1.0.6" + css-what: "npm:^6.1.0" + cssesc: "npm:^3.0.0" + csstype: "npm:^3.0.7" + dedent: "npm:^1.5.3" + deep-object-diff: "npm:^1.1.9" + deepmerge: "npm:^4.2.2" + lru-cache: "npm:^10.4.3" + media-query-parser: "npm:^2.0.2" + modern-ahocorasick: "npm:^1.0.0" + picocolors: "npm:^1.0.0" + checksum: 10/4820caea8f7d63d5e691c72d3d324a09707040afa6b0abaaf0fea7d9ee1c133a19e5f3a383fd903453680cd0d698de0428ad2a7316e0c5e9771ffd79d813ddf6 + languageName: node + linkType: hard + +"@vanilla-extract/css@npm:^1.15.5": + version: 1.16.0 + resolution: "@vanilla-extract/css@npm:1.16.0" + dependencies: + "@emotion/hash": "npm:^0.9.0" + "@vanilla-extract/private": "npm:^1.0.6" + css-what: "npm:^6.1.0" + cssesc: "npm:^3.0.0" + csstype: "npm:^3.0.7" + dedent: "npm:^1.5.3" + deep-object-diff: "npm:^1.1.9" + deepmerge: "npm:^4.2.2" + lru-cache: "npm:^10.4.3" + media-query-parser: "npm:^2.0.2" + modern-ahocorasick: "npm:^1.0.0" + picocolors: "npm:^1.0.0" + checksum: 10/101471e44239ca38ce2d2261a35ecf5457fb53ae346fc73fb4f1dbe545b7bc5e82fea3e0ea9c07409d53c80507410fb41260c32fcf6a5afa3be5f7cab9fab93d + languageName: node + linkType: hard + +"@vanilla-extract/dynamic@npm:2.1.2, @vanilla-extract/dynamic@npm:^2.1.2": + version: 2.1.2 + resolution: "@vanilla-extract/dynamic@npm:2.1.2" + dependencies: + "@vanilla-extract/private": "npm:^1.0.6" + checksum: 10/576b22e3f1a61abad2bc758d95f6f9eae9418f1bb6c8366211e82da7eed97ac8cf9b69fea3239832ccba280dab93d5b1def4290f64943b295f146fca78049d2d + languageName: node + linkType: hard + +"@vanilla-extract/private@npm:^1.0.6": + version: 1.0.6 + resolution: "@vanilla-extract/private@npm:1.0.6" + checksum: 10/50463610da0fc9069b3e2b33b6222ea2f005487432db9110ea430e474e29b3b756bcd1fffd47b87536358829d47bce6510398f050b5f6de07ee1e4e92eeade5a + languageName: node + linkType: hard + +"@vanilla-extract/recipes@npm:^0.5.5": + version: 0.5.5 + resolution: "@vanilla-extract/recipes@npm:0.5.5" + peerDependencies: + "@vanilla-extract/css": ^1.0.0 + checksum: 10/8d2b4f8163369424226ec9a47e754002b8a095bcf86c1a60a91b2183f59508519bd31ed41baefc950ad7ca225d75b3184c3b84d3c741c5c60d91618dd70452aa + languageName: node + linkType: hard + +"@vanilla-extract/sprinkles@npm:1.6.3": + version: 1.6.3 + resolution: "@vanilla-extract/sprinkles@npm:1.6.3" + peerDependencies: + "@vanilla-extract/css": ^1.0.0 + checksum: 10/74f8e2b189c0d48e279f1b85b5fedebf1f615ab31839964cf3861f2c5cf574567c0caeddf9c8b11327d81213f81d195efc79f136b725e6013b6d645d238d5c2b + languageName: node + linkType: hard + "@vitejs/plugin-react@npm:^3.0.1": version: 3.1.0 resolution: "@vitejs/plugin-react@npm:3.1.0" @@ -14439,6 +17800,458 @@ __metadata: languageName: node linkType: hard +"@wagmi/connectors@npm:5.3.10": + version: 5.3.10 + resolution: "@wagmi/connectors@npm:5.3.10" + dependencies: + "@coinbase/wallet-sdk": "npm:4.2.3" + "@metamask/sdk": "npm:0.30.1" + "@safe-global/safe-apps-provider": "npm:0.18.4" + "@safe-global/safe-apps-sdk": "npm:9.1.0" + "@walletconnect/ethereum-provider": "npm:2.17.0" + cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3" + peerDependencies: + "@wagmi/core": 2.14.6 + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/2fa9852552d555d4dfbf45ede11ec22afd614f2b244a0bba5cd3e59196b13510d87d85b4f6677ed1949b746ab701ea47345bea3b49aa2a23441c974f5a9fe0fd + languageName: node + linkType: hard + +"@wagmi/core@npm:2.14.6": + version: 2.14.6 + resolution: "@wagmi/core@npm:2.14.6" + dependencies: + eventemitter3: "npm:5.0.1" + mipd: "npm:0.0.7" + zustand: "npm:5.0.0" + peerDependencies: + "@tanstack/query-core": ">=5.0.0" + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + "@tanstack/query-core": + optional: true + typescript: + optional: true + checksum: 10/3862660a83179e612bd357967b29b85ecd16f29030cb192eb5380f8fc7fd19ed49852b3315a012e9c2506b746dd1af870d07e9de322a3774dad2189775d3970e + languageName: node + linkType: hard + +"@wallet-standard/app@npm:^1.0.1, @wallet-standard/app@npm:^1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/app@npm:1.1.0" + dependencies: + "@wallet-standard/base": "npm:^1.1.0" + checksum: 10/d233cc79fbd857689c8c14a60875df9d8ad120fa1c9d59aeeef7303489cdecd60a12bbc2f3794720aadf6ef369cf09d1409c26c0801273561bcdb12a07b08e19 + languageName: node + linkType: hard + +"@wallet-standard/base@npm:^1.0.1, @wallet-standard/base@npm:^1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/base@npm:1.1.0" + checksum: 10/11dbb8ed80566265916ab193ad5eab1585d55996781a88039d2bc4480428b1e778901b2dcff3e688dcac7de45e8a9272026f37f07f1e75168caff581906c5079 + languageName: node + linkType: hard + +"@wallet-standard/core@npm:^1.0.3": + version: 1.1.0 + resolution: "@wallet-standard/core@npm:1.1.0" + dependencies: + "@wallet-standard/app": "npm:^1.1.0" + "@wallet-standard/base": "npm:^1.1.0" + "@wallet-standard/errors": "npm:^0.1.0" + "@wallet-standard/features": "npm:^1.1.0" + "@wallet-standard/wallet": "npm:^1.1.0" + checksum: 10/0f6a0045c3faa826dd64bea4245c287acb87f111396c261a199d3fa48344bf0b89f3e2bec874be8e32c215da728e7a19a9fe7365d008e8a969d980010a417c18 + languageName: node + linkType: hard + +"@wallet-standard/errors@npm:^0.1.0": + version: 0.1.0 + resolution: "@wallet-standard/errors@npm:0.1.0" + dependencies: + chalk: "npm:^5.3.0" + commander: "npm:^12.1.0" + bin: + errors: bin/cli.mjs + checksum: 10/5d00d0ddf5cb77cc1c9804ef7ef11fd8c7a5281c9642e9bc040a3bb01b809ef4caee7c784b695fbe61ed93bcf2c8c4d624c8b2c91050c94b0f356b124942951d + languageName: node + linkType: hard + +"@wallet-standard/features@npm:^1.0.3, @wallet-standard/features@npm:^1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/features@npm:1.1.0" + dependencies: + "@wallet-standard/base": "npm:^1.1.0" + checksum: 10/e046f813ec4bfea172aeb6c11358a962afe8f9a6961453e621d624f89d8b5fc8a44404dacfe18d33be815df6e9117bbf914009f5a9f9ea91ff90a136043fcac8 + languageName: node + linkType: hard + +"@wallet-standard/wallet@npm:^1.0.1, @wallet-standard/wallet@npm:^1.1.0": + version: 1.1.0 + resolution: "@wallet-standard/wallet@npm:1.1.0" + dependencies: + "@wallet-standard/base": "npm:^1.1.0" + checksum: 10/b56846709c43b1dee6b44f7a9e15d89a00e4408d3d967eb438f415b42c5c52c4cf33a7b3126d0cf0dc0d78f244755e3d084a05824c1397ce58be169426c5337b + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/core@npm:2.17.0" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:3.1.0" + checksum: 10/a37eff1a9b479fe1d51b4173128adecc0b9afd4897d912b396d19e5c2df6a928caa0fdb487f47ca26fae7f3ca59f263754f21b1861a178cfc11b4b2a783e50c4 + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/f6a1e3456e50cc7cfa58d99fd513ecac75573d0b8bcbbedcb1d7ec04ca9108df16b471afd40761b2a5cb4f66d8e33b7ba25f02c62c8365d68b1bd1ef52c1813e + languageName: node + linkType: hard + +"@walletconnect/ethereum-provider@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/ethereum-provider@npm:2.17.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/modal": "npm:2.7.0" + "@walletconnect/sign-client": "npm:2.17.0" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/universal-provider": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/7f86efca38e6a1a59623de090296f5beff3886af50757ea024c6c0d3237e7dd7e3719be979770d4257dfae3708b1c33a242fb061b9f981fe298d666522a2610f + languageName: node + linkType: hard + +"@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: 10/b5a105e9ac4d7d0a500085afd77b71e71a8ab78fd38b033e4ce91f8626fd8c254b1ba49a59c8c0ed8a00a7e8b93995163f414eda73c58694f8f830e453a902b6 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + checksum: 10/a68d7efe4e69c9749dd7c3a9e351dd22adccbb925447dd7f2b2978a4cd730695cc0b4e717a08bad0d0c60e0177b77618a53f3bfb4347659f3ccfe72d412c27fb + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.2": + version: 1.2.2 + resolution: "@walletconnect/heartbeat@npm:1.2.2" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/f3a1c3c255ac9bd374b25e1ef65a61b1f623b9118d48471acaac1f9ee4ee1438d8d8cbc77733cdd980809b468443c046328fe5ac4084e01e0892f8c699cf44e7 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.8" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.1" + cross-fetch: "npm:^3.1.4" + events: "npm:^3.3.0" + checksum: 10/c545906243df27fdbde3c8e9005217069dd22ce0f496c59f55843ca8fcb0c1a90d2c0ac6ecb16fa110ed85c36e5486f5a74621a5ca6230667d77ee3b0ae36cc6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.8" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/c3c78f00148043b70213f5174d537b210f1fb231d96103cbf7d0101626578d3c13fe99ac080df7a0056c7128ce488b0523eda0e3d1deed75754672848b4909a5 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: 10/7b1209c2e6ff476e45b0d828bd4d7773873c4cff41e5ed235ff8014b4e8ff09ec704817347702fe3b8ca1c1b7920abfd0af94e0cdf582a92d8a0192d8c42dce8 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.4, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.4 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.4" + dependencies: + events: "npm:^3.3.0" + keyvaluestorage-interface: "npm:^1.0.0" + checksum: 10/8cdc9f7b5e3ae0d702a44a6fc4c388a2b627188df758ffd103ba9aac6596a787d2f319aa8f6928a03d990c71c17d9b876028f36b8e0c37bd5c9026231ed9ba45 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/jsonrpc-types": "npm:^1.0.3" + tslib: "npm:1.14.1" + checksum: 10/4687b4582a5c33883d94e87ca8bb22d129a2a47b6e1d9e2c3210b74f02d9677723b3bf2283d2f0fa69866b0a66a80cdfada9a2f1c204d485fbd10d2baed1f0a6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + ws: "npm:^7.5.1" + checksum: 10/2ad66217b62fb57a43c8edd33c27da0c9ba09cfec79f4d43e5d30bcb8224a48c1d1f0d6273be0371f2c7e33d8138a6fe03afa499b429ab7829d719677cd48f4d + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:1.1.1, @walletconnect/keyvaluestorage@npm:^1.1.1": + version: 1.1.1 + resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.1" + idb-keyval: "npm:^6.2.1" + unstorage: "npm:^1.9.0" + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 10/fd9c275b3249d8e9f722866703b5c040eb35d0670c92a297428ffb700ac36c6b9978242beac5d2cfe97eb522ae01307cacd9c79ecf95640878804fce0f13c5e7 + languageName: node + linkType: hard + +"@walletconnect/logger@npm:2.1.2, @walletconnect/logger@npm:^2.0.1": + version: 2.1.2 + resolution: "@walletconnect/logger@npm:2.1.2" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.2" + pino: "npm:7.11.0" + checksum: 10/2e6d438bd352595fff6691712c83953e3ad6b2b9ab298c5a8b670a024f53a3f744b165e5aa081a79261ee4801b93b6c60698a39947d613d49a8f6e6215ecd4c2 + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal-core@npm:2.7.0" + dependencies: + valtio: "npm:1.11.2" + checksum: 10/1549f9ba5c98dfed2f97fbfccfcd2e342550c7ba7a85970bff224258dd397bad0a29721b90fef408dcc6cdfa65c52253476a04c16fece9b4d48792f03c3a4b4f + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal-ui@npm:2.7.0" + dependencies: + "@walletconnect/modal-core": "npm:2.7.0" + lit: "npm:2.8.0" + motion: "npm:10.16.2" + qrcode: "npm:1.5.3" + checksum: 10/00d17001bde7646def34eaffef81c4a580f09fdf10902a7a938cd2a3738f8f1cbb10520c229989b64e147df9f4df8ca31bd1d904f9019acc63327b495fb5b3ed + languageName: node + linkType: hard + +"@walletconnect/modal@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal@npm:2.7.0" + dependencies: + "@walletconnect/modal-core": "npm:2.7.0" + "@walletconnect/modal-ui": "npm:2.7.0" + checksum: 10/a6b78cc06479e0aa98516784ff1f81b24839777f0ec38d2f9cc85b4dc932ad6e823187bbb699f80f898e7d4b09d1232134f348eb9d12697e74e742eeaec189f2 + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:1.0.11": + version: 1.0.11 + resolution: "@walletconnect/relay-api@npm:1.0.11" + dependencies: + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + checksum: 10/d85f88b9744917ee5b36d2df23bf4012819b14b73229f9bdca942bee11dd3b3428808c7528c2b1f6b3d91fa1d34a22b1e20b46533e402301318cbd4ab59b9c17 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": "npm:^1.0.2" + "@stablelib/random": "npm:^1.0.1" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + uint8arrays: "npm:^3.0.0" + checksum: 10/d9128b2a25f38ebf2f49f8c184dad5c997ad6343513bddd7941459c2f2757e6acfbcdd36dc9c12d0491f55723d5e2c5c0ee2e9cf381b3247274b920e95d4db0e + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:1.0.2, @walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/b9d031dab3916d20fa5241d7ad2be425368ae489995ba3ba18d6ad88e81ad3ed093b8e867b8a4fc44759099896aeb5afee5635858cb80c4819ebc7ebb71ed5a6 + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/sign-client@npm:2.17.0" + dependencies: + "@walletconnect/core": "npm:2.17.0" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/e3eb391b4f01ae353e7c5f3580971ac7e5b9bd5a6bdb77783d8954e9c0243bb32945de230cfd09fddb2a589f28a9359de8ca313e83eae2b2e396753957d87b4c + languageName: node + linkType: hard + +"@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/ea84d0850e63306837f98a228e08a59f6945da38ba5553b1f158abeaa8ec4dc8a0025a0f0cfc843ddf05ce2947da95c02ac1e8cedce7092bbe1c2d46ca816dd9 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.11.0": + version: 2.11.0 + resolution: "@walletconnect/types@npm:2.11.0" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/heartbeat": "npm:1.2.1" + "@walletconnect/jsonrpc-types": "npm:1.0.3" + "@walletconnect/keyvaluestorage": "npm:^1.1.1" + "@walletconnect/logger": "npm:^2.0.1" + events: "npm:^3.3.0" + checksum: 10/72602e3a38dbc8db789467cbf40fad5500c2fdf736277dde11990b8d11d989c3c075cb3ab8a6e88dc7f1a6b559cd791a2aa5da843239c34a0ee726d1f73fd723 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/types@npm:2.17.0" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 10/a0ac222a0ef92c88c159178e643752345978c69109522adea6bebb217c29a182337b2698cb16864151a0c79a457ea1b8659602af1f00dd45e1bd5308c89585cf + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/universal-provider@npm:2.17.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/sign-client": "npm:2.17.0" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/d03d5178677864c996460eb48072e7f9ca290fe2a1f660f4b9ec8c52e3d574af483fdbca8a95206cbe41cbc89a21b75b2ad13c55ababd3cad2e9a6e3567d2a0a + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/utils@npm:2.17.0" + dependencies: + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + detect-browser: "npm:5.3.0" + elliptic: "npm:^6.5.7" + query-string: "npm:7.1.3" + uint8arrays: "npm:3.1.0" + checksum: 10/b460aeb0eb0c8e9d50677596f5fd04f940a922027b4d348e53b026e4290cb67a08941bfc6dc0fad8ae55d7434554fbe07907741658845f710a1befa39e47698c + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/8d3fcb134fbbe903ba4a63f1fa5a7849fd443874bf45488260afc2fe3b1cbe211f86da1d76ee844be7c0e8618ae67402f94c213432fd80b04715eaf72e2e00e3 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": "npm:^1.0.1" + tslib: "npm:1.14.1" + checksum: 10/cf322e0860c4448cefcd81f34bc6d49d1a235a81e74a6146baefb74e47cf6c3c8050b65e534a3dc13f8d2aed3fc59732ccf48d5a01b5b23e08e1847fcffa950c + languageName: node + linkType: hard + "@yarnpkg/esbuild-plugin-pnp@npm:^3.0.0-rc.10": version: 3.0.0-rc.15 resolution: "@yarnpkg/esbuild-plugin-pnp@npm:3.0.0-rc.15" @@ -14477,6 +18290,29 @@ __metadata: languageName: node linkType: hard +"@zag-js/dom-query@npm:0.31.1": + version: 0.31.1 + resolution: "@zag-js/dom-query@npm:0.31.1" + checksum: 10/61f7c28e7bccf1568eb4bbf7b74a9ba41f991be792098f9c512359fae70b460895c3e48f46f86738174b079dbeab58d6771fd2565927cfe2f6c05cb50bfa812f + languageName: node + linkType: hard + +"@zag-js/element-size@npm:0.31.1": + version: 0.31.1 + resolution: "@zag-js/element-size@npm:0.31.1" + checksum: 10/a0bd5937cacce2da7705912dd79d49b162a28f9bb3f14171bc1d11aca07be9754a555d5af661c45d102833dc4558fb07ccb3aa89b9922339871bf03c7b8fa9d1 + languageName: node + linkType: hard + +"@zag-js/focus-visible@npm:^0.31.1": + version: 0.31.1 + resolution: "@zag-js/focus-visible@npm:0.31.1" + dependencies: + "@zag-js/dom-query": "npm:0.31.1" + checksum: 10/da879cf88d28a4c2da4d3f7e17797ef43dbdd9e00d6eafc72d6728be32785015bafcbc60736146fa819b33ae48bde5d8f1c9f4afff646b0dc7a7f4701b2dcd6d + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -14503,7 +18339,7 @@ __metadata: languageName: node linkType: hard -"abitype@npm:1.0.6": +"abitype@npm:1.0.6, abitype@npm:^1.0.6": version: 1.0.6 resolution: "abitype@npm:1.0.6" peerDependencies: @@ -14787,6 +18623,13 @@ __metadata: languageName: node linkType: hard +"animejs@npm:^3.2.2": + version: 3.2.2 + resolution: "animejs@npm:3.2.2" + checksum: 10/7abdb56f415c666ba02f4e64fdbb10d457fed7e3711b0f006f97e48e5650097013397d890e8ceb31e9e06b73bf6dfd9202309d0dae0fc0b5190aa7c4e0ab7054 + languageName: node + linkType: hard + "ansi-align@npm:^3.0.0": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" @@ -14941,7 +18784,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3": +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -15032,7 +18875,7 @@ __metadata: languageName: node linkType: hard -"aria-hidden@npm:^1.1.1": +"aria-hidden@npm:^1.1.1, aria-hidden@npm:^1.2.3": version: 1.2.4 resolution: "aria-hidden@npm:1.2.4" dependencies: @@ -15357,6 +19200,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: "npm:^2.0.0" + checksum: 10/3cf676fc48b4686abf534cc02d4784bab3f35d7836a0a7476c96e57c3f6607dd3d94cc0989b29d33ce5ae5cde8be8e1a96f3e769ba3b0e1ba4a244f873aa5623 + languageName: node + linkType: hard + "async-mutex@npm:^0.4.0": version: 0.4.1 resolution: "async-mutex@npm:0.4.1" @@ -15565,6 +19417,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + cosmiconfig: "npm:^7.0.0" + resolve: "npm:^1.19.0" + checksum: 10/30be6ca45e9a124c58ca00af9a0753e5410ec0b79a737714fc4722bbbeb693e55d9258f05c437145ef4a867c2d1603e06a1c292d66c243ce1227458c8ea2ca8c + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs2@npm:^0.4.10": version: 0.4.11 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" @@ -15651,6 +19514,13 @@ __metadata: languageName: node linkType: hard +"base-x@npm:^4.0.0": + version: 4.0.0 + resolution: "base-x@npm:4.0.0" + checksum: 10/b25db9e07eb1998472a20557c7f00c797dc0595f79df95155ab74274e7fa98b9f2659b3ee547ac8773666b7f69540656793aeb97ad2b1ceccdb6fa5faaf69ac0 + languageName: node + linkType: hard + "base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -15692,7 +19562,14 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.44": +"bfs-path@npm:^1.0.2": + version: 1.0.2 + resolution: "bfs-path@npm:1.0.2" + checksum: 10/0c629521b925864315ed8c73b05aff561bac9819abc872180aace924b35b337a98ffd430a1b1f580896003c7e991527f761d2a4d4161edcad844a2f122cb9489 + languageName: node + linkType: hard + +"big-integer@npm:^1.6.44, big-integer@npm:^1.6.48": version: 1.6.52 resolution: "big-integer@npm:1.6.52" checksum: 10/4bc6ae152a96edc9f95020f5fc66b13d26a9ad9a021225a9f0213f7e3dc44269f423aa8c42e19d6ac4a63bb2b22140b95d10be8f9ca7a6d9aa1b22b330d1f514 @@ -15732,6 +19609,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:9.1.2, bignumber.js@npm:^9.1.2": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 10/d89b8800a987225d2c00dcbf8a69dc08e92aa0880157c851c287b307d31ceb2fc2acb0c62c3e3a3d42b6c5fcae9b004035f13eb4386e56d529d7edac18d5c9d8 + languageName: node + linkType: hard + "bignumber.js@npm:^9.0.0, bignumber.js@npm:^9.0.1": version: 9.0.2 resolution: "bignumber.js@npm:9.0.2" @@ -15769,6 +19653,21 @@ __metadata: languageName: node linkType: hard +"bip32@npm:^2.0.6": + version: 2.0.6 + resolution: "bip32@npm:2.0.6" + dependencies: + "@types/node": "npm:10.12.18" + bs58check: "npm:^2.1.1" + create-hash: "npm:^1.2.0" + create-hmac: "npm:^1.1.7" + tiny-secp256k1: "npm:^1.1.3" + typeforce: "npm:^1.11.5" + wif: "npm:^2.0.6" + checksum: 10/9d71a946722c302b080771ab22dc83a0d7337a29845f80715c9d258cddaf42bb42b35ab49c3498e5cc60b27c1864397d6bdac713c9726ecf72c04f07b4cb5d40 + languageName: node + linkType: hard + "bip39@npm:3.0.4": version: 3.0.4 resolution: "bip39@npm:3.0.4" @@ -15781,6 +19680,15 @@ __metadata: languageName: node linkType: hard +"bip39@npm:^3.0.3": + version: 3.1.0 + resolution: "bip39@npm:3.1.0" + dependencies: + "@noble/hashes": "npm:^1.2.0" + checksum: 10/406c0b5bdab0d43df2ff8916c5b57bb7f65cd36a115cbd7620a75b972638f8511840bfc27bfc68946027086fd33ed3050d8cd304e85fd527503b23d857a8486e + languageName: node + linkType: hard + "birpc@npm:0.2.14": version: 0.2.14 resolution: "birpc@npm:0.2.14" @@ -15912,7 +19820,7 @@ __metadata: languageName: node linkType: hard -"bowser@npm:^2.11.0": +"bowser@npm:2.11.0, bowser@npm:^2.11.0, bowser@npm:^2.9.0": version: 2.11.0 resolution: "bowser@npm:2.11.0" checksum: 10/ef46500eafe35072455e7c3ae771244e97827e0626686a9a3601c436d16eb272dad7ccbd49e2130b599b617ca9daa67027de827ffc4c220e02f63c84b69a8751 @@ -16083,7 +19991,16 @@ __metadata: languageName: node linkType: hard -"bs58check@npm:^2.1.2": +"bs58@npm:^5.0.0": + version: 5.0.0 + resolution: "bs58@npm:5.0.0" + dependencies: + base-x: "npm:^4.0.0" + checksum: 10/2475cb0684e07077521aac718e604a13e0f891d58cff923d437a2f7e9e28703ab39fce9f84c7c703ab369815a675f11e3bd394d38643bfe8969fbe42e6833d45 + languageName: node + linkType: hard + +"bs58check@npm:<3.0.0, bs58check@npm:^2.1.1, bs58check@npm:^2.1.2": version: 2.1.2 resolution: "bs58check@npm:2.1.2" dependencies: @@ -16205,6 +20122,16 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:^4.0.8": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10/d9337badc960a19d5a031db5de47159d7d8a11b6bab399bdfbf464ffa9ecd2972fef19bb61a7d2827e0c55f912c20713e12343386b86cb013f2b99c2324ab6a3 + languageName: node + linkType: hard + "bufio@npm:^1.0.7": version: 1.2.0 resolution: "bufio@npm:1.2.0" @@ -16449,6 +20376,23 @@ __metadata: languageName: node linkType: hard +"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": + version: 3.9.3 + resolution: "@coinbase/wallet-sdk@npm:3.9.3" + dependencies: + bn.js: "npm:^5.2.1" + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eth-block-tracker: "npm:^7.1.0" + eth-json-rpc-filters: "npm:^6.0.0" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: 10/3bc3f0edad8ea46cb7a127993373093d95b6fef03d2a6a40bae7983a1d9a20a114faa8e7bf1230efd380ffb67b42dae405c6617cd6fad6d278bf9b9e021a0280 + languageName: node + linkType: hard + "chai-as-promised@npm:^8.0.0": version: 8.0.0 resolution: "chai-as-promised@npm:8.0.0" @@ -16695,7 +20639,7 @@ __metadata: languageName: node linkType: hard -"citty@npm:^0.1.6": +"citty@npm:^0.1.5, citty@npm:^0.1.6": version: 0.1.6 resolution: "citty@npm:0.1.6" dependencies: @@ -16857,6 +20801,24 @@ __metadata: languageName: node linkType: hard +"client-only@npm:^0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 10/0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 + languageName: node + linkType: hard + +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: "npm:^8.0.1" + is-wsl: "npm:^3.1.0" + is64bit: "npm:^2.0.0" + checksum: 10/ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed + languageName: node + linkType: hard + "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -16928,13 +20890,20 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.1": +"clsx@npm:2.1.1, clsx@npm:^2.0.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919 languageName: node linkType: hard +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -16997,6 +20966,13 @@ __metadata: languageName: node linkType: hard +"color2k@npm:^2.0.2": + version: 2.0.3 + resolution: "color2k@npm:2.0.3" + checksum: 10/63385b3c43749a96a4edfd5f4d30103f850e5a4ab01ad39ec70bebd940a237ab79cbd2d7b2bf4eede6ef6122a1b904877f628500fdc5521310e39d3572370d6c + languageName: node + linkType: hard + "colorette@npm:^2.0.16": version: 2.0.17 resolution: "colorette@npm:2.0.17" @@ -17229,6 +21205,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 10/dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -17236,6 +21219,13 @@ __metadata: languageName: node linkType: hard +"cookie-es@npm:^1.2.2": + version: 1.2.2 + resolution: "cookie-es@npm:1.2.2" + checksum: 10/0fd742c11caa185928e450543f84df62d4b2c1fc7b5041196b57b7db04e1c6ac6585fb40e4f579a2819efefd2d6a9cbb4d17f71240d05f4dcd8f74ae81341a20 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -17264,6 +21254,15 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:3.3.3, copy-to-clipboard@npm:^3.3.3": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: "npm:^1.0.6" + checksum: 10/e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf + languageName: node + linkType: hard + "core-js-compat@npm:^3.36.1, core-js-compat@npm:^3.37.1": version: 3.37.1 resolution: "core-js-compat@npm:3.37.1" @@ -17304,6 +21303,19 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": "npm:^4.0.0" + import-fresh: "npm:^3.2.1" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + yaml: "npm:^1.10.0" + checksum: 10/03600bb3870c80ed151b7b706b99a1f6d78df8f4bdad9c95485072ea13358ef294b13dd99f9e7bf4cc0b43bcd3599d40df7e648750d21c2f6817ca2cd687e071 + languageName: node + linkType: hard + "cosmiconfig@npm:^8.0.0": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" @@ -17397,6 +21409,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: "npm:^2.6.12" + checksum: 10/e231a71926644ef122d334a3a4e73d9ba3ba4b480a8a277fb9badc434c1ba905b3d60c8034e18b348361a09afbec40ba9371036801ba2b675a7b84588f9f55d8 + languageName: node + linkType: hard + "cross-spawn@npm:^5.1.0": version: 5.1.0 resolution: "cross-spawn@npm:5.1.0" @@ -17432,6 +21453,15 @@ __metadata: languageName: node linkType: hard +"crossws@npm:>=0.2.0 <0.4.0": + version: 0.3.1 + resolution: "crossws@npm:0.3.1" + dependencies: + uncrypto: "npm:^0.1.3" + checksum: 10/d358a58b364b3314a0e42ee66b1432c01d416128e53eda983eb121abdad5ff39831a1f1ea3e90e80157ceaa0fc925f5193c151b156aa62af9e0c9bcb2fb2a15a + languageName: node + linkType: hard + "crypt@npm:>= 0.0.1": version: 0.0.2 resolution: "crypt@npm:0.0.2" @@ -17439,7 +21469,7 @@ __metadata: languageName: node linkType: hard -"crypto-js@npm:^4.2.0": +"crypto-js@npm:^4.0.0, crypto-js@npm:^4.2.0": version: 4.2.0 resolution: "crypto-js@npm:4.2.0" checksum: 10/c7bcc56a6e01c3c397e95aa4a74e4241321f04677f9a618a8f48a63b5781617248afb9adb0629824792e7ec20ca0d4241a49b6b2938ae6f973ec4efc5c53c924 @@ -17453,6 +21483,13 @@ __metadata: languageName: node linkType: hard +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: 10/c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e + languageName: node + linkType: hard + "css.escape@npm:^1.5.1": version: 1.5.1 resolution: "css.escape@npm:1.5.1" @@ -17469,7 +21506,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": +"csstype@npm:^3.0.2, csstype@npm:^3.0.7, csstype@npm:^3.1.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade @@ -17568,6 +21605,15 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^2.29.3": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": "npm:^7.21.0" + checksum: 10/70b3e8ea7aaaaeaa2cd80bd889622a4bcb5d8028b4de9162cbcda359db06e16ff6e9309e54eead5341e71031818497f19aaf9839c87d1aba1e27bb4796e758a9 + languageName: node + linkType: hard + "date-fns@npm:^3.6.0": version: 3.6.0 resolution: "date-fns@npm:3.6.0" @@ -17621,6 +21667,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:~4.3.1, debug@npm:~4.3.2": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/71168908b9a78227ab29d5d25fe03c5867750e31ce24bf2c44a86efc5af041758bb56569b0a3d48a9b5344c00a24a777e6f4100ed6dfd9534a42c1dde285125a + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -17652,6 +21710,13 @@ __metadata: languageName: node linkType: hard +"decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 10/17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e + languageName: node + linkType: hard + "decompress-response@npm:^3.2.0, decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -17691,6 +21756,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/e5277f6268f288649503125b781a7b7a2c9b22d011139688c0b3619fe40121e600eb1f077c891938d4b2428bdb6326cc3c77a763e4b1cc681bd9666ab1bad2a1 + languageName: node + linkType: hard + "deep-eql@npm:^3.0.1": version: 3.0.1 resolution: "deep-eql@npm:3.0.1" @@ -17872,6 +21949,13 @@ __metadata: languageName: node linkType: hard +"delay@npm:^4.4.0": + version: 4.4.1 + resolution: "delay@npm:4.4.1" + checksum: 10/97b001126a3979a398b6c5f33e437d78acda3b19731d9e6f991a05e2e09e7a410d655b8fdcaedc05743928bb533c0ac9401826cccb2af71c81d2cab50e199351 + languageName: node + linkType: hard + "delay@npm:^5.0.0": version: 5.0.0 resolution: "delay@npm:5.0.0" @@ -17914,6 +21998,13 @@ __metadata: languageName: node linkType: hard +"destr@npm:^2.0.3": + version: 2.0.3 + resolution: "destr@npm:2.0.3" + checksum: 10/dbb756baa876810ec0ca4bcb702d86cc3b480ed14f36bf5747718ed211f96bca5520b63a4109eb181ad940ee2a645677d9a63d4a0ed11a7510619dae97317201 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -17921,6 +22012,13 @@ __metadata: languageName: node linkType: hard +"detect-browser@npm:5.3.0, detect-browser@npm:^5.2.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: 10/4a8551e1f5170633c9aa976f16c57f81f1044d071b2eb853c572bd817bf9cd0cc90c9c520d950edb5accd31b1b0c8ddb7a96e82040b0b5579f9f09c77446a117 + languageName: node + linkType: hard + "detect-indent@npm:^6.0.0, detect-indent@npm:^6.1.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" @@ -18031,6 +22129,13 @@ __metadata: languageName: node linkType: hard +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 10/0d8429699a6d5897ed371de494ef3c7072e8052b42abbd978e686a9b8689e70af005fa3e93e93263ee3653673ff5f89c36db830a57ae7c2e088cb9c496307507 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -18142,7 +22247,7 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^4.0.0": +"duplexify@npm:^4.0.0, duplexify@npm:^4.1.2": version: 4.1.3 resolution: "duplexify@npm:4.1.3" dependencies: @@ -18180,6 +22285,18 @@ __metadata: languageName: node linkType: hard +"eciesjs@npm:^0.4.8": + version: 0.4.11 + resolution: "eciesjs@npm:0.4.11" + dependencies: + "@ecies/ciphers": "npm:^0.2.1" + "@noble/ciphers": "npm:^1.0.0" + "@noble/curves": "npm:^1.6.0" + "@noble/hashes": "npm:^1.5.0" + checksum: 10/3906d6286c4cde8dd93f5b8e1ad085aa0fdfd9a272c77a382062a782693247d19b6a99d749aff77d037777cfc49c02a8869a3aad47f192ac4f473b87cdbff4af + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -18227,6 +22344,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.7": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10/dc678c9febd89a219c4008ba3a9abb82237be853d9fd171cd602c8fb5ec39927e65c6b5e7a1b2a4ea82ee8e0ded72275e7932bb2da04a5790c2638b818e4e1c5 + languageName: node + linkType: hard + "emittery@npm:0.10.0": version: 0.10.0 resolution: "emittery@npm:0.10.0" @@ -18269,7 +22401,7 @@ __metadata: languageName: node linkType: hard -"encode-utf8@npm:^1.0.2": +"encode-utf8@npm:^1.0.2, encode-utf8@npm:^1.0.3": version: 1.0.3 resolution: "encode-utf8@npm:1.0.3" checksum: 10/0204c37cda21bf19bb8f87f7ec6c89a23d43488c2ef1e5cfa40b64ee9568e63e15dc323fa7f50a491e2c6d33843a6b409f6de09afbf6cf371cb8da596cc64b44 @@ -18304,7 +22436,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.0, end-of-stream@npm:^1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -18313,6 +22445,26 @@ __metadata: languageName: node linkType: hard +"engine.io-client@npm:~6.6.1": + version: 6.6.2 + resolution: "engine.io-client@npm:6.6.2" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + engine.io-parser: "npm:~5.2.1" + ws: "npm:~8.17.1" + xmlhttprequest-ssl: "npm:~2.1.1" + checksum: 10/c006b3389bb8bd0381926b9633e9f547dec187ea28d2dd99cb42d516b0720bc4373f3f937c199ca616c95b2832e0f547f73326f614caedfe39c02fa93b7ac733 + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.2.1": + version: 5.2.3 + resolution: "engine.io-parser@npm:5.2.3" + checksum: 10/eb0023fff5766e7ae9d59e52d92df53fea06d472cfd7b52e5d2c36b4c1dbf78cab5fde1052bcb3d4bb85bdb5aee10ae85d8a1c6c04676dac0c6cdf16bcba6380 + languageName: node + linkType: hard + "enquirer@npm:^2.3.0": version: 2.3.6 resolution: "enquirer@npm:2.3.6" @@ -19140,6 +23292,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:2.0.0, escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10/9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + "escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -19147,13 +23306,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10/9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escodegen@npm:1.8.x": version: 1.8.1 resolution: "escodegen@npm:1.8.1" @@ -19467,6 +23619,19 @@ __metadata: languageName: node linkType: hard +"eth-block-tracker@npm:^7.1.0": + version: 7.1.0 + resolution: "eth-block-tracker@npm:7.1.0" + dependencies: + "@metamask/eth-json-rpc-provider": "npm:^1.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + json-rpc-random-id: "npm:^1.0.1" + pify: "npm:^3.0.0" + checksum: 10/b001ecb126e949a9ff19950596d5180b2f1bc5504e3dec0c01b3417e8ad190f4a53dfc61be901b72ab6dd558d1d711b73eca560bc8a605d0348eef9f501defab + languageName: node + linkType: hard + "eth-ens-namehash@npm:2.0.8": version: 2.0.8 resolution: "eth-ens-namehash@npm:2.0.8" @@ -19505,6 +23670,19 @@ __metadata: languageName: node linkType: hard +"eth-json-rpc-filters@npm:^6.0.0": + version: 6.0.1 + resolution: "eth-json-rpc-filters@npm:6.0.1" + dependencies: + "@metamask/safe-event-emitter": "npm:^3.0.0" + async-mutex: "npm:^0.2.6" + eth-query: "npm:^2.1.2" + json-rpc-engine: "npm:^6.1.0" + pify: "npm:^5.0.0" + checksum: 10/d1fa8bb21da07c2f5d37c1e6053d499b272b4f49542077efc6b05eebe49affa9df7221c8c2439c4e33caa3f4ccb35240a6105abc83b83375dae03c0de53113a7 + languageName: node + linkType: hard + "eth-lib@npm:0.2.8": version: 0.2.8 resolution: "eth-lib@npm:0.2.8" @@ -19530,6 +23708,25 @@ __metadata: languageName: node linkType: hard +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" + dependencies: + json-rpc-random-id: "npm:^1.0.0" + xtend: "npm:^4.0.1" + checksum: 10/af4f3575b8315f8156a83a24e850881053748aca97e4aee12dd6645ab56f0985c7000a5c45ccf315702f3e532f0c6464e03f4aba294c658dee89f5e5d1b86702 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:^4.0.2, eth-rpc-errors@npm:^4.0.3": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" + dependencies: + fast-safe-stringify: "npm:^2.0.6" + checksum: 10/47ce14170eabaee51ab1cc7e643bb3ef96ee6b15c6404806aedcd51750e00ae0b1a12c37785b180679b8d452b6dd44a0240bb018d01fa73efc85fcfa808b35a7 + languageName: node + linkType: hard + "ethereum-bloom-filters@npm:^1.0.6": version: 1.0.10 resolution: "ethereum-bloom-filters@npm:1.0.10" @@ -19574,6 +23771,18 @@ __metadata: languageName: node linkType: hard +"ethereum-cryptography@npm:^2.0.0": + version: 2.2.1 + resolution: "ethereum-cryptography@npm:2.2.1" + dependencies: + "@noble/curves": "npm:1.4.2" + "@noble/hashes": "npm:1.4.0" + "@scure/bip32": "npm:1.4.0" + "@scure/bip39": "npm:1.3.0" + checksum: 10/ab123bbfe843500ac2d645ce9edc4bc814962ffb598db6bf8bf01fbecac656e6c81ff4cf2472f1734844bbcbad2bf658d8b699cb7248d768e0f06ae13ecf43b8 + languageName: node + linkType: hard + "ethereum-waffle@npm:^4.0.10": version: 4.0.10 resolution: "ethereum-waffle@npm:4.0.10" @@ -19725,6 +23934,13 @@ __metadata: languageName: node linkType: hard +"eventemitter2@npm:^6.4.7": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: 10/b829b1c6b11e15926b635092b5ad62b4463d1c928859831dcae606e988cf41893059e3541f5a8209d21d2f15314422ddd4d84d20830b4bf44978608d15b06b08 + languageName: node + linkType: hard + "eventemitter3@npm:4.0.4": version: 4.0.4 resolution: "eventemitter3@npm:4.0.4" @@ -19732,6 +23948,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 + languageName: node + linkType: hard + "eventemitter3@npm:^4.0.7": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -19739,14 +23962,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^5.0.1": - version: 5.0.1 - resolution: "eventemitter3@npm:5.0.1" - checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 - languageName: node - linkType: hard - -"events@npm:^3.2.0, events@npm:^3.3.0": +"events@npm:3.3.0, events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be @@ -19972,6 +24188,16 @@ __metadata: languageName: node linkType: hard +"extension-port-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "extension-port-stream@npm:3.0.0" + dependencies: + readable-stream: "npm:^3.6.2 || ^4.4.2" + webextension-polyfill: "npm:>=0.10.0 <1.0" + checksum: 10/4f51d2258a96154c2d916a8a5425636a2b0817763e9277f7dc378d08b6f050c90d185dbde4313d27cf66ad99d4b3116479f9f699c40358c64cccfa524d2b55bf + languageName: node + linkType: hard + "external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -20086,13 +24312,20 @@ __metadata: languageName: node linkType: hard -"fast-redact@npm:^3.1.1": +"fast-redact@npm:^3.0.0, fast-redact@npm:^3.1.1": version: 3.5.0 resolution: "fast-redact@npm:3.5.0" checksum: 10/24b27e2023bd5a62f908d97a753b1adb8d89206b260f97727728e00b693197dea2fc2aa3711147a385d0ec6e713569fd533df37a4ef947e08cb65af3019c7ad5 languageName: node linkType: hard +"fast-safe-stringify@npm:^2.0.6": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: 10/dc1f063c2c6ac9533aee14d406441f86783a8984b2ca09b19c2fe281f9ff59d315298bc7bc22fd1f83d26fe19ef2f20e2ddb68e96b15040292e555c5ced0c1e4 + languageName: node + linkType: hard + "fast-stable-stringify@npm:^1.0.0": version: 1.0.0 resolution: "fast-stable-stringify@npm:1.0.0" @@ -20207,6 +24440,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: 10/9d681939eec2b4b129cb4f307b7e93d954a0657421d4e5357d86093b26d3f4f570909ed43717dcfd62428b3cf8cddd9841b35f9d40d12ac62cfabaa677942593 + languageName: node + linkType: hard + "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" @@ -20253,6 +24493,13 @@ __metadata: languageName: node linkType: hard +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: 10/caa799c976a14925ba7f31ca1a226fe73d3aa270f4f1b623fcfeb1c6e263111db4beb807d8acd31bd4d48d44c343b93688a9288dfbccca27463c36a0301b0bb9 + languageName: node + linkType: hard + "find-up@npm:3.0.0, find-up@npm:^3.0.0": version: 3.0.0 resolution: "find-up@npm:3.0.0" @@ -20352,6 +24599,15 @@ __metadata: languageName: node linkType: hard +"focus-lock@npm:^1.3.5": + version: 1.3.5 + resolution: "focus-lock@npm:1.3.5" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10/1078c9d1f5515c47961a27d22b3b09c2a4eaf42a405f9be621d5ec5f426086a65f5937bff8a104e93d4bd84a7d8364e2f3ec07be876dae259df207384bbfb5de + languageName: node + linkType: hard + "follow-redirects@npm:^1.12.1": version: 1.15.1 resolution: "follow-redirects@npm:1.15.1" @@ -20483,6 +24739,36 @@ __metadata: languageName: node linkType: hard +"framer-motion@npm:^10.16.4": + version: 10.18.0 + resolution: "framer-motion@npm:10.18.0" + dependencies: + "@emotion/is-prop-valid": "npm:^0.8.2" + tslib: "npm:^2.4.0" + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependenciesMeta: + "@emotion/is-prop-valid": + optional: true + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10/8dc61e16af34ea7c7e830e03f588c54b7a186a767787eb6373ac692bbffa219959d50b7cf983f54305951e121ea7d50ebd4819920290fc6ad58b03fc5eb2bdde + languageName: node + linkType: hard + +"framesync@npm:6.1.2": + version: 6.1.2 + resolution: "framesync@npm:6.1.2" + dependencies: + tslib: "npm:2.4.0" + checksum: 10/741161b8978173acaf515ab45ff127496476e6262e624de3ccb995a67a8b32c65a4242e178646bb5554f128dd4a350ecff675c7fbd4e2aa4568dffab932ebe29 + languageName: node + linkType: hard + "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -20904,6 +25190,13 @@ __metadata: languageName: node linkType: hard +"get-port-please@npm:^3.1.2": + version: 3.1.2 + resolution: "get-port-please@npm:3.1.2" + checksum: 10/ec8b8da9f816edde114b76742ec29695730094904bb0e94309081e4adf3f797b483b9d648abcf5e0511c4e21a7bf68334672b9575f8b23bccf93bf97eb517f0e + languageName: node + linkType: hard + "get-port@npm:^3.1.0": version: 3.2.0 resolution: "get-port@npm:3.2.0" @@ -21477,6 +25770,24 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.12.0, h3@npm:^1.13.0": + version: 1.13.0 + resolution: "h3@npm:1.13.0" + dependencies: + cookie-es: "npm:^1.2.2" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + destr: "npm:^2.0.3" + iron-webcrypto: "npm:^1.2.1" + ohash: "npm:^1.1.4" + radix3: "npm:^1.1.2" + ufo: "npm:^1.5.4" + uncrypto: "npm:^0.1.3" + unenv: "npm:^1.10.0" + checksum: 10/ecdbe3cdddc767ea6f9be9939b14192dd296eb434641bbecc5b665f7210de8c03910ae40931668788395b5de6cd517afaa628d7b5ce0fb60786fce1ad6e81bcb + languageName: node + linkType: hard + "handlebars@npm:^4.0.1": version: 4.7.7 resolution: "handlebars@npm:4.7.7" @@ -21926,6 +26237,13 @@ __metadata: languageName: node linkType: hard +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 10/744b5f4c18c7cfb82b22bd22e1d300a9ac4eafe05a22e58fb87e48addfca8be00604d9aa006434ea02f9530990eb4b393ddb28659e2ab7f833ce873e32eb809c + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -21937,6 +26255,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.3.1": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: "npm:^16.7.0" + checksum: 10/1acbe85f33e5a39f90c822ad4d28b24daeb60f71c545279431dc98c312cd28a54f8d64788e477fe21dc502b0e3cf58589ebe5c1ad22af27245370391c2d24ea6 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.6.0": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -22024,6 +26351,13 @@ __metadata: languageName: node linkType: hard +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 10/1c99b575b1a7ebd749950e7f59410348723638808336063321d89588b7f7b548d61c8e3566af0f1f4f961d941c758677d062d2289bc63356ead143da4d8f3daf + languageName: node + linkType: hard + "http-signature@npm:~1.2.0": version: 1.2.0 resolution: "http-signature@npm:1.2.0" @@ -22114,6 +26448,24 @@ __metadata: languageName: node linkType: hard +"i18next-browser-languagedetector@npm:7.1.0": + version: 7.1.0 + resolution: "i18next-browser-languagedetector@npm:7.1.0" + dependencies: + "@babel/runtime": "npm:^7.19.4" + checksum: 10/3b06c8a5df09092cffc0b6637b542bb572e8a25dcba97d0d8a5e5dd7539b90bf00000f3a279654693f4b5908c5fc4d1d4f3766dfb461dacab46be3d071266384 + languageName: node + linkType: hard + +"i18next@npm:23.11.5": + version: 23.11.5 + resolution: "i18next@npm:23.11.5" + dependencies: + "@babel/runtime": "npm:^7.23.2" + checksum: 10/3a8e0d5d2b9ac6c6fa8c2180452aaf816d60e1cc790da69d6be515feec85553f8af9fcc19414ade1a621f08236e84f38df4415a8234919fa97fa2e35624e86b6 + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -22132,6 +26484,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 10/9a1416ff5e2ceff3832f5645518f438833a5ff6ee316fe3ec111d580db120425991d64d8098a847be7541bbbb7cc941984b4d0d62d541c39f7a0f415594837c2 + languageName: node + linkType: hard + "idna-uts46-hx@npm:^2.3.1": version: 2.3.1 resolution: "idna-uts46-hx@npm:2.3.1" @@ -22183,6 +26542,13 @@ __metadata: languageName: node linkType: hard +"immer@npm:^10.1.1": + version: 10.1.1 + resolution: "immer@npm:10.1.1" + checksum: 10/9dacf1e8c201d69191ccd88dc5d733bafe166cd45a5a360c5d7c88f1de0dff974a94114d72b35f3106adfe587fcfb131c545856184a2247d89d735ad25589863 + languageName: node + linkType: hard + "immutable@npm:^4.0.0-rc.12": version: 4.1.0 resolution: "immutable@npm:4.1.0" @@ -22304,7 +26670,19 @@ __metadata: languageName: node linkType: hard -"invariant@npm:2, invariant@npm:^2.2.4": +"intl-messageformat@npm:^10.1.0": + version: 10.7.6 + resolution: "intl-messageformat@npm:10.7.6" + dependencies: + "@formatjs/ecma402-abstract": "npm:2.2.3" + "@formatjs/fast-memoize": "npm:2.2.3" + "@formatjs/icu-messageformat-parser": "npm:2.9.3" + tslib: "npm:2" + checksum: 10/53f40e386fcc2eaf1ec7d974b18c91e436bc2dc8188587aa652b307160220847b06275d28ca9757ffd9e8471bb6993bf503a71363ce5f9c155d8dc33b43ab97a + languageName: node + linkType: hard + +"invariant@npm:2, invariant@npm:2.2.4, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -22336,6 +26714,13 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.2.1": + version: 1.2.1 + resolution: "iron-webcrypto@npm:1.2.1" + checksum: 10/c1f52ccfe2780efa5438c134538ee4b26c96a87d22f351d896781219efbce25b4fe716d1cb7f248e02da96881760541135acbcc7c0622ffedf71cb0e227bebf9 + languageName: node + linkType: hard + "is-absolute-url@npm:^3.0.0": version: 3.0.3 resolution: "is-absolute-url@npm:3.0.3" @@ -22513,6 +26898,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -22605,6 +26999,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: "npm:^3.0.0" + bin: + is-inside-container: cli.js + checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-interactive@npm:^1.0.0": version: 1.0.0 resolution: "is-interactive@npm:1.0.0" @@ -22901,6 +27306,24 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: "npm:^1.0.0" + checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: "npm:^0.1.0" + checksum: 10/94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c + languageName: node + linkType: hard + "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -23595,6 +28018,22 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.1.2": + version: 2.4.0 + resolution: "jiti@npm:2.4.0" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10/10aa999a4f9bccc82b1dab9ebaf4484a8770450883c1bf7fafc07f8fca1e417fd8e7731e651337d1060c9e2ff3f97362dcdfd27e86d1f385db97f4adf7b5a21d + languageName: node + linkType: hard + +"js-base64@npm:^3.7.5": + version: 3.7.7 + resolution: "js-base64@npm:3.7.7" + checksum: 10/185e34c536a6b1c4e1ad8bd96d25b49a9ea4e6803e259eaaaca95f1b392a0d590b2933c5ca8580c776f7279507944b81ff1faf889d84baa5e31f026e96d676a5 + languageName: node + linkType: hard + "js-cookie@npm:^2.2.1": version: 2.2.1 resolution: "js-cookie@npm:2.2.1" @@ -23723,6 +28162,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10/8e5a7de6b70a8bd71f9cb0b5a7ade6a73ae6ab55e697c74cc997cede97417a3a65ed86c36f7dd6125fe49766e8386c845023d9e213916ca92c9dfdd56e2babf3 + languageName: node + linkType: hard + "jsesc@npm:~0.5.0": version: 0.5.0 resolution: "jsesc@npm:0.5.0" @@ -23755,6 +28203,23 @@ __metadata: languageName: node linkType: hard +"json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": "npm:^2.0.0" + eth-rpc-errors: "npm:^4.0.2" + checksum: 10/00d5b5228e90f126dd52176598db6e5611d295d3a3f7be21254c30c1b6555811260ef2ec2df035cd8e583e4b12096259da721e29f4ea2affb615f7dfc960a6a6 + languageName: node + linkType: hard + +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": + version: 1.0.1 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: 10/fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -23944,6 +28409,18 @@ __metadata: languageName: node linkType: hard +"keccak@npm:^3.0.3": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: "npm:^2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + readable-stream: "npm:^3.6.0" + checksum: 10/45478bb0a57e44d0108646499b8360914b0fbc8b0e088f1076659cb34faaa9eb829c40f6dd9dadb3460bb86cc33153c41fed37fe5ce09465a60e71e78c23fa55 + languageName: node + linkType: hard + "keyv@npm:^4.0.0": version: 4.5.2 resolution: "keyv@npm:4.5.2" @@ -23962,6 +28439,13 @@ __metadata: languageName: node linkType: hard +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: 10/e652448bc915f9c21b9916678ed58f5314c831f0a284d190a340c0370296c71918e0cdc1156a17b12d1993941b302f0881e23fb9c395079e2065a7d2f33d0199 + languageName: node + linkType: hard + "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -24272,6 +28756,35 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^1.9.0": + version: 1.9.0 + resolution: "listhen@npm:1.9.0" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + "@parcel/watcher-wasm": "npm:^2.4.1" + citty: "npm:^0.1.6" + clipboardy: "npm:^4.0.0" + consola: "npm:^3.2.3" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + get-port-please: "npm:^3.1.2" + h3: "npm:^1.12.0" + http-shutdown: "npm:^1.2.2" + jiti: "npm:^2.1.2" + mlly: "npm:^1.7.1" + node-forge: "npm:^1.3.1" + pathe: "npm:^1.1.2" + std-env: "npm:^3.7.0" + ufo: "npm:^1.5.4" + untun: "npm:^0.1.3" + uqr: "npm:^0.1.2" + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: 10/72b869c8604301352c5d5825a7737705f0df2ce1795af8e779b6f956ba71302e13b12b2d35142687fb4e1e8ccc2747e2be3c9cbf20f7f96b73f897881aa3c384 + languageName: node + linkType: hard + "listr2@npm:^4.0.5": version: 4.0.5 resolution: "listr2@npm:4.0.5" @@ -24293,6 +28806,37 @@ __metadata: languageName: node linkType: hard +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.1.0" + "@lit/reactive-element": "npm:^1.3.0" + lit-html: "npm:^2.8.0" + checksum: 10/7968e7f3ce3994911f27c4c54acc956488c91d8af81677cce3d6f0c2eaea45cceb79b064077159392238d6e43d46015a950269db9914fea8913566aacb17eaa1 + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + checksum: 10/3503e55e2927c2ff94773cf041fc4128f92291869c9192f36eacb7f95132d11f6b329e5b910ab60a4456349cd2e6d23b33d83291b24d557bcd6b904d6314ac1a + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": "npm:^1.6.0" + lit-element: "npm:^3.3.0" + lit-html: "npm:^2.8.0" + checksum: 10/aa64c1136b855ba328d41157dba67657d480345aeec3c1dd829abeb67719d759c9ff2ade9903f9cfb4f9d012b16087034aaa5b33f1182e70c615765562e3251b + languageName: node + linkType: hard + "load-yaml-file@npm:^0.2.0": version: 0.2.0 resolution: "load-yaml-file@npm:0.2.0" @@ -24392,6 +28936,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 + languageName: node + linkType: hard + "lodash.memoize@npm:4.x": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -24406,6 +28957,13 @@ __metadata: languageName: node linkType: hard +"lodash.mergewith@npm:4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: 10/aea75a4492541a4902ac7e551dc6c54b722da0c187f84385d02e8fc33a7ae3454b837822446e5f63fcd5ad1671534ea408740b776670ea4d9c7890b10105fce0 + languageName: node + linkType: hard + "lodash.startcase@npm:^4.4.0": version: 4.4.0 resolution: "lodash.startcase@npm:4.4.0" @@ -24522,7 +29080,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.2.0": +"lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a @@ -24760,6 +29318,15 @@ __metadata: languageName: node linkType: hard +"media-query-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "media-query-parser@npm:2.0.2" + dependencies: + "@babel/runtime": "npm:^7.12.5" + checksum: 10/9dff3ed135149944717a8687567f4fda1d39d28637f265c6ce7efe5ed55cd88ed49136c912ee0c7f3a6e5debc50b1ff969db609d862318f1af97f48752b08b0b + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -24834,6 +29401,15 @@ __metadata: languageName: node linkType: hard +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: "npm:^2.1.0" + checksum: 10/d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -24882,6 +29458,13 @@ __metadata: languageName: node linkType: hard +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 10/a7ab07d25e28ec4ae492ce4542ea9b06eee85538742b3b1263b247366ee8872f2c5ce9c8651138b2f1d22c8212f691a7b8b5384fe86ead5aff1852e211f1c035 + languageName: node + linkType: hard + "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -25239,6 +29822,18 @@ __metadata: languageName: node linkType: hard +"mipd@npm:0.0.7": + version: 0.0.7 + resolution: "mipd@npm:0.0.7" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/c14dffef0ef7a3e71469aee553f5735f4a6a9f9a2b47ca02798040f2e006261c2e7e8b26ee0dc56a815c04d5612eb4be1eed474e7bb4e496eb0f5ada2fe1d2e7 + languageName: node + linkType: hard + "mixme@npm:^0.5.1": version: 0.5.10 resolution: "mixme@npm:0.5.10" @@ -25314,6 +29909,13 @@ __metadata: languageName: node linkType: hard +"mobx@npm:^6.1.7": + version: 6.13.5 + resolution: "mobx@npm:6.13.5" + checksum: 10/1b0842ae4f3d7319a532ee5fcb29d4ccde714248af9111e7c375bed4adbe49c4535c6383fd14933c4e7ec022c0b730deb55e32344dcfad025c711435b3e21c42 + languageName: node + linkType: hard + "mocha@npm:7.1.2": version: 7.1.2 resolution: "mocha@npm:7.1.2" @@ -25423,6 +30025,13 @@ __metadata: languageName: node linkType: hard +"modern-ahocorasick@npm:^1.0.0": + version: 1.0.1 + resolution: "modern-ahocorasick@npm:1.0.1" + checksum: 10/ec83479f406511f37a966d66ce1c2b1701bb4a2cc2aabbbc257001178c9fbc48ce748c88eb10dfe72ba8b7f991a0bc7f1fa14683f444685edd1a9eeb32ecbc1e + languageName: node + linkType: hard + "module-error@npm:^1.0.1, module-error@npm:^1.0.2": version: 1.0.2 resolution: "module-error@npm:1.0.2" @@ -25430,6 +30039,20 @@ __metadata: languageName: node linkType: hard +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": "npm:^10.15.1" + "@motionone/dom": "npm:^10.16.2" + "@motionone/svelte": "npm:^10.16.2" + "@motionone/types": "npm:^10.15.1" + "@motionone/utils": "npm:^10.15.1" + "@motionone/vue": "npm:^10.16.2" + checksum: 10/2470f12b97371eb876337b355ad158c545622b2cc7c83b0ba540d2c02afedb49990e78898e520b8f74cccc9ecf11d366ae005a35c60e92178fadd7434860a966 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -25451,7 +30074,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -25497,6 +30120,13 @@ __metadata: languageName: node linkType: hard +"multiformats@npm:^9.4.2": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: 10/ad55c7d480d22f4258a68fd88aa2aab744fe0cb1e68d732fc886f67d858b37e3aa6c2cec12b2960ead7730d43be690931485238569952d8a3d7f90fdc726c652 + languageName: node + linkType: hard + "multihashes@npm:^0.4.15, multihashes@npm:~0.4.15": version: 0.4.21 resolution: "multihashes@npm:0.4.21" @@ -25546,6 +30176,15 @@ __metadata: languageName: node linkType: hard +"nan@npm:^2.13.2": + version: 2.22.0 + resolution: "nan@npm:2.22.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ab165ba910e549fcc21fd561a33f534d86e81ae36c97b1019dcfe506b09692ff867c97794a54b49c9a83b8b485f529f0f58d24966c3a11863c97dc70814f4d50 + languageName: node + linkType: hard + "nan@npm:^2.14.0": version: 2.16.0 resolution: "nan@npm:2.16.0" @@ -25594,6 +30233,13 @@ __metadata: languageName: node linkType: hard +"napi-wasm@npm:^1.1.0": + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10/5cad19c3ba4c8b176453149542ea72f156be5db6d249611a76537833381f5cec802ed4d7ae5c3f7c0ef69d439c037f7247bbae7db711ed84f915be2a9fc43bb4 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -25642,6 +30288,17 @@ __metadata: languageName: node linkType: hard +"nock@npm:13.5.4": + version: 13.5.4 + resolution: "nock@npm:13.5.4" + dependencies: + debug: "npm:^4.1.0" + json-stringify-safe: "npm:^5.0.1" + propagate: "npm:^2.0.0" + checksum: 10/75bad391bae4efb81b742734af5f2d87309cd93d3ca6b78372fd37946d78ccb254d79104676619866915e6734abfc1b00fee2aa42073a4843ca3c746aad35a4d + languageName: node + linkType: hard + "node-abi@npm:^2.18.0, node-abi@npm:^2.21.0, node-abi@npm:^2.7.0": version: 2.30.1 resolution: "node-abi@npm:2.30.1" @@ -25678,6 +30335,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 + languageName: node + linkType: hard + "node-dir@npm:^0.1.17": version: 0.1.17 resolution: "node-dir@npm:0.1.17" @@ -25706,7 +30372,7 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^1.6.3": +"node-fetch-native@npm:^1.6.3, node-fetch-native@npm:^1.6.4": version: 1.6.4 resolution: "node-fetch-native@npm:1.6.4" checksum: 10/39c4c6d0c2a4bed1444943e1647ad0d79eb6638cf159bc37dffeafd22cffcf6a998e006aa1f3dd1d9d2258db7d78dee96b44bee4ba0bbaf0440ed348794f2543 @@ -25741,7 +30407,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1": +"node-forge@npm:^1, node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d @@ -26031,6 +30697,17 @@ __metadata: languageName: node linkType: hard +"obj-multiplex@npm:^1.0.0": + version: 1.0.0 + resolution: "obj-multiplex@npm:1.0.0" + dependencies: + end-of-stream: "npm:^1.4.0" + once: "npm:^1.4.0" + readable-stream: "npm:^2.3.3" + checksum: 10/6bdcb7d48a1cd4458a7ff0be0b3c1dc58e8e9e6504f937c10b1eac096a3d459b85d7ba32bdd9a45382bb238e245eb42ebcd91430c72f04b0a57c97f846f2d06f + languageName: node + linkType: hard + "object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -26186,6 +30863,17 @@ __metadata: languageName: node linkType: hard +"ofetch@npm:^1.4.1": + version: 1.4.1 + resolution: "ofetch@npm:1.4.1" + dependencies: + destr: "npm:^2.0.3" + node-fetch-native: "npm:^1.6.4" + ufo: "npm:^1.5.4" + checksum: 10/329ecd5595eff6da090c728e66f4223ad7ba5c2c309446f3707245c1b213da47dfd1eb1740f26b3da9e31ed7b7a903733bdaae85187b714514da865a0c5a4a9c + languageName: node + linkType: hard + "ohash@npm:^1.1.3": version: 1.1.3 resolution: "ohash@npm:1.1.3" @@ -26193,6 +30881,20 @@ __metadata: languageName: node linkType: hard +"ohash@npm:^1.1.4": + version: 1.1.4 + resolution: "ohash@npm:1.1.4" + checksum: 10/b11445234e59c9c2b00f357f8f00b6ba00e14c84fc0a232cdc14eb1d80066479b09d27af0201631e84b7a15ba7c4a1939f4cc47f2030e9bf83c9e8afc3ff7dfd + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: 10/36a3a1baea964dc01088884e9d87824cc1a3304ae702e7c688bdb5deec61fbb79325977dd6cba5988f60ad40fedc6ef31ec705adf65b4b042bc0d2686186c0dd + languageName: node + linkType: hard + "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -26323,6 +31025,26 @@ __metadata: languageName: node linkType: hard +"ox@npm:0.1.2": + version: 0.1.2 + resolution: "ox@npm:0.1.2" + dependencies: + "@adraffy/ens-normalize": "npm:^1.10.1" + "@noble/curves": "npm:^1.6.0" + "@noble/hashes": "npm:^1.5.0" + "@scure/bip32": "npm:^1.5.0" + "@scure/bip39": "npm:^1.4.0" + abitype: "npm:^1.0.6" + eventemitter3: "npm:5.0.1" + peerDependencies: + typescript: ">=5.4.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/cba00f13289599ff03cee3dbc19167c1d0f01829379d119f962b4e951ee2bf0d14491c7a45974e6a2a745117b13b22e9e4131d285e1f5247ea4e1cbc43c5c3d8 + languageName: node + linkType: hard + "p-cancelable@npm:^0.3.0": version: 0.3.0 resolution: "p-cancelable@npm:0.3.0" @@ -26760,6 +31482,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10/668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77 + languageName: node + linkType: hard + "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -26767,6 +31496,23 @@ __metadata: languageName: node linkType: hard +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 10/443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: "npm:^4.1.2" + split2: "npm:^4.0.0" + checksum: 10/d304a104e5cb0c3fef62ea544a4a39bf2472a602cdd7ddb136b0671b9c324ad93fa7888825c4cf33e624802436e897081ba92440f40518b9f2dbdbc0c889e409 + languageName: node + linkType: hard + "pino-abstract-transport@npm:v1.1.0": version: 1.1.0 resolution: "pino-abstract-transport@npm:1.1.0" @@ -26777,6 +31523,13 @@ __metadata: languageName: node linkType: hard +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 10/cec586f9634ef0e6582f62bc8fc5ca5b6e5e11ab88fe3950c66fb0fd5d6690f66bc39cd3f27216b925d2963ad5c3bba415718819ac20ebe0390c7d056cbfea1b + languageName: node + linkType: hard + "pino-std-serializers@npm:^6.0.0": version: 6.2.2 resolution: "pino-std-serializers@npm:6.2.2" @@ -26784,6 +31537,27 @@ __metadata: languageName: node linkType: hard +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.0.0" + on-exit-leak-free: "npm:^0.2.0" + pino-abstract-transport: "npm:v0.5.0" + pino-std-serializers: "npm:^4.0.0" + process-warning: "npm:^1.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.1.0" + safe-stable-stringify: "npm:^2.1.0" + sonic-boom: "npm:^2.2.1" + thread-stream: "npm:^0.15.1" + bin: + pino: bin.js + checksum: 10/1c7b4b52fea76e0bc5d8b1190a0fee24279cb16d76fdb5833b32b64256fd8a94d641574b850faba5be72514f04045206b6d902a9a3f5ceae2a4296687088e073 + languageName: node + linkType: hard + "pino@npm:^8.19.0": version: 8.19.0 resolution: "pino@npm:8.19.0" @@ -26868,6 +31642,13 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 10/345781644740779752505af2fea3e9043f6c7cc349b18e1fb8842796360d1624791f0c24d33c0f27b05658373f90ffaa177a849e932e5fea1f540cef3975f3c9 + languageName: node + linkType: hard + "polished@npm:^4.2.2": version: 4.3.1 resolution: "polished@npm:4.3.1" @@ -26877,6 +31658,13 @@ __metadata: languageName: node linkType: hard +"pony-cause@npm:^2.1.10": + version: 2.1.11 + resolution: "pony-cause@npm:2.1.11" + checksum: 10/ed7d0bb6e3e69f753080bf736b71f40e6ae4c13ec0c8c473ff73345345c088819966fdd68a62ad7482d464bf41176cf9421f5f63715d1a4532005eedc099db55 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -26976,6 +31764,13 @@ __metadata: languageName: node linkType: hard +"preact@npm:^10.16.0, preact@npm:^10.24.2": + version: 10.24.3 + resolution: "preact@npm:10.24.3" + checksum: 10/e9c4c901a4ddd475a1072355b5c6c944b05797445e0d68f317ad0dbc976b831523573693ea75d2e12e7902042e3729af435377816d25558bf693ecf6b516c707 + languageName: node + linkType: hard + "prebuild-install@npm:^5.3.4": version: 5.3.6 resolution: "prebuild-install@npm:5.3.6" @@ -27140,6 +31935,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: 10/8736d11d8d71c349d176e210305e84d74b13af06efb3c779377b056bfd608257d1e4e32b8fbbf90637c900f0313e40f7c9f583140884f667a21fc10a869b840c + languageName: node + linkType: hard + "process-warning@npm:^3.0.0": version: 3.0.0 resolution: "process-warning@npm:3.0.0" @@ -27206,7 +32008,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -27217,6 +32019,13 @@ __metadata: languageName: node linkType: hard +"propagate@npm:^2.0.0": + version: 2.0.1 + resolution: "propagate@npm:2.0.1" + checksum: 10/8c761c16e8232f82f6d015d3e01e8bd4109f47ad804f904d950f6fe319813b448ca112246b6bfdc182b400424b155b0b7c4525a9bb009e6fa950200157569c14 + languageName: node + linkType: hard + "proper-lockfile@npm:^4.1.1": version: 4.1.2 resolution: "proper-lockfile@npm:4.1.2" @@ -27264,7 +32073,7 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^6.8.8": +"protobufjs@npm:^6.11.2, protobufjs@npm:^6.8.8": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" dependencies: @@ -27318,6 +32127,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: 10/64b6277d08d89f0b2c468a84decf43f82a4e88da7075651e6adebc69d1b87fadc17cfeb43c024c00b65faa3f0908f7ac1e61f5f6849a404a547a742e6aa527a6 + languageName: node + linkType: hard + "proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -27446,6 +32262,58 @@ __metadata: languageName: node linkType: hard +"qr-code-styling@npm:^1.6.0-rc.1": + version: 1.8.4 + resolution: "qr-code-styling@npm:1.8.4" + dependencies: + qrcode-generator: "npm:^1.4.4" + checksum: 10/ddc193ac15c16bed24a7a27eb15e14ba59efa48bad390a116802f57cb537905238a23fe4a06488951c4f107f0c7271950ebd58ce7f30cfd9ee07c4fea32bebff + languageName: node + linkType: hard + +"qrcode-generator@npm:^1.4.4": + version: 1.4.4 + resolution: "qrcode-generator@npm:1.4.4" + checksum: 10/65b2bba237d1f230eba0d08ae4267d04f326859c2265775ade99191be1b522158b623fcc0b613bbfc9d4edbbafb928fc41c66d61053b333f2eb0bcedb2ebadca + languageName: node + linkType: hard + +"qrcode-terminal-nooctal@npm:^0.12.1": + version: 0.12.1 + resolution: "qrcode-terminal-nooctal@npm:0.12.1" + bin: + qrcode-terminal: bin/qrcode-terminal.js + checksum: 10/8f437f9e95d8211c3b4eb3de572abd8e9695efa51b327e68e843fcbc2f017e32d6407caf4d8a8dca64d2d1270cf1cc1b16ebb6f2a69a1f891df430e8efdef66a + languageName: node + linkType: hard + +"qrcode@npm:1.5.3": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: "npm:^1.0.1" + encode-utf8: "npm:^1.0.3" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: 10/823642d59a81ba5f406a1e78415fee37fd53856038f49a85c4ca7aa32ba6b8505ab059a832718ac16612bed75aa2a18584faae38cf3c25e2c90fb19b8c55fe46 + languageName: node + linkType: hard + +"qrcode@npm:1.5.4, qrcode@npm:^1.5.4": + version: 1.5.4 + resolution: "qrcode@npm:1.5.4" + dependencies: + dijkstrajs: "npm:^1.0.1" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: 10/9a1b61760e4ea334545a0f54bbc11c537aba0a17cf52cab9fa1b07f8a1337eed0bc6f7fde41b197f2c82c249bc48728983bfaf861bb7ecb29dc597b2ae33c424 + languageName: node + linkType: hard + "qs@npm:6.10.3": version: 6.10.3 resolution: "qs@npm:6.10.3" @@ -27498,6 +32366,18 @@ __metadata: languageName: node linkType: hard +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: "npm:^0.2.2" + filter-obj: "npm:^1.1.0" + split-on-first: "npm:^1.0.0" + strict-uri-encode: "npm:^2.0.0" + checksum: 10/3b6f2c167e76ca4094c5f1a9eb276efcbb9ebfd8b1a28c413f3c4e4e7d6428c8187bf46c8cbc9f92a229369dd0015de10a7fd712c8cee98d5d84c2ac6140357e + languageName: node + linkType: hard + "query-string@npm:^5.0.1": version: 5.1.1 resolution: "query-string@npm:5.1.1" @@ -27544,6 +32424,23 @@ __metadata: languageName: node linkType: hard +"radix3@npm:^1.1.2": + version: 1.1.2 + resolution: "radix3@npm:1.1.2" + checksum: 10/5ed01a8e4b753e325c6ecb01d993de77f690e548ef9e149e7dc403ee7b109c2cb41e3d09bc3ce004d872c67c8dca1d556dbf7808b1ac7df9f86994e57d757557 + languageName: node + linkType: hard + +"rainbow-sprinkles@npm:^0.17.3": + version: 0.17.3 + resolution: "rainbow-sprinkles@npm:0.17.3" + peerDependencies: + "@vanilla-extract/css": ^1 + "@vanilla-extract/dynamic": ^2 + checksum: 10/63c668a58032a6914974e4e13c587338f70c1cd76d388ba133f920112c7f6e002b3ed6d98f6dc2c045f5522eafd78dc58aa6103b520150dcb8ca23b3b8744ce0 + languageName: node + linkType: hard + "ramda@npm:0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" @@ -27605,6 +32502,66 @@ __metadata: languageName: node linkType: hard +"react-aria@npm:^3.34.3": + version: 3.35.1 + resolution: "react-aria@npm:3.35.1" + dependencies: + "@internationalized/string": "npm:^3.2.4" + "@react-aria/breadcrumbs": "npm:^3.5.18" + "@react-aria/button": "npm:^3.10.1" + "@react-aria/calendar": "npm:^3.5.13" + "@react-aria/checkbox": "npm:^3.14.8" + "@react-aria/color": "npm:^3.0.1" + "@react-aria/combobox": "npm:^3.10.5" + "@react-aria/datepicker": "npm:^3.11.4" + "@react-aria/dialog": "npm:^3.5.19" + "@react-aria/dnd": "npm:^3.7.4" + "@react-aria/focus": "npm:^3.18.4" + "@react-aria/gridlist": "npm:^3.9.5" + "@react-aria/i18n": "npm:^3.12.3" + "@react-aria/interactions": "npm:^3.22.4" + "@react-aria/label": "npm:^3.7.12" + "@react-aria/link": "npm:^3.7.6" + "@react-aria/listbox": "npm:^3.13.5" + "@react-aria/menu": "npm:^3.15.5" + "@react-aria/meter": "npm:^3.4.17" + "@react-aria/numberfield": "npm:^3.11.8" + "@react-aria/overlays": "npm:^3.23.4" + "@react-aria/progress": "npm:^3.4.17" + "@react-aria/radio": "npm:^3.10.9" + "@react-aria/searchfield": "npm:^3.7.10" + "@react-aria/select": "npm:^3.14.11" + "@react-aria/selection": "npm:^3.20.1" + "@react-aria/separator": "npm:^3.4.3" + "@react-aria/slider": "npm:^3.7.13" + "@react-aria/ssr": "npm:^3.9.6" + "@react-aria/switch": "npm:^3.6.9" + "@react-aria/table": "npm:^3.15.5" + "@react-aria/tabs": "npm:^3.9.7" + "@react-aria/tag": "npm:^3.4.7" + "@react-aria/textfield": "npm:^3.14.10" + "@react-aria/tooltip": "npm:^3.7.9" + "@react-aria/utils": "npm:^3.25.3" + "@react-aria/visually-hidden": "npm:^3.8.17" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/eb63ad498582374f1708c6691faf08ecaa887da02f95277e858b384bed7d4a2fbca0c24adf1d16c0929ca965163bbd5c73cea5251d4b834b221a65313760f89c + languageName: node + linkType: hard + +"react-clientside-effect@npm:^1.2.6": + version: 1.2.6 + resolution: "react-clientside-effect@npm:1.2.6" + dependencies: + "@babel/runtime": "npm:^7.12.13" + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 10/45411b2e1d5e77ce8586ef0fa6cef2d394da4660af90a2c0f044a2170a0b601ac023ac2bc62d6109201969329a8dbd13bd1a4bd4027be3980e4fde7c6a48bee3 + languageName: node + linkType: hard + "react-colorful@npm:^5.1.2": version: 5.6.1 resolution: "react-colorful@npm:5.6.1" @@ -27679,6 +32636,33 @@ __metadata: languageName: node linkType: hard +"react-fast-compare@npm:3.2.2": + version: 3.2.2 + resolution: "react-fast-compare@npm:3.2.2" + checksum: 10/a6826180ba75cefba1c8d3ac539735f9b627ca05d3d307fe155487f5d0228d376dac6c9708d04a283a7b9f9aee599b637446635b79c8c8753d0b4eece56c125c + languageName: node + linkType: hard + +"react-focus-lock@npm:^2.9.6": + version: 2.13.2 + resolution: "react-focus-lock@npm:2.13.2" + dependencies: + "@babel/runtime": "npm:^7.0.0" + focus-lock: "npm:^1.3.5" + prop-types: "npm:^15.6.2" + react-clientside-effect: "npm:^1.2.6" + use-callback-ref: "npm:^1.3.2" + use-sidecar: "npm:^1.1.2" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/a169e060e2a2457062489fb5e48811f334823b3878a4599162878c93c683f47807407044009c3886da07f2adaa9d7325cbb4fafc104a7f8cd4d1dad7325304f8 + languageName: node + linkType: hard + "react-is@npm:18.1.0": version: 18.1.0 resolution: "react-is@npm:18.1.0" @@ -27686,7 +32670,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1": +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10/5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf @@ -27707,6 +32691,19 @@ __metadata: languageName: node linkType: hard +"react-native-webview@npm:^11.26.0": + version: 11.26.1 + resolution: "react-native-webview@npm:11.26.1" + dependencies: + escape-string-regexp: "npm:2.0.0" + invariant: "npm:2.2.4" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/d64123c73e7795096434135a1bec2aef5caf71a4c1c95b1416cc528bc55f5c4a89df2d311ad3637594f120e864b5798e2c4ea4eb7153bf938ad167c54e7a7e61 + languageName: node + linkType: hard + "react-refresh@npm:^0.14.0": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" @@ -27714,7 +32711,7 @@ __metadata: languageName: node linkType: hard -"react-remove-scroll-bar@npm:^2.3.3": +"react-remove-scroll-bar@npm:^2.3.3, react-remove-scroll-bar@npm:^2.3.6": version: 2.3.6 resolution: "react-remove-scroll-bar@npm:2.3.6" dependencies: @@ -27749,6 +32746,59 @@ __metadata: languageName: node linkType: hard +"react-remove-scroll@npm:2.6.0, react-remove-scroll@npm:^2.5.7": + version: 2.6.0 + resolution: "react-remove-scroll@npm:2.6.0" + dependencies: + react-remove-scroll-bar: "npm:^2.3.6" + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.1.0" + use-callback-ref: "npm:^1.3.0" + use-sidecar: "npm:^1.1.2" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/9fac79e1c2ed2c85729bfe82f61ef4ae5ce51f478736a13892a9a11e05cbd4e9599f9f0e012cb5fc0719e18dc1dd687ab61f516193228615df636db8b851245e + languageName: node + linkType: hard + +"react-stately@npm:^3.32.2": + version: 3.33.0 + resolution: "react-stately@npm:3.33.0" + dependencies: + "@react-stately/calendar": "npm:^3.5.5" + "@react-stately/checkbox": "npm:^3.6.9" + "@react-stately/collections": "npm:^3.11.0" + "@react-stately/color": "npm:^3.8.0" + "@react-stately/combobox": "npm:^3.10.0" + "@react-stately/data": "npm:^3.11.7" + "@react-stately/datepicker": "npm:^3.10.3" + "@react-stately/dnd": "npm:^3.4.3" + "@react-stately/form": "npm:^3.0.6" + "@react-stately/list": "npm:^3.11.0" + "@react-stately/menu": "npm:^3.8.3" + "@react-stately/numberfield": "npm:^3.9.7" + "@react-stately/overlays": "npm:^3.6.11" + "@react-stately/radio": "npm:^3.10.8" + "@react-stately/searchfield": "npm:^3.5.7" + "@react-stately/select": "npm:^3.6.8" + "@react-stately/selection": "npm:^3.17.0" + "@react-stately/slider": "npm:^3.5.8" + "@react-stately/table": "npm:^3.12.3" + "@react-stately/tabs": "npm:^3.6.10" + "@react-stately/toggle": "npm:^3.7.8" + "@react-stately/tooltip": "npm:^3.4.13" + "@react-stately/tree": "npm:^3.8.5" + "@react-types/shared": "npm:^3.25.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 + checksum: 10/69da664db3427d19aa8802fa0b7ca5fd49dad2f63e670ae00cefc2398b773568e5a72a0b909e51b64ea2a67dfd4e376ced324b096f159496bc571c5e6a2c0ec9 + languageName: node + linkType: hard + "react-style-singleton@npm:^2.2.1": version: 2.2.1 resolution: "react-style-singleton@npm:2.2.1" @@ -27832,7 +32882,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.3.3, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -27862,7 +32912,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.0": +"readable-stream@npm:^3.1.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -27884,7 +32934,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^4.0.0": +"readable-stream@npm:^3.6.2 || ^4.4.2, readable-stream@npm:^4.0.0": version: 4.5.2 resolution: "readable-stream@npm:4.5.2" dependencies: @@ -27922,6 +32972,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 10/0ba1c440dc9b7777d35a97f755312bf236be0847249f76cc9789c5c08d141f5d80b8564888e6a94ed0253fabf597b6892f8502c4e5658fb98f88642633a39723 + languageName: node + linkType: hard + "real-require@npm:^0.2.0": version: 0.2.0 resolution: "real-require@npm:0.2.0" @@ -28310,7 +33367,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.8": +"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -28365,7 +33422,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -28843,6 +33900,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^2.1.0": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c + languageName: node + linkType: hard + "safe-stable-stringify@npm:^2.3.1": version: 2.4.3 resolution: "safe-stable-stringify@npm:2.4.3" @@ -28998,7 +34062,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.5.1": +"semver@npm:^7.3.8, semver@npm:^7.5.0, semver@npm:^7.5.1": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -29159,7 +34223,7 @@ __metadata: languageName: node linkType: hard -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.11, sha.js@npm:^2.4.8": version: 2.4.11 resolution: "sha.js@npm:2.4.11" dependencies: @@ -29414,6 +34478,28 @@ __metadata: languageName: node linkType: hard +"socket.io-client@npm:^4.5.1": + version: 4.8.1 + resolution: "socket.io-client@npm:4.8.1" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.2" + engine.io-client: "npm:~6.6.1" + socket.io-parser: "npm:~4.2.4" + checksum: 10/7480cf1ab30eba371a96dd1ce2ce9018dcbeaf81035a066fb89d99df0d0a6388b05840c92d970317c739956b68b28b0f4833f3b18e460a24eef557b9bca127c1 + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + checksum: 10/4be500a9ff7e79c50ec25af11048a3ed34b4c003a9500d656786a1e5bceae68421a8394cf3eb0aa9041f85f36c1a9a737617f4aee91a42ab4ce16ffb2aa0c89c + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -29682,6 +34768,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10/05351d9f44bac59b2a4ab42ee22bf81b8c3bbd22db20183d78d5f2067557eb623e0eaf93b2bc0f8417bee92ca372bc26e0d83e3bdb0ffebcc33738ac1c191876 + languageName: node + linkType: hard + "sonic-boom@npm:^3.7.0": version: 3.8.0 resolution: "sonic-boom@npm:3.8.0" @@ -29718,7 +34813,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.0": +"source-map@npm:^0.5.0, source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 10/9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 @@ -29799,6 +34894,13 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 10/16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + "split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -29892,6 +34994,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.7.0": + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: 10/034176196cfcaaab16dbdd96fc9e925a9544799fb6dc5a3e36fe43270f3a287c7f779d785b89edaf22cef2b5f1dcada2aae67430b8602e785ee74bdb3f671768 + languageName: node + linkType: hard + "stealthy-require@npm:^1.1.1": version: 1.1.1 resolution: "stealthy-require@npm:1.1.1" @@ -29973,6 +35082,13 @@ __metadata: languageName: node linkType: hard +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: 10/eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -30325,6 +35441,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 10/58359185275ef1f39c339ae94e598168aa6bb789f6cf0d52e726c1e7087a94e9c17f0385a28d34483dec1ffc2c75670ec714dc5603d99c3124ec83bc2b0a0f42 + languageName: node + linkType: hard + "sucrase@npm:^3.32.0": version: 3.35.0 resolution: "sucrase@npm:3.35.0" @@ -30350,6 +35473,13 @@ __metadata: languageName: node linkType: hard +"superstruct@npm:^1.0.3": + version: 1.0.4 + resolution: "superstruct@npm:1.0.4" + checksum: 10/9b3fd70a08c5ad3ea78b5c6b7ab90d31dde71af10448208d296c3d29ba2e55dfd817dfef75957163ee032163d04c4b2e0cb2fddff30313516aa60f748c1a48da + languageName: node + linkType: hard + "superstruct@npm:^2.0.2": version: 2.0.2 resolution: "superstruct@npm:2.0.2" @@ -30479,6 +35609,13 @@ __metadata: languageName: node linkType: hard +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: 10/ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + "tabbable@npm:^6.0.0": version: 6.2.0 resolution: "tabbable@npm:6.2.0" @@ -30764,6 +35901,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: "npm:^0.1.0" + checksum: 10/ca0a4f5bf45db88b48b41af0299455eaa8f01dd3ef8279e7ba6909c295b3ab79ddf576b595cbbceb4dbdf4012b17c6449805092926163fcbf30ac1604cb595b1 + languageName: node + linkType: hard + "thread-stream@npm:^2.0.0": version: 2.4.1 resolution: "thread-stream@npm:2.4.1" @@ -30804,6 +35950,20 @@ __metadata: languageName: node linkType: hard +"tiny-secp256k1@npm:^1.1.3": + version: 1.1.7 + resolution: "tiny-secp256k1@npm:1.1.7" + dependencies: + bindings: "npm:^1.3.0" + bn.js: "npm:^4.11.8" + create-hmac: "npm:^1.1.7" + elliptic: "npm:^6.4.0" + nan: "npm:^2.13.2" + node-gyp: "npm:latest" + checksum: 10/588393c36df18b2819787fc91616e1fcb930509307eecc460ad45c7011f99f900eea28493a36eb203c3933ae76f737e6a1b978fa0b8a391fcc5dd7b64d57c572 + languageName: node + linkType: hard + "tinybench@npm:^2.5.1": version: 2.9.0 resolution: "tinybench@npm:2.9.0" @@ -30864,6 +36024,13 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: 10/9a0ed0ecbaac72b4944888dacd79fe0a55eeea76120a4c7e46b3bb3d85b24f086e90560bb22f5a965654a25ab43d79ec47dfdb3f1850ba740b14c5a50abc7040 + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -31056,27 +36223,34 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.11.1, tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:1.14.1, tslib@npm:^1.11.1, tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 10/52109bb681f8133a2e58142f11a50e05476de4f075ca906d13b596ae5f7f12d30c482feb0bff167ae01cfc84c5803e575a307d47938999246f5a49d174fc558c +"tslib@npm:2, tslib@npm:^2.0.3": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:2.4.0, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" checksum: 10/d8379e68b36caf082c1905ec25d17df8261e1d68ddc1abfd6c91158a064f6e4402039ae7c02cf4c81d12e3a2a2c7cd8ea2f57b233eb80136a2e3e7279daf2911 languageName: node linkType: hard +"tslib@npm:^2.0.0, tslib@npm:^2.0.1": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 10/52109bb681f8133a2e58142f11a50e05476de4f075ca906d13b596ae5f7f12d30c482feb0bff167ae01cfc84c5803e575a307d47938999246f5a49d174fc558c + languageName: node + linkType: hard + "tslib@npm:^2.2.0": version: 2.7.0 resolution: "tslib@npm:2.7.0" @@ -31473,6 +36647,13 @@ __metadata: languageName: node linkType: hard +"typeforce@npm:^1.11.5": + version: 1.18.0 + resolution: "typeforce@npm:1.18.0" + checksum: 10/dbf98c75b1d57e56e33c1e1271d5505e67981f4e6a2e2e6e8e31160b58777fea1726160810b6c606517db16476805b7dce315926ba2d4859b9a56cab05b7a41f + languageName: node + linkType: hard + "typescript@npm:5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -31514,6 +36695,15 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.37": + version: 1.0.39 + resolution: "ua-parser-js@npm:1.0.39" + bin: + ua-parser-js: script/cli.js + checksum: 10/dd4026b6ece8a34a0d39b6de5542154c4506077d8def8647a300a29e1b3ffa0e23f5c8eeeb8101df6162b7b3eb3597d0b4adb031ae6104cbdb730d6ebc07f3c0 + languageName: node + linkType: hard + "ufo@npm:^1.5.3, ufo@npm:^1.5.4": version: 1.5.4 resolution: "ufo@npm:1.5.4" @@ -31530,6 +36720,24 @@ __metadata: languageName: node linkType: hard +"uint8arrays@npm:3.1.0": + version: 3.1.0 + resolution: "uint8arrays@npm:3.1.0" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/caf1cd6a1cdbd7c59d6c8698c06a6d603380942b5745b3fddcd1b16f7a84a4f351fb8c6ac41f4cb2c59c226bb6d954733a6e20a42dec6f3fd266a02270a5088d + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/536e70273c040484aa7d522031a9dbca1fe8c06eb58a3ace1064ba68825b4e2764d4a0b604a1c451e7b8be0986dc94f23a419cfe9334bd116716074a2d29b33d + languageName: node + linkType: hard + "ultron@npm:~1.1.0": version: 1.1.1 resolution: "ultron@npm:1.1.1" @@ -31549,6 +36757,13 @@ __metadata: languageName: node linkType: hard +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 10/0020f74b0ce34723196d8982a73bb7f40cff455a41b8f88ae146b86885f4e66e41a1241fe80a887505c3bd2c7f07ed362b6ed041968370073c40a98496e6a737 + languageName: node + linkType: hard + "undefsafe@npm:^2.0.5": version: 2.0.5 resolution: "undefsafe@npm:2.0.5" @@ -31579,6 +36794,19 @@ __metadata: languageName: node linkType: hard +"unenv@npm:^1.10.0": + version: 1.10.0 + resolution: "unenv@npm:1.10.0" + dependencies: + consola: "npm:^3.2.3" + defu: "npm:^6.1.4" + mime: "npm:^3.0.0" + node-fetch-native: "npm:^1.6.4" + pathe: "npm:^1.1.2" + checksum: 10/23198e150fd3b4db4d7abe444b75ee05a0d36768bd6d94a6aaf5dca830db82e707ccc0f6cca22671327b62c5cd85ada08d4665bf7652afec9de0bdc7a4546249 + languageName: node + linkType: hard + "unenv@npm:unenv-nightly@2.0.0-1724863496.70db6f1": version: 2.0.0-1724863496.70db6f1 resolution: "unenv-nightly@npm:2.0.0-1724863496.70db6f1" @@ -31717,6 +36945,65 @@ __metadata: languageName: node linkType: hard +"unstorage@npm:^1.9.0": + version: 1.13.1 + resolution: "unstorage@npm:1.13.1" + dependencies: + anymatch: "npm:^3.1.3" + chokidar: "npm:^3.6.0" + citty: "npm:^0.1.6" + destr: "npm:^2.0.3" + h3: "npm:^1.13.0" + listhen: "npm:^1.9.0" + lru-cache: "npm:^10.4.3" + node-fetch-native: "npm:^1.6.4" + ofetch: "npm:^1.4.1" + ufo: "npm:^1.5.4" + peerDependencies: + "@azure/app-configuration": ^1.7.0 + "@azure/cosmos": ^4.1.1 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^4.5.0 + "@azure/keyvault-secrets": ^4.9.0 + "@azure/storage-blob": ^12.25.0 + "@capacitor/preferences": ^6.0.2 + "@netlify/blobs": ^6.5.0 || ^7.0.0 || ^8.1.0 + "@planetscale/database": ^1.19.0 + "@upstash/redis": ^1.34.3 + "@vercel/kv": ^1.0.1 + idb-keyval: ^6.2.1 + ioredis: ^5.4.1 + 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 + checksum: 10/a5fea4f83189d222dcb95ce36d0de29b1ab2fa64122f4c4435b63e6dab8bacd630f6234b0599a505de620f719965ea3a3ce068ece759a96e19fd187e1fb9561c + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -31724,6 +37011,19 @@ __metadata: languageName: node linkType: hard +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" + dependencies: + citty: "npm:^0.1.5" + consola: "npm:^3.2.3" + pathe: "npm:^1.1.1" + bin: + untun: bin/untun.mjs + checksum: 10/6a096002ca13b8442ad1d40840088888cfaa28626eefdd132cd0fd3d3b956af121a9733b7bda32647608e278fb13332d2b72e2c319a27dc55dbc8e709a2f61d4 + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -31752,6 +37052,13 @@ __metadata: languageName: node linkType: hard +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 10/31f1fe7d7a8121a2670712234524763160985b053e7eb8af7925a131bcde0df11641e15129d988358032da603185456d08dd72b26b507897272eb9640273bfa6 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -31805,7 +37112,7 @@ __metadata: languageName: node linkType: hard -"use-callback-ref@npm:^1.3.0": +"use-callback-ref@npm:^1.3.0, use-callback-ref@npm:^1.3.2": version: 1.3.2 resolution: "use-callback-ref@npm:1.3.2" dependencies: @@ -31848,6 +37155,24 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10/a676216affc203876bd47981103f201f28c2731361bb186367e12d287a7566763213a8816910c6eb88265eccd4c230426eb783d64c373c4a180905be8820ed8e + languageName: node + linkType: hard + +"use-sync-external-store@npm:1.2.2": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10/671e9c190aab9a8374a5d468c6ba17f52c38b6fae970110bc196fc1e2b57204149aea9619be49a1bb5207fb6e51d8afd19c3bcb94afe61813fed039821461dc0 + languageName: node + linkType: hard + "utf-8-validate@npm:5.0.7": version: 5.0.7 resolution: "utf-8-validate@npm:5.0.7" @@ -31909,6 +37234,13 @@ __metadata: languageName: node linkType: hard +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10/a3c51463fc807ed04ccc8b5d0fa6e31f3dcd7a4cbd30ab4bc6d760ce5319dd493d95bf04244693daf316f97e9ab2a37741edfed8748ad38572a595398ad0fdaf + languageName: node + linkType: hard + "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -31987,6 +37319,24 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: "npm:2.5.1" + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: 10/a259f5af204b801668e019855813a8f702c9558961395bb5847f583119428b997efb9b0e6feb5d6e48a76a9b541173a10fdfdb1527a7bd14477a0e0c5beba914 + languageName: node + linkType: hard + "varint@npm:^5.0.0": version: 5.0.2 resolution: "varint@npm:5.0.2" @@ -32012,17 +37362,17 @@ __metadata: languageName: node linkType: hard -"viem@npm:^2.21.40": - version: 2.21.41 - resolution: "viem@npm:2.21.41" +"viem@npm:^2.1.1, viem@npm:^2.21.41, viem@npm:^2.21.45": + version: 2.21.45 + resolution: "viem@npm:2.21.45" dependencies: - "@adraffy/ens-normalize": "npm:1.11.0" "@noble/curves": "npm:1.6.0" "@noble/hashes": "npm:1.5.0" "@scure/bip32": "npm:1.5.0" "@scure/bip39": "npm:1.4.0" abitype: "npm:1.0.6" isows: "npm:1.0.6" + ox: "npm:0.1.2" webauthn-p256: "npm:0.0.10" ws: "npm:8.18.0" peerDependencies: @@ -32030,7 +37380,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/bd3d1426584eb319c6ab69949c188d7142f6fa14b38df5ed54c967c5d5246e4eb98a9412ab7d053ff3d649df3d0174fc57f8a1e6f2803ce3aa97be2e010500b9 + checksum: 10/93428588882620de5ed442a5a568367762d39660bdb4ff9c430d5409da1dca085a3648bf0afedb6631bb219b410e58ccabf600ed26228ab9ae73a77a1031c576 languageName: node linkType: hard @@ -32182,6 +37532,25 @@ __metadata: languageName: node linkType: hard +"wagmi@npm:^2.12.26": + version: 2.12.32 + resolution: "wagmi@npm:2.12.32" + dependencies: + "@wagmi/connectors": "npm:5.3.10" + "@wagmi/core": "npm:2.14.6" + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@tanstack/react-query": ">=5.0.0" + react: ">=18" + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/6456d32df5c7a6ed1bdde1c4512fccf6a4bc45f1cf78e44cc44f952e3a8016f7b413197e431bd4b3bfb5faab78ae79f7bab402f323e12bcaddd67cb3f5cd5c6a + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -32619,6 +37988,20 @@ __metadata: languageName: node linkType: hard +"webextension-polyfill@npm:>=0.10.0 <1.0": + version: 0.12.0 + resolution: "webextension-polyfill@npm:0.12.0" + checksum: 10/77e648b958b573ef075e75a0c180e2bbd74dee17b3145e86d21fcbb168c4999e4a311654fe634b8178997bee9b35ea5808d8d3d3e5ff2ad138f197f4f0ea75d9 + languageName: node + linkType: hard + +"webextension-polyfill@npm:^0.10.0": + version: 0.10.0 + resolution: "webextension-polyfill@npm:0.10.0" + checksum: 10/51ff30ebed4b1aa802b7f0347f05021b2fe492078bb1a597223d43995fcee96e2da8f914a2f6e36f988c1877ed5ab36ca7077f2f3ab828955151a59e4c01bf7e + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -32834,6 +38217,15 @@ __metadata: languageName: node linkType: hard +"wif@npm:^2.0.6": + version: 2.0.6 + resolution: "wif@npm:2.0.6" + dependencies: + bs58check: "npm:<3.0.0" + checksum: 10/c8d7581664532d9ab6d163ee5194a9bec71b089a6e50d54d6ec57a9bd714fcf84bc8d9f22f4cfc7c297fc6ad10b973b8e83eca5c41240163fc61f44b5154b7da + languageName: node + linkType: hard + "word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" @@ -33081,7 +38473,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.5.10": +"ws@npm:^7.5.1, ws@npm:^7.5.10": version: 7.5.10 resolution: "ws@npm:7.5.10" peerDependencies: @@ -33111,6 +38503,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:~8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/4264ae92c0b3e59c7e309001e93079b26937aab181835fb7af79f906b22cd33b6196d96556dafb4e985742dd401e99139572242e9847661fdbc96556b9e6902d + languageName: node + linkType: hard + "xhr-request-promise@npm:^0.1.2": version: 0.1.3 resolution: "xhr-request-promise@npm:0.1.3" @@ -33147,6 +38554,13 @@ __metadata: languageName: node linkType: hard +"xmlhttprequest-ssl@npm:~2.1.1": + version: 2.1.2 + resolution: "xmlhttprequest-ssl@npm:2.1.2" + checksum: 10/708a177fe41c6c8cd4ec7c04d965b4c01801d87f44383ec639be58bdc14418142969841659e0850db44feee8bec0a3d3e7d33fed22519415f3d0daab04d3f160 + languageName: node + linkType: hard + "xmlhttprequest@npm:1.8.0": version: 1.8.0 resolution: "xmlhttprequest@npm:1.8.0" @@ -33229,7 +38643,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.2": +"yaml@npm:^1.10.0, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: 10/e088b37b4d4885b70b50c9fa1b7e54bd2e27f5c87205f9deaffd1fb293ab263d9c964feadb9817a7b129a5bf30a06582cb08750f810568ecc14f3cdbabb79cb3 @@ -33342,7 +38756,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.1.0": +"yargs@npm:^15.1.0, yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: @@ -33457,6 +38871,47 @@ __metadata: languageName: node linkType: hard +"zustand@npm:5.0.0": + version: 5.0.0 + resolution: "zustand@npm:5.0.0" + peerDependencies: + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + checksum: 10/be75ef4d1b218b143314467bb9e23641231043cad2d5c3a4b2219c46d1609ee799cd8dc9acec9b23d55ec3a2a619a06616e593aea4049f3b7323938af9a33bfe + languageName: node + linkType: hard + +"zustand@npm:^4.5.5": + version: 4.5.5 + resolution: "zustand@npm:4.5.5" + dependencies: + use-sync-external-store: "npm:1.2.2" + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0.6" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 10/481b8210187b69678074a1ca51107654c2379688e90407bfcb7961e0803a259742bfd0d77171c3f07e290896ad55fe9659b3863f30d34cb2572650ead1249f25 + languageName: node + linkType: hard + "zx@npm:^8.1.4": version: 8.1.4 resolution: "zx@npm:8.1.4"