From 186663505b1ec7e54d3ac510bab2403f5b7dc17e Mon Sep 17 00:00:00 2001 From: Jason Guo <33064781+Xaroz@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:33:29 -0400 Subject: [PATCH 01/14] chore(widgets): components update (#4852) ### Description - Added new icons - Updated Modal with new props - Fixed an issue where the close icon button was not absolute positioned to the correct container in the Modal ### Drive-by changes No ### Backward compatibility Yes ### Testing Tested in warp UI --- .changeset/rare-llamas-float.md | 7 ++++ typescript/widgets/src/icons/Ellipsis.tsx | 38 +++++++++++++++++++ typescript/widgets/src/icons/Logout.tsx | 29 ++++++++++++++ typescript/widgets/src/icons/Warning.tsx | 30 +++++++++++++++ typescript/widgets/src/index.ts | 3 ++ typescript/widgets/src/layout/Modal.tsx | 27 ++++++++----- .../widgets/src/stories/IconList.stories.tsx | 22 ++++++++++- .../widgets/src/stories/Modal.stories.tsx | 15 ++++++-- 8 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 .changeset/rare-llamas-float.md create mode 100644 typescript/widgets/src/icons/Ellipsis.tsx create mode 100644 typescript/widgets/src/icons/Logout.tsx create mode 100644 typescript/widgets/src/icons/Warning.tsx diff --git a/.changeset/rare-llamas-float.md b/.changeset/rare-llamas-float.md new file mode 100644 index 000000000..337cdd5eb --- /dev/null +++ b/.changeset/rare-llamas-float.md @@ -0,0 +1,7 @@ +--- +'@hyperlane-xyz/widgets': minor +--- + +New Icons +Updated modal with new props +Updated storybook for modal and icon list 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/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/index.ts b/typescript/widgets/src/index.ts index 0762ec9da..33eea26ef 100644 --- a/typescript/widgets/src/index.ts +++ b/typescript/widgets/src/index.ts @@ -28,6 +28,7 @@ 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 { FilterIcon } from './icons/Filter.js'; export { FunnelIcon } from './icons/Funnel.js'; @@ -36,6 +37,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'; @@ -48,6 +50,7 @@ export { SwapIcon } from './icons/Swap.js'; export { TwitterIcon } from './icons/Twitter.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'; 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/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; From 4f8245a1ed8a48fd7d3f72990b05570a4ef994ac Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Thu, 14 Nov 2024 10:29:47 +0000 Subject: [PATCH 02/14] chore: apply 10% gas buffer for Arbitrum Nitro txs, some drivebys (#4854) ### Description - Applies a 10% buffer to arbitrum nitro txs, see https://discord.com/channels/935678348330434570/1306264065110310987 for context ### Drive-by changes - Some drive-bys -- imo the Display impl of HyperlaneMessage isn't useful at all and should be the same as Debug (or we should stop using the Display impl) - Updates a sealevel comment that was inaccurate as flagged by some partners - makes sure that relayer pods update when there's a configmap change ### Related issues ### Backward compatibility ### Testing --- .../agents/relayer/src/msg/pending_message.rs | 2 +- .../src/contracts/mailbox.rs | 28 +++++++++++------ .../src/contracts/validator_announce.rs | 8 ++++- rust/main/chains/hyperlane-ethereum/src/tx.rs | 31 ++++++++++++++++--- .../templates/relayer-statefulset.yaml | 1 + rust/main/hyperlane-core/src/types/message.rs | 7 +---- .../hyperlane-sealevel-token/src/processor.rs | 7 ++--- 7 files changed, 57 insertions(+), 27 deletions(-) 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/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/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-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], From 25a927de3a94fa13fbdbeef73b6d31ffd4e19df4 Mon Sep 17 00:00:00 2001 From: Danil Nemirovsky Date: Thu, 14 Nov 2024 16:56:44 +0000 Subject: [PATCH 03/14] fix: Remove call to GetBlock for Sealevel for time being (#4858) ### Description Remove call to GetBlock for Sealevel for time being ### Related issues https://discord.com/channels/935678348330434570/935679524534911007/1306588981185740811 ### Backward compatibility Yes ### Testing E2E Test for Ethereum and Sealevel --------- Co-authored-by: Danil Nemirovsky <4614623+ameten@users.noreply.github.com> --- .../hyperlane-sealevel/src/interchain_gas.rs | 57 +++++++++++-------- .../chains/hyperlane-sealevel/src/mailbox.rs | 54 ++++++++++++------ 2 files changed, 72 insertions(+), 39 deletions(-) diff --git a/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs b/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs index 9a38fb487..16e9ea16e 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] diff --git a/rust/main/chains/hyperlane-sealevel/src/mailbox.rs b/rust/main/chains/hyperlane-sealevel/src/mailbox.rs index 21a9ff28b..7e83b355b 100644 --- a/rust/main/chains/hyperlane-sealevel/src/mailbox.rs +++ b/rust/main/chains/hyperlane-sealevel/src/mailbox.rs @@ -716,13 +716,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 +752,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 +809,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 +843,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, From 57346defe3a74df8ba067df76c1a6ae3895d2cb4 Mon Sep 17 00:00:00 2001 From: Danil Nemirovsky Date: Fri, 15 Nov 2024 12:51:51 +0000 Subject: [PATCH 04/14] refactor: Refactor Hyperlane store for Scraper (#4855) ### Description Refactor Hyperlane store for Scraper. Just moved source code into submodules. ### Backward compatibility Yes ### Testing E2E test Ethereum and Sealevel --------- Co-authored-by: Danil Nemirovsky <4614623+ameten@users.noreply.github.com> --- rust/main/agents/scraper/src/agent.rs | 35 ++-- rust/main/agents/scraper/src/db/message.rs | 30 ---- rust/main/agents/scraper/src/main.rs | 5 +- rust/main/agents/scraper/src/store.rs | 6 + .../agents/scraper/src/store/deliveries.rs | 43 +++++ .../agents/scraper/src/store/dispatches.rs | 64 +++++++ .../main/agents/scraper/src/store/payments.rs | 43 +++++ .../mod.rs => store/storage.rs} | 164 ++---------------- .../src/contract_sync/cursors/rate_limited.rs | 8 +- .../cursors/sequence_aware/backward.rs | 14 +- .../cursors/sequence_aware/forward.rs | 14 +- .../cursors/sequence_aware/mod.rs | 6 +- .../hyperlane-base/src/contract_sync/mod.rs | 27 +-- rust/main/hyperlane-base/src/settings/base.rs | 26 +-- rust/main/hyperlane-core/src/traits/db.rs | 4 +- 15 files changed, 243 insertions(+), 246 deletions(-) create mode 100644 rust/main/agents/scraper/src/store.rs create mode 100644 rust/main/agents/scraper/src/store/deliveries.rs create mode 100644 rust/main/agents/scraper/src/store/dispatches.rs create mode 100644 rust/main/agents/scraper/src/store/payments.rs rename rust/main/agents/scraper/src/{chain_scraper/mod.rs => store/storage.rs} (67%) 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/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 { } From 6f2d50fbd60e1ac445fb6805892823fa9934dc08 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Fri, 15 Nov 2024 16:30:31 +0000 Subject: [PATCH 05/14] feat: update Fraxtal set to be a Superlane set, update Flow validator set (#4857) ### Description - Updates the Fraxtal set to include Superlane operators - Adds the Flow Foundation to flowmainnet ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .changeset/funny-elephants-pretend.md | 5 +++++ typescript/sdk/src/consts/multisigIsm.ts | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 .changeset/funny-elephants-pretend.md diff --git a/.changeset/funny-elephants-pretend.md b/.changeset/funny-elephants-pretend.md new file mode 100644 index 000000000..9de7ff40b --- /dev/null +++ b/.changeset/funny-elephants-pretend.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Updated Fraxtal set to include Superlane validators, updated Flow set 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) ], }, From 0e285a4433ee6a2edc2c18c1a3f23e7ee0213a18 Mon Sep 17 00:00:00 2001 From: J M Rossy Date: Fri, 15 Nov 2024 13:20:57 -0500 Subject: [PATCH 06/14] chore: Migrate various utils from the Warp UI to the Widgets lib (#4856) ### Description More ground-work for the upcoming Warp Deploy app No new code, just migrating things from the Warp UI ### Backward compatibility Yes ### Testing Tested in Warp UI --- .changeset/nice-elephants-heal.md | 5 ++ .changeset/polite-kings-warn.md | 5 ++ .changeset/shaggy-countries-kick.md | 5 ++ typescript/sdk/src/index.ts | 4 +- typescript/sdk/src/utils/schemas.ts | 16 +++++- typescript/utils/src/index.ts | 2 +- typescript/utils/src/url.test.ts | 32 ++++++++++++ typescript/utils/src/url.ts | 16 +++++- typescript/widgets/.eslintrc | 4 +- .../widgets/src/components/ErrorBoundary.tsx | 47 +++++++++++++++++ typescript/widgets/src/icons/Error.tsx | 18 +++++++ typescript/widgets/src/index.ts | 7 ++- typescript/widgets/src/messages/useMessage.ts | 2 +- .../widgets/src/messages/useMessageStage.ts | 2 +- .../src/stories/ErrorBoundary.stories.tsx | 32 ++++++++++++ typescript/widgets/src/utils/debounce.ts | 18 +++++++ typescript/widgets/src/utils/ssr.ts | 10 ++++ typescript/widgets/src/utils/timeout.ts | 52 +++++++++++++++++++ typescript/widgets/src/utils/useInterval.ts | 27 ---------- 19 files changed, 265 insertions(+), 39 deletions(-) create mode 100644 .changeset/nice-elephants-heal.md create mode 100644 .changeset/polite-kings-warn.md create mode 100644 .changeset/shaggy-countries-kick.md create mode 100644 typescript/utils/src/url.test.ts create mode 100644 typescript/widgets/src/components/ErrorBoundary.tsx create mode 100644 typescript/widgets/src/icons/Error.tsx create mode 100644 typescript/widgets/src/stories/ErrorBoundary.stories.tsx create mode 100644 typescript/widgets/src/utils/debounce.ts create mode 100644 typescript/widgets/src/utils/ssr.ts create mode 100644 typescript/widgets/src/utils/timeout.ts delete mode 100644 typescript/widgets/src/utils/useInterval.ts diff --git a/.changeset/nice-elephants-heal.md b/.changeset/nice-elephants-heal.md new file mode 100644 index 000000000..d186955c4 --- /dev/null +++ b/.changeset/nice-elephants-heal.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/utils': minor +--- + +Add an isRelativeUrl function diff --git a/.changeset/polite-kings-warn.md b/.changeset/polite-kings-warn.md new file mode 100644 index 000000000..0a32d1ca1 --- /dev/null +++ b/.changeset/polite-kings-warn.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Add a validateZodResult util function diff --git a/.changeset/shaggy-countries-kick.md b/.changeset/shaggy-countries-kick.md new file mode 100644 index 000000000..3d9a74062 --- /dev/null +++ b/.changeset/shaggy-countries-kick.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/widgets': minor +--- + +Add various utility hooks: useIsSsr, useTimeout, useDebounce, useInterval diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index 75d74e5c8..68e474d18 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'; @@ -533,7 +533,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/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/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..5cf219d56 100644 --- a/typescript/widgets/.eslintrc +++ b/typescript/widgets/.eslintrc @@ -1,12 +1,10 @@ { "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"], diff --git a/typescript/widgets/src/components/ErrorBoundary.tsx b/typescript/widgets/src/components/ErrorBoundary.tsx new file mode 100644 index 000000000..a21611ec0 --- /dev/null +++ b/typescript/widgets/src/components/ErrorBoundary.tsx @@ -0,0 +1,47 @@ +import React, { Component, PropsWithChildren, ReactNode } from 'react'; + +import { errorToString } from '@hyperlane-xyz/utils'; + +import { ErrorIcon } from '../icons/Error.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, + }); + console.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/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/index.ts b/typescript/widgets/src/index.ts index 33eea26ef..fcc90c300 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'; @@ -30,6 +31,7 @@ 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'; @@ -48,6 +50,7 @@ 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'; @@ -55,7 +58,6 @@ 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 { DropdownMenu, type DropdownMenuProps } from './layout/DropdownMenu.js'; export { Modal, useModal, type ModalProps } from './layout/Modal.js'; export { Popover, type PopoverProps } from './layout/Popover.js'; @@ -75,4 +77,7 @@ 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'; diff --git a/typescript/widgets/src/messages/useMessage.ts b/typescript/widgets/src/messages/useMessage.ts index 78dea5302..38471facf 100644 --- a/typescript/widgets/src/messages/useMessage.ts +++ b/typescript/widgets/src/messages/useMessage.ts @@ -2,7 +2,7 @@ import { useCallback, useState } from 'react'; import { HYPERLANE_EXPLORER_API_URL } from '../consts.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'; diff --git a/typescript/widgets/src/messages/useMessageStage.ts b/typescript/widgets/src/messages/useMessageStage.ts index 54345d4a9..9351e31d4 100644 --- a/typescript/widgets/src/messages/useMessageStage.ts +++ b/typescript/widgets/src/messages/useMessageStage.ts @@ -5,7 +5,7 @@ import { fetchWithTimeout } from '@hyperlane-xyz/utils'; import { HYPERLANE_EXPLORER_API_URL } from '../consts.js'; import { queryExplorerForBlock } from '../utils/explorers.js'; -import { useInterval } from '../utils/useInterval.js'; +import { useInterval } from '../utils/timeout.js'; import { MessageStatus, 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/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/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/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]); -} From 515980e6275d22f785ff9f91e1ef8499cae6ee1a Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Mon, 18 Nov 2024 11:54:43 +0000 Subject: [PATCH 07/14] chore: recent relayer deploy (#4867) ### Description - Deployed the relayer to include https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/4858 ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- typescript/infra/config/environments/mainnet3/agent.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 5accd4f46..8a2ecd7a1 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -409,7 +409,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '75d62ae-20241107-060707', + tag: '25a927d-20241114-171323', }, gasPaymentEnforcement: gasPaymentEnforcement, metricAppContextsGetter, @@ -443,7 +443,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 +476,7 @@ const neutron: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '75d62ae-20241107-060707', + tag: '25a927d-20241114-171323', }, gasPaymentEnforcement, metricAppContextsGetter, From 33b6f584185f0bb8a913a30002576215f4f71a3c Mon Sep 17 00:00:00 2001 From: Danil Nemirovsky Date: Mon, 18 Nov 2024 12:14:23 +0000 Subject: [PATCH 08/14] fix: Use block slot instead of block height for Sealevel chains (#4862) ### Description Use block slot instead of block height for Sealevel chains ### Backward compatibility Yes ### Testing Manual run of validator against Solana mainnet Co-authored-by: Danil Nemirovsky <4614623+ameten@users.noreply.github.com> --- .../hyperlane-sealevel/src/interchain_gas.rs | 7 +++- .../chains/hyperlane-sealevel/src/mailbox.rs | 38 ++++++++++--------- .../src/merkle_tree_hook.rs | 5 ++- .../hyperlane-sealevel/src/rpc/client.rs | 24 ++++++------ 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs b/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs index 16e9ea16e..e415e9bc7 100644 --- a/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs +++ b/rust/main/chains/hyperlane-sealevel/src/interchain_gas.rs @@ -257,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!() } } @@ -277,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 7e83b355b..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, @@ -867,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( @@ -898,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)) } } @@ -922,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!() } } @@ -931,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, From 0cd65c57158830eeead85c09692c84cf52d9e28d Mon Sep 17 00:00:00 2001 From: J M Rossy Date: Mon, 18 Nov 2024 16:52:54 -0500 Subject: [PATCH 09/14] chore: Migrate various wallet hooks from the Warp UI to the Widgets lib (#4865) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description More ground-work for the upcoming Warp Deploy app No new code, just migrating things from the Warp UI Corresponds with https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/pull/326 Fixes https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/issues/321 ### Drive-by changes Update the hyp registry versions to 6.1.0 ### Backward compatibility Yes ### Testing Tested in Warp UI and storybook Screenshot 2024-11-16 at 7 08 00 PM --- .changeset/good-mayflies-sing.md | 5 + .changeset/tough-foxes-join.md | 5 + typescript/cli/package.json | 2 +- typescript/helloworld/package.json | 2 +- typescript/infra/package.json | 2 +- typescript/sdk/package.json | 3 +- typescript/sdk/src/index.ts | 5 +- .../src/metadata/chainMetadataConversion.ts | 98 + typescript/sdk/src/utils/viem.ts | 29 - typescript/widgets/.eslintrc | 8 +- typescript/widgets/.storybook/main.ts | 5 + typescript/widgets/package.json | 18 +- typescript/widgets/src/index.ts | 66 +- typescript/widgets/src/logger.ts | 3 + typescript/widgets/src/logos/Cosmos.tsx | 40 + typescript/widgets/src/logos/Ethereum.tsx | 27 + typescript/widgets/src/logos/Solana.tsx | 63 + .../widgets/src/logos/WalletConnect.tsx | 33 + typescript/widgets/src/logos/protocols.ts | 16 + typescript/widgets/src/messages/useMessage.ts | 11 +- .../widgets/src/messages/useMessageStage.ts | 15 +- .../MultiProtocolWalletModal.stories.tsx | 124 + typescript/widgets/src/utils/clipboard.ts | 6 +- typescript/widgets/src/utils/explorers.ts | 6 +- .../src/utils/useChainConnectionTest.ts | 2 +- .../src/walletIntegrations/AccountList.tsx | 143 + .../ConnectWalletButton.tsx | 115 + .../MultiProtocolWalletModal.tsx | 86 + .../src/walletIntegrations/WalletLogo.tsx | 24 + .../widgets/src/walletIntegrations/cosmos.ts | 208 + .../src/walletIntegrations/ethereum.ts | 169 + .../src/walletIntegrations/multiProtocol.tsx | 256 + .../widgets/src/walletIntegrations/solana.ts | 138 + .../widgets/src/walletIntegrations/types.ts | 48 + .../widgets/src/walletIntegrations/utils.ts | 56 + typescript/widgets/tailwind.config.cjs | 1 + yarn.lock | 5667 ++++++++++++++++- 37 files changed, 7345 insertions(+), 160 deletions(-) create mode 100644 .changeset/good-mayflies-sing.md create mode 100644 .changeset/tough-foxes-join.md create mode 100644 typescript/sdk/src/metadata/chainMetadataConversion.ts delete mode 100644 typescript/sdk/src/utils/viem.ts create mode 100644 typescript/widgets/src/logger.ts create mode 100644 typescript/widgets/src/logos/Cosmos.tsx create mode 100644 typescript/widgets/src/logos/Ethereum.tsx create mode 100644 typescript/widgets/src/logos/Solana.tsx create mode 100644 typescript/widgets/src/logos/WalletConnect.tsx create mode 100644 typescript/widgets/src/logos/protocols.ts create mode 100644 typescript/widgets/src/stories/MultiProtocolWalletModal.stories.tsx create mode 100644 typescript/widgets/src/walletIntegrations/AccountList.tsx create mode 100644 typescript/widgets/src/walletIntegrations/ConnectWalletButton.tsx create mode 100644 typescript/widgets/src/walletIntegrations/MultiProtocolWalletModal.tsx create mode 100644 typescript/widgets/src/walletIntegrations/WalletLogo.tsx create mode 100644 typescript/widgets/src/walletIntegrations/cosmos.ts create mode 100644 typescript/widgets/src/walletIntegrations/ethereum.ts create mode 100644 typescript/widgets/src/walletIntegrations/multiProtocol.tsx create mode 100644 typescript/widgets/src/walletIntegrations/solana.ts create mode 100644 typescript/widgets/src/walletIntegrations/types.ts create mode 100644 typescript/widgets/src/walletIntegrations/utils.ts diff --git a/.changeset/good-mayflies-sing.md b/.changeset/good-mayflies-sing.md new file mode 100644 index 000000000..38cf13a70 --- /dev/null +++ b/.changeset/good-mayflies-sing.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/widgets': minor +--- + +Add multi-protocol wallet integration hooks and types diff --git a/.changeset/tough-foxes-join.md b/.changeset/tough-foxes-join.md new file mode 100644 index 000000000..04d59bea9 --- /dev/null +++ b/.changeset/tough-foxes-join.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': minor +--- + +Add chainMetadataToCosmosChain function diff --git a/typescript/cli/package.json b/typescript/cli/package.json index df2acaeb1..f594cf707 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -5,7 +5,7 @@ "dependencies": { "@aws-sdk/client-kms": "^3.577.0", "@aws-sdk/client-s3": "^3.577.0", - "@hyperlane-xyz/registry": "4.7.0", + "@hyperlane-xyz/registry": "6.1.0", "@hyperlane-xyz/sdk": "7.0.0", "@hyperlane-xyz/utils": "7.0.0", "@inquirer/core": "9.0.10", diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index 3d3307a67..60bdcef3d 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -4,7 +4,7 @@ "version": "7.0.0", "dependencies": { "@hyperlane-xyz/core": "5.8.0", - "@hyperlane-xyz/registry": "4.7.0", + "@hyperlane-xyz/registry": "6.1.0", "@hyperlane-xyz/sdk": "7.0.0", "@openzeppelin/contracts-upgradeable": "^4.9.3", "ethers": "^5.7.2" diff --git a/typescript/infra/package.json b/typescript/infra/package.json index c62699a66..f586ba1fe 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -14,7 +14,7 @@ "@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/registry": "6.1.0", "@hyperlane-xyz/sdk": "7.0.0", "@hyperlane-xyz/utils": "7.0.0", "@inquirer/prompts": "^5.3.8", diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index 0918fb683..d6b66e364 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -5,6 +5,7 @@ "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", @@ -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/index.ts b/typescript/sdk/src/index.ts index 68e474d18..1c2146b79 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -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, 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/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/widgets/.eslintrc b/typescript/widgets/.eslintrc index 5cf219d56..9041f842f 100644 --- a/typescript/widgets/.eslintrc +++ b/typescript/widgets/.eslintrc @@ -6,11 +6,15 @@ ], "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/package.json b/typescript/widgets/package.json index 27f88002b..f21f536b2 100644 --- a/typescript/widgets/package.json +++ b/typescript/widgets/package.json @@ -7,14 +7,26 @@ "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", + "@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", diff --git a/typescript/widgets/src/index.ts b/typescript/widgets/src/index.ts index fcc90c300..655e3c173 100644 --- a/typescript/widgets/src/index.ts +++ b/typescript/widgets/src/index.ts @@ -56,12 +56,17 @@ 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 { 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, @@ -81,3 +86,62 @@ 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/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 38471facf..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/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 9351e31d4..26dd1678b 100644 --- a/typescript/widgets/src/messages/useMessageStage.ts +++ b/typescript/widgets/src/messages/useMessageStage.ts @@ -4,6 +4,7 @@ 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/timeout.js'; @@ -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/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/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/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/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..ee8abaa36 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,7 +8441,7 @@ __metadata: "@aws-sdk/client-s3": "npm:^3.577.0" "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" - "@hyperlane-xyz/registry": "npm:4.7.0" + "@hyperlane-xyz/registry": "npm:6.1.0" "@hyperlane-xyz/sdk": "npm:7.0.0" "@hyperlane-xyz/utils": "npm:7.0.0" "@inquirer/core": "npm:9.0.10" @@ -7922,7 +8540,7 @@ __metadata: resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: "@hyperlane-xyz/core": "npm:5.8.0" - "@hyperlane-xyz/registry": "npm:4.7.0" + "@hyperlane-xyz/registry": "npm:6.1.0" "@hyperlane-xyz/sdk": "npm:7.0.0" "@nomiclabs/hardhat-ethers": "npm:^2.2.3" "@nomiclabs/hardhat-waffle": "npm:^2.0.6" @@ -7971,7 +8589,7 @@ __metadata: "@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/registry": "npm:6.1.0" "@hyperlane-xyz/sdk": "npm:7.0.0" "@hyperlane-xyz/utils": "npm:7.0.0" "@inquirer/prompts": "npm:^5.3.8" @@ -8029,23 +8647,13 @@ __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 @@ -8055,6 +8663,7 @@ __metadata: 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" @@ -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: @@ -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/registry": "npm:6.1.0" "@hyperlane-xyz/sdk": "npm:7.0.0" "@hyperlane-xyz/utils": "npm:7.0.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" From 85dc14d827ed84158e59d4bdf40c874eda0d5b37 Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 19 Nov 2024 10:38:23 +0000 Subject: [PATCH 10/14] feat: script for getting key material (#4829) ### Description Corresponding info on how to use this efficiently, PSA will follow https://www.notion.so/hyperlanexyz/Runbook-83c755f2652943289cf98cd1309487a8?pvs=4#1366d35200d68056b827e9e6115f3ea2 - Prints the private key in a subshell but not in a normal tty - Intended to encourage healthier key habits that don't write keys to the filesystem, as described in the first step of https://discord.com/channels/935678348330434570/1296491706417549413/1301158531667595265 ### Drive-by changes - groups some key related scripts ### Related issues ### Backward compatibility ### Testing --- typescript/infra/scripts/agent-utils.ts | 12 ++++-- typescript/infra/scripts/agents/utils.ts | 10 +++-- .../infra/scripts/{ => keys}/create-keys.ts | 5 +-- .../infra/scripts/{ => keys}/delete-keys.ts | 5 +-- .../scripts/{ => keys}/get-key-addresses.ts | 7 ++-- typescript/infra/scripts/keys/get-key.ts | 38 +++++++++++++++++++ .../infra/scripts/{ => keys}/get-owner-ica.ts | 9 ++--- .../infra/scripts/{ => keys}/rotate-key.ts | 2 +- .../infra/scripts/{ => keys}/update-key.ts | 2 +- 9 files changed, 65 insertions(+), 25 deletions(-) rename typescript/infra/scripts/{ => keys}/create-keys.ts (61%) rename typescript/infra/scripts/{ => keys}/delete-keys.ts (58%) rename typescript/infra/scripts/{ => keys}/get-key-addresses.ts (80%) create mode 100644 typescript/infra/scripts/keys/get-key.ts rename typescript/infra/scripts/{ => keys}/get-owner-ica.ts (92%) rename typescript/infra/scripts/{ => keys}/rotate-key.ts (97%) rename typescript/infra/scripts/{ => keys}/update-key.ts (97%) 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; From 5bd2302cb14112d3a71ee16c047d9e05b07f7c3b Mon Sep 17 00:00:00 2001 From: Paul Balaji <10051819+paulbalaji@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:43:49 +0000 Subject: [PATCH 11/14] chore: parallelise cli e2e tests (#4873) ### Description chore: parallelise cli e2e tests before: ![image](https://github.com/user-attachments/assets/66914b6d-7d64-4689-a5c7-032d34963a7f) after: ![image](https://github.com/user-attachments/assets/d35c91bb-98a3-40be-8432-1a2848394428) ### Drive-by changes ### Related issues ### Backward compatibility ### Testing --- .github/workflows/test.yml | 26 ++++++++++++++++++++++++-- typescript/cli/.mocharc-e2e.json | 1 - typescript/cli/scripts/run-e2e-test.sh | 7 ++++++- 3 files changed, 30 insertions(+), 4 deletions(-) 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/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/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 From 9ca2333bf0ca33c9f4fbee5a42673c1c70d8d47f Mon Sep 17 00:00:00 2001 From: Trevor Porter Date: Tue, 19 Nov 2024 17:49:30 +0000 Subject: [PATCH 12/14] feat: more app contexts (#4874) ### Description - Adds the endurance USDC warp deploy so it's a relayer app context - Adds Velodrome contracts, contracts were found from their private fork / in tg with them https://github.com/velodrome-finance/superchain-contracts-private/tree/main/deployment-addresses - Adds Aave contracts, contracts were found by poking around https://app.aave.com/governance/v3/proposal/?proposalId=92, which led to https://github.com/bgd-labs/aave-delivery-infrastructure?tab=readme-ov-file#deployed-addresses and seeing which contracts were sending/receiving messages in our explorer. They don't have a typical router setup -- some messaging is unidirectional. The sending address is more static than the receiving address, so I've set the matching list to be based off the sender to make configuration simpler. https://github.com/bgd-labs/aave-delivery-infrastructure?tab=readme-ov-file#deployed-addresses is the source of truth for these addresses ### Drive-by changes - Forces a warp ID to be picked in the warp monitor flow ### Related issues ### Backward compatibility ### Testing --- .registryrc | 2 +- rust/main/config/mainnet_config.json | 8 ++-- .../config/environments/mainnet3/agent.ts | 26 +++++++++++-- .../misc-artifacts/aave-sender-addresses.json | 38 +++++++++++++++++++ .../merkly-erc20-addresses.json | 0 .../merkly-eth-addresses.json | 0 .../merkly-nft-addresses.json | 0 .../velo-message-module-addresses.json | 8 ++++ .../velo-token-bridge-addresses.json | 8 ++++ .../environments/mainnet3/warp/warpIds.ts | 1 + .../helm/warp-routes/templates/_helpers.tpl | 2 +- .../warp-routes/deploy-warp-monitor.ts | 17 ++++++--- .../scripts/warp-routes/monitor/metrics.ts | 22 +++++++---- .../monitor/monitor-warp-route-balances.ts | 17 ++++----- typescript/infra/src/config/agent/relayer.ts | 12 ++++++ typescript/infra/src/warp/helm.ts | 2 +- typescript/sdk/src/token/Token.ts | 6 ++- .../sdk/src/token/adapters/EvmTokenAdapter.ts | 19 ++++++++-- 18 files changed, 152 insertions(+), 36 deletions(-) create mode 100644 typescript/infra/config/environments/mainnet3/misc-artifacts/aave-sender-addresses.json rename typescript/infra/config/environments/mainnet3/{warp/artifacts => misc-artifacts}/merkly-erc20-addresses.json (100%) rename typescript/infra/config/environments/mainnet3/{warp/artifacts => misc-artifacts}/merkly-eth-addresses.json (100%) rename typescript/infra/config/environments/mainnet3/{warp/artifacts => misc-artifacts}/merkly-nft-addresses.json (100%) create mode 100644 typescript/infra/config/environments/mainnet3/misc-artifacts/velo-message-module-addresses.json create mode 100644 typescript/infra/config/environments/mainnet3/misc-artifacts/velo-token-bridge-addresses.json diff --git a/.registryrc b/.registryrc index 9f4316497..19d87576f 100644 --- a/.registryrc +++ b/.registryrc @@ -1 +1 @@ -3e366eae1d49da4270695b157d7af00bb761156a +82013508db45dcd55b44d2721414d26817686c8f 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/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 8a2ecd7a1..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), + }, ]; }; 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 a68ed19c8..605f0a794 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/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/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 From 794501ba62ae02067674ba11e8cc628b0c868a3a Mon Sep 17 00:00:00 2001 From: J M Rossy Date: Tue, 19 Nov 2024 12:49:39 -0500 Subject: [PATCH 13/14] chore: Lint fixes for widgets lib (#4877) ### Description The linter wasn't previously running on the .tsx files. This fixes the coverage and the issues ### Backward compatibility Yes ### Testing Tested in Warp UI --- .changeset/fluffy-wombats-teach.md | 5 +++++ typescript/widgets/package.json | 2 +- typescript/widgets/src/chains/ChainAddMenu.tsx | 3 ++- typescript/widgets/src/chains/ChainLogo.tsx | 5 +++-- typescript/widgets/src/chains/ChainSearchMenu.tsx | 4 ++-- typescript/widgets/src/components/ErrorBoundary.tsx | 3 ++- typescript/widgets/src/components/SearchMenu.tsx | 6 ++++-- typescript/widgets/src/icons/Web.tsx | 4 ++-- 8 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 .changeset/fluffy-wombats-teach.md diff --git a/.changeset/fluffy-wombats-teach.md b/.changeset/fluffy-wombats-teach.md new file mode 100644 index 000000000..e08d25e27 --- /dev/null +++ b/.changeset/fluffy-wombats-teach.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/widgets': patch +--- + +Prevent propagation of form submissions from ChainSearchMenu diff --git a/typescript/widgets/package.json b/typescript/widgets/package.json index f21f536b2..f4a4d2d9d 100644 --- a/typescript/widgets/package.json +++ b/typescript/widgets/package.json @@ -86,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 index a21611ec0..79a7ce15e 100644 --- a/typescript/widgets/src/components/ErrorBoundary.tsx +++ b/typescript/widgets/src/components/ErrorBoundary.tsx @@ -3,6 +3,7 @@ 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; @@ -24,7 +25,7 @@ export class ErrorBoundary extends Component { error, errorInfo, }); - console.error('Error caught by error boundary', error, errorInfo); + widgetLogger.error('Error caught by error boundary', error, errorInfo); } render() { 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/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) { /> ); From 23a2679bbee23ce44d9fcda22f99df618f8a34e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 18:47:42 +0000 Subject: [PATCH 14/14] Version Packages (#4848) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @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 ## @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 ## @hyperlane-xyz/utils@7.1.0 ### Minor Changes - 0e285a443: Add an isRelativeUrl function ## @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 ## @hyperlane-xyz/core@5.8.1 ### Patch Changes - Updated dependencies [0e285a443] - @hyperlane-xyz/utils@7.1.0 ## @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 ## @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 ## @hyperlane-xyz/ccip-server@7.1.0 ## @hyperlane-xyz/github-proxy@7.1.0 --------- Co-authored-by: github-actions[bot] --- .changeset/fluffy-wombats-teach.md | 5 ---- .changeset/funny-elephants-pretend.md | 5 ---- .changeset/good-mayflies-sing.md | 5 ---- .changeset/mighty-panthers-play.md | 5 ---- .changeset/nice-elephants-heal.md | 5 ---- .changeset/odd-frogs-move.md | 5 ---- .changeset/polite-kings-warn.md | 5 ---- .changeset/rare-llamas-float.md | 7 ------ .changeset/real-phones-bake.md | 7 ------ .changeset/shaggy-countries-kick.md | 5 ---- .changeset/strange-poems-build.md | 6 ----- .changeset/tough-foxes-join.md | 5 ---- solidity/CHANGELOG.md | 7 ++++++ solidity/contracts/PackageVersioned.sol | 2 +- solidity/package.json | 4 ++-- typescript/ccip-server/CHANGELOG.md | 2 ++ typescript/ccip-server/package.json | 2 +- typescript/cli/CHANGELOG.md | 18 ++++++++++++++ typescript/cli/package.json | 6 ++--- typescript/cli/src/version.ts | 2 +- typescript/github-proxy/CHANGELOG.md | 2 ++ typescript/github-proxy/package.json | 2 +- typescript/helloworld/CHANGELOG.md | 13 ++++++++++ typescript/helloworld/package.json | 6 ++--- typescript/infra/CHANGELOG.md | 19 +++++++++++++++ typescript/infra/package.json | 8 +++---- typescript/sdk/CHANGELOG.md | 17 +++++++++++++ typescript/sdk/package.json | 6 ++--- typescript/utils/CHANGELOG.md | 6 +++++ typescript/utils/package.json | 2 +- typescript/widgets/CHANGELOG.md | 25 +++++++++++++++++++ typescript/widgets/package.json | 6 ++--- yarn.lock | 32 ++++++++++++------------- 33 files changed, 148 insertions(+), 104 deletions(-) delete mode 100644 .changeset/fluffy-wombats-teach.md delete mode 100644 .changeset/funny-elephants-pretend.md delete mode 100644 .changeset/good-mayflies-sing.md delete mode 100644 .changeset/mighty-panthers-play.md delete mode 100644 .changeset/nice-elephants-heal.md delete mode 100644 .changeset/odd-frogs-move.md delete mode 100644 .changeset/polite-kings-warn.md delete mode 100644 .changeset/rare-llamas-float.md delete mode 100644 .changeset/real-phones-bake.md delete mode 100644 .changeset/shaggy-countries-kick.md delete mode 100644 .changeset/strange-poems-build.md delete mode 100644 .changeset/tough-foxes-join.md diff --git a/.changeset/fluffy-wombats-teach.md b/.changeset/fluffy-wombats-teach.md deleted file mode 100644 index e08d25e27..000000000 --- a/.changeset/fluffy-wombats-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/widgets': patch ---- - -Prevent propagation of form submissions from ChainSearchMenu diff --git a/.changeset/funny-elephants-pretend.md b/.changeset/funny-elephants-pretend.md deleted file mode 100644 index 9de7ff40b..000000000 --- a/.changeset/funny-elephants-pretend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Updated Fraxtal set to include Superlane validators, updated Flow set diff --git a/.changeset/good-mayflies-sing.md b/.changeset/good-mayflies-sing.md deleted file mode 100644 index 38cf13a70..000000000 --- a/.changeset/good-mayflies-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/widgets': minor ---- - -Add multi-protocol wallet integration hooks and types 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/nice-elephants-heal.md b/.changeset/nice-elephants-heal.md deleted file mode 100644 index d186955c4..000000000 --- a/.changeset/nice-elephants-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/utils': minor ---- - -Add an isRelativeUrl function 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/polite-kings-warn.md b/.changeset/polite-kings-warn.md deleted file mode 100644 index 0a32d1ca1..000000000 --- a/.changeset/polite-kings-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Add a validateZodResult util function diff --git a/.changeset/rare-llamas-float.md b/.changeset/rare-llamas-float.md deleted file mode 100644 index 337cdd5eb..000000000 --- a/.changeset/rare-llamas-float.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperlane-xyz/widgets': minor ---- - -New Icons -Updated modal with new props -Updated storybook for modal and icon list 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/shaggy-countries-kick.md b/.changeset/shaggy-countries-kick.md deleted file mode 100644 index 3d9a74062..000000000 --- a/.changeset/shaggy-countries-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/widgets': minor ---- - -Add various utility hooks: useIsSsr, useTimeout, useDebounce, useInterval 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/.changeset/tough-foxes-join.md b/.changeset/tough-foxes-join.md deleted file mode 100644 index 04d59bea9..000000000 --- a/.changeset/tough-foxes-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hyperlane-xyz/sdk': minor ---- - -Add chainMetadataToCosmosChain function 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/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 f594cf707..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": "6.1.0", - "@hyperlane-xyz/sdk": "7.0.0", - "@hyperlane-xyz/utils": "7.0.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/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 60bdcef3d..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/core": "5.8.1", "@hyperlane-xyz/registry": "6.1.0", - "@hyperlane-xyz/sdk": "7.0.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/package.json b/typescript/infra/package.json index f586ba1fe..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/helloworld": "7.1.0", "@hyperlane-xyz/registry": "6.1.0", - "@hyperlane-xyz/sdk": "7.0.0", - "@hyperlane-xyz/utils": "7.0.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/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 d6b66e364..9f4fd0615 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,15 +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", 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/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 f4a4d2d9d..8a4331ef0 100644 --- a/typescript/widgets/package.json +++ b/typescript/widgets/package.json @@ -1,7 +1,7 @@ { "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" @@ -9,8 +9,8 @@ "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", diff --git a/yarn.lock b/yarn.lock index ee8abaa36..1a658284c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8442,8 +8442,8 @@ __metadata: "@ethersproject/abi": "npm:*" "@ethersproject/providers": "npm:*" "@hyperlane-xyz/registry": "npm:6.1.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.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" @@ -8478,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" @@ -8535,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/core": "npm:5.8.1" "@hyperlane-xyz/registry": "npm:6.1.0" - "@hyperlane-xyz/sdk": "npm:7.0.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" @@ -8588,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/helloworld": "npm:7.1.0" "@hyperlane-xyz/registry": "npm:6.1.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.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" @@ -8657,7 +8657,7 @@ __metadata: 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: @@ -8666,8 +8666,8 @@ __metadata: "@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" @@ -8705,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: @@ -8739,8 +8739,8 @@ __metadata: "@emotion/styled": "npm:^11.13.0" "@headlessui/react": "npm:^2.1.8" "@hyperlane-xyz/registry": "npm:6.1.0" - "@hyperlane-xyz/sdk": "npm:7.0.0" - "@hyperlane-xyz/utils": "npm:7.0.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"