diff --git a/.changeset/wet-peas-beam.md b/.changeset/wet-peas-beam.md new file mode 100644 index 000000000..0db222e96 --- /dev/null +++ b/.changeset/wet-peas-beam.md @@ -0,0 +1,7 @@ +--- +'@ton/appkit-react': patch +'@ton/walletkit': patch +'@ton/appkit': patch +--- + +Implemented staking infrastructure including \`StakingManager\` and \`TonStakersStakingProvider\` with support for multiple unstake modes (delayed, instant, best rate). Added core type updates and exported staking features from the package root. diff --git a/apps/appkit-minter/src/core/configs/app-kit.ts b/apps/appkit-minter/src/core/configs/app-kit.ts index 780e910ce..5a2c9011a 100644 --- a/apps/appkit-minter/src/core/configs/app-kit.ts +++ b/apps/appkit-minter/src/core/configs/app-kit.ts @@ -7,32 +7,33 @@ */ import { AppKit, Network } from '@ton/appkit'; -import { TonConnectConnector, ApiClientTonApi } from '@ton/appkit'; +import { TonConnectConnector, ApiClientTonApi, ApiClientToncenter } from '@ton/appkit'; import { DeDustSwapProvider } from '@ton/appkit/swap/dedust'; import { OmnistonSwapProvider } from '@ton/appkit/swap/omniston'; +import { TonStakersStakingProvider } from '@ton/appkit/staking/tonstakers'; import { ENV_TON_API_KEY_TESTNET, ENV_TON_API_KEY_MAINNET } from '@/core/configs/env'; +const mainnetApiClient = new ApiClientToncenter({ + network: Network.mainnet(), + apiKey: ENV_TON_API_KEY_MAINNET, +}); + +const testnetApiClient = new ApiClientToncenter({ + network: Network.testnet(), + apiKey: ENV_TON_API_KEY_TESTNET, +}); + +const tetraApiClient = new ApiClientTonApi({ + network: Network.tetra(), + endpoint: 'https://tetra.tonapi.io', +}); + export const appKit = new AppKit({ networks: { - [Network.mainnet().chainId]: { - apiClient: { - url: 'https://toncenter.com', - key: ENV_TON_API_KEY_MAINNET, - }, - }, - [Network.testnet().chainId]: { - apiClient: { - url: 'https://testnet.toncenter.com', - key: ENV_TON_API_KEY_TESTNET, - }, - }, - [Network.tetra().chainId]: { - apiClient: new ApiClientTonApi({ - network: Network.tetra(), - endpoint: 'https://tetra.tonapi.io', - }), - }, + [Network.mainnet().chainId]: { apiClient: mainnetApiClient }, + [Network.testnet().chainId]: { apiClient: testnetApiClient }, + [Network.tetra().chainId]: { apiClient: tetraApiClient }, }, connectors: [ new TonConnectConnector({ @@ -41,5 +42,12 @@ export const appKit = new AppKit({ }, }), ], - providers: [new DeDustSwapProvider(), new OmnistonSwapProvider()], + providers: [ + new DeDustSwapProvider(), + new OmnistonSwapProvider(), + new TonStakersStakingProvider({ + [Network.mainnet().chainId]: { apiClient: mainnetApiClient }, + [Network.testnet().chainId]: { apiClient: testnetApiClient }, + }), + ], }); diff --git a/apps/appkit-minter/src/features/staking/components/stake-button.tsx b/apps/appkit-minter/src/features/staking/components/stake-button.tsx new file mode 100644 index 000000000..37685da34 --- /dev/null +++ b/apps/appkit-minter/src/features/staking/components/stake-button.tsx @@ -0,0 +1,76 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { useMemo } from 'react'; +import type { FC } from 'react'; +import { + Transaction, + useStakingQuote, + useNetwork, + useAddress, + useBuildStakeTransaction, + useBuildUnstakeTransaction, +} from '@ton/appkit-react'; + +interface StakeButtonProps { + amount: string; + direction: 'stake' | 'unstake'; + providerId?: string; +} + +export const StakeButton: FC = ({ amount, direction, providerId }) => { + const network = useNetwork(); + const address = useAddress(); + + const { + data: quote, + isError, + isLoading, + } = useStakingQuote({ + amount, + direction, + network, + providerId, + }); + + const { mutateAsync: buildStakeTransaction } = useBuildStakeTransaction(); + const { mutateAsync: buildUnstakeTransaction } = useBuildUnstakeTransaction(); + + const handleTransaction = () => { + if (!quote || !address) { + return Promise.reject(new Error('Missing quote or address')); + } + + if (direction === 'stake') { + return buildStakeTransaction({ + quote, + userAddress: address, + }); + } + + return buildUnstakeTransaction({ + quote, + userAddress: address, + }); + }; + + const buttonText = useMemo(() => { + if (isLoading) { + return 'Fetching quote...'; + } + + if (isError || !quote) { + return 'Staking Unavailable'; + } + + const action = direction === 'stake' ? 'Stake' : 'Unstake'; + return `${action} ${quote.amountIn} ${direction === 'stake' ? 'TON' : 'tsTON'} -> ${quote.amountOut} ${direction === 'stake' ? 'tsTON' : 'TON'}`; + }, [isLoading, isError, quote, direction]); + + return ; +}; diff --git a/apps/appkit-minter/src/features/staking/index.ts b/apps/appkit-minter/src/features/staking/index.ts new file mode 100644 index 000000000..65768ca74 --- /dev/null +++ b/apps/appkit-minter/src/features/staking/index.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export * from './components/stake-button'; diff --git a/apps/appkit-minter/src/pages/minter-page.tsx b/apps/appkit-minter/src/pages/minter-page.tsx index bee756ac1..353490ed8 100644 --- a/apps/appkit-minter/src/pages/minter-page.tsx +++ b/apps/appkit-minter/src/pages/minter-page.tsx @@ -13,8 +13,9 @@ import { TokensCard } from '@/features/balances'; import { CardGenerator } from '@/features/mint'; import { NftsCard } from '@/features/nft'; import { WalletInfo } from '@/features/wallet'; -import { Layout } from '@/core/components'; +import { Card, Layout } from '@/core/components'; import { SwapButton } from '@/features/swap'; +import { StakeButton } from '@/features/staking'; import { SignMessageCard } from '@/features/signing'; export const MinterPage: React.FC = () => { @@ -35,8 +36,7 @@ export const MinterPage: React.FC = () => { -
-

Swap Demo

+
Default provider:
@@ -50,7 +50,15 @@ export const MinterPage: React.FC = () => {
-
+ + + +
+
Tonstakers:
+ + +
+
)} diff --git a/apps/demo-wallet/src/components/AppRouter.tsx b/apps/demo-wallet/src/components/AppRouter.tsx index 97e2b89d8..632f166de 100644 --- a/apps/demo-wallet/src/components/AppRouter.tsx +++ b/apps/demo-wallet/src/components/AppRouter.tsx @@ -21,6 +21,7 @@ import { TracePage, TransactionDetail, Swap, + Staking, } from '../pages'; import { useWalletDataUpdater } from '@/hooks/useWalletDataUpdater'; @@ -119,6 +120,14 @@ export const AppRouter: React.FC = () => { } /> + + + + } + /> { + const { stakedBalance, providerInfo } = useStaking(); + + return ( +
+ +
+
+

Balance

+

+ {stakedBalance?.stakedBalance ? stakedBalance?.stakedBalance : '0.00'} tsTON +

+
+
+
+ + +
+
+ Provider + Tonstakers +
+
+ APY + + {providerInfo?.apy ? `${providerInfo.apy.toFixed(2)}%` : '--'} + +
+
+ Instant Unstake Available + + {providerInfo?.instantUnstakeAvailable + ? Number(providerInfo?.instantUnstakeAvailable).toFixed(4) + : '0.00'}{' '} + TON + +
+
+
+
+ ); +}; diff --git a/apps/demo-wallet/src/components/staking/StakingInterface.tsx b/apps/demo-wallet/src/components/staking/StakingInterface.tsx new file mode 100644 index 000000000..ec07babf6 --- /dev/null +++ b/apps/demo-wallet/src/components/staking/StakingInterface.tsx @@ -0,0 +1,194 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { FC, ChangeEvent } from 'react'; +import { useState } from 'react'; +import { useStaking } from '@demo/wallet-core'; +import { useNavigate } from 'react-router-dom'; + +import { Card } from '../Card'; +import { Button } from '../Button'; + +import { cn } from '@/lib/utils'; + +export const StakingInterface: FC = () => { + const { + amount, + currentQuote, + isLoadingQuote, + isStaking, + isUnstaking, + error, + unstakeMode, + setStakingAmount: setAmount, + setUnstakeMode, + getStakingQuote: getQuote, + stake, + unstake, + validateStakingInputs, + } = useStaking(); + + const [tab, setTab] = useState<'stake' | 'unstake'>('stake'); + + const navigate = useNavigate(); + + const handleAmountChange = (e: ChangeEvent) => { + setAmount(e.target.value); + }; + + const handleGetQuote = async () => { + await getQuote({ + amount, + direction: tab === 'stake' ? 'stake' : 'unstake', + }); + }; + + const handleAction = async () => { + if (!currentQuote) return; + + if (tab === 'stake') { + await stake({ quote: currentQuote }); + } else { + await unstake({ quote: currentQuote }); + } + + navigate('/wallet', { + state: { message: `${tab === 'stake' ? 'Staked' : 'Unstaked'} successfully!` }, + }); + }; + + const validationError = validateStakingInputs(); + const canGetQuote = !validationError && amount && parseFloat(amount) > 0; + + return ( + +
+ + +
+ +
+
+ +
+ +
+ {tab === 'stake' ? 'TON' : 'tsTON'} +
+
+ {validationError && amount !== '' &&

{validationError}

} +
+ + {tab === 'unstake' && ( +
+ +
+ {(['delayed', 'instant', 'bestRate'] as const).map((mode) => ( + + ))} +
+

+ {unstakeMode === 'delayed' && + 'Standard withdrawal. Immediate if liquid, or up to ~18h queue'} + {unstakeMode === 'instant' && 'Receive TON immediately'} + {unstakeMode === 'bestRate' && 'Wait for cycle end (~18h) for best rate'} +

+
+ )} + + {currentQuote && ( +
+
+ You will receive + + {currentQuote.amountOut} {tab === 'stake' ? 'tsTON' : 'TON'} + +
+
+ )} + + {error && ( +
+

{error}

+
+ )} + + {!currentQuote ? ( + + ) : ( +
+ + +
+ )} +
+
+ ); +}; diff --git a/apps/demo-wallet/src/components/swap/SwapInterface.tsx b/apps/demo-wallet/src/components/swap/SwapInterface.tsx index 817485416..7840223f9 100644 --- a/apps/demo-wallet/src/components/swap/SwapInterface.tsx +++ b/apps/demo-wallet/src/components/swap/SwapInterface.tsx @@ -44,12 +44,12 @@ export const SwapInterface: FC = ({ className }) => { slippageBps, setFromToken, setToToken, - setAmount, + setSwapAmount: setAmount, setIsReverseSwap, setDestinationAddress, setSlippageBps, swapTokens, - getQuote, + getSwapQuote: getQuote, executeSwap, } = useSwap(); diff --git a/apps/demo-wallet/src/pages/Staking.tsx b/apps/demo-wallet/src/pages/Staking.tsx new file mode 100644 index 000000000..a2f157502 --- /dev/null +++ b/apps/demo-wallet/src/pages/Staking.tsx @@ -0,0 +1,65 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { FC } from 'react'; +import { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useStaking, useWallet } from '@demo/wallet-core'; + +import { Layout, Button } from '../components'; +import { StakingInterface } from '../components/staking/StakingInterface'; +import { StakingInfo } from '../components/staking/StakingInfo'; + +export const Staking: FC = () => { + const navigate = useNavigate(); + const { address } = useWallet(); + const { clearStaking, loadStakingData } = useStaking(); + + useEffect(() => { + if (address) { + loadStakingData(address); + } + return () => clearStaking(); + }, [address, loadStakingData, clearStaking]); + + return ( + +
+ +
+ +
+ + +
+ + {/* Warning */} +
+
+
+ + + +
+
+

+ Staking involves locking your TON to earn rewards. Please note that unstaking may take some + time depending on the pool cycle. +

+
+
+
+
+ ); +}; diff --git a/apps/demo-wallet/src/pages/WalletDashboard.tsx b/apps/demo-wallet/src/pages/WalletDashboard.tsx index 8a3f1fd48..23a011d86 100644 --- a/apps/demo-wallet/src/pages/WalletDashboard.tsx +++ b/apps/demo-wallet/src/pages/WalletDashboard.tsx @@ -171,9 +171,9 @@ export const WalletDashboard: React.FC = () => { viewBox="0 0 24 24" fill="none" stroke="currentColor" - stroke-width="2" - stroke-linecap="round" - stroke-linejoin="round" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" > @@ -267,7 +267,7 @@ export const WalletDashboard: React.FC = () => { )} -
+
@@ -275,6 +275,10 @@ export const WalletDashboard: React.FC = () => { + +
diff --git a/apps/demo-wallet/src/pages/index.ts b/apps/demo-wallet/src/pages/index.ts index 6bda77071..fb0c7a821 100644 --- a/apps/demo-wallet/src/pages/index.ts +++ b/apps/demo-wallet/src/pages/index.ts @@ -14,3 +14,4 @@ export * from './SendTransaction'; export * from './TracePage'; export * from './TransactionDetail'; export * from './Swap'; +export * from './Staking'; diff --git a/demo/examples/env.d.ts b/demo/examples/env.d.ts new file mode 100644 index 000000000..5bdd6bd69 --- /dev/null +++ b/demo/examples/env.d.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +/// + +interface ImportMetaEnv { + readonly VITE_WALLET_MNEMONIC: string; + readonly VITE_TON_API_KEY_MAINNET: string; + readonly VITE_TON_API_KEY_TESTNET: string; + readonly VITE_BRIDGE_URL: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/demo/examples/index.html b/demo/examples/index.html new file mode 100644 index 000000000..a3480c164 --- /dev/null +++ b/demo/examples/index.html @@ -0,0 +1,375 @@ + + + + + + WalletKit Staking Demo + + + + + +
+

WalletKit Staking Demo

+

Restore Wallet

+ +
+ + +
+ +
+ + +
+

Select Network

+ +

Click on a wallet address to select network and continue:

+
+
+

Mainnet

+
-
+
+
+

Testnet

+
-
+
+
+
+ + +
+

Staking Demo

+ + + +
+
+
+
Wallet (Mainnet)
+
-
+
+ +
+
+ +

Balances

+
+
+

TON Balance

+
-
+
+
+

Available for Staking

+
-
+
+
+

Staked (tsTON)

+
-
+
+
+ +

Pool Information

+
+
+

APY

+
-
+
+
+

TVL TON

+
-
+
+
+

Stakers

+
-
+
+
+ +

Operations

+
+ + + + + + + + +
+ +

Transaction Status

+ + +

Settings

+
+ +
+ +

Active Withdrawals

+
+

No active withdrawals

+
+ +

Rounds Information

+
-
+
+ + + + diff --git a/demo/examples/src/appkit/actions/network/get-api-client.ts b/demo/examples/src/appkit/actions/network/get-api-client.ts new file mode 100644 index 000000000..b27379c8b --- /dev/null +++ b/demo/examples/src/appkit/actions/network/get-api-client.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getApiClient, Network } from '@ton/appkit'; +import type { AppKit } from '@ton/appkit'; + +export const getApiClientExample = (appKit: AppKit) => { + // SAMPLE_START: GET_API_CLIENT + const apiClient = getApiClient(appKit, { + network: Network.mainnet(), + }); + + console.log('API Client:', apiClient); + // SAMPLE_END: GET_API_CLIENT +}; diff --git a/demo/examples/src/appkit/actions/staking/staking-actions.ts b/demo/examples/src/appkit/actions/staking/staking-actions.ts new file mode 100644 index 000000000..998774e7f --- /dev/null +++ b/demo/examples/src/appkit/actions/staking/staking-actions.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { AppKit } from '@ton/appkit'; +import { + getStakingQuote, + buildStakeTransaction, + getStakedBalance, + getStakingProviders, + getStakingProviderInfo, +} from '@ton/appkit'; + +export const stakingExample = async (appKit: AppKit) => { + const userAddress = 'EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c'; + + // SAMPLE_START: GET_STAKING_PROVIDERS + const providers = await getStakingProviders(appKit); + console.log('Available Staking Providers:', providers); + // SAMPLE_END: GET_STAKING_PROVIDERS + + // SAMPLE_START: GET_STAKING_PROVIDER_INFO + const providerInfo = await getStakingProviderInfo(appKit, { + providerId: 'tonstakers', + }); + console.log('Provider Info:', providerInfo); + // SAMPLE_END: GET_STAKING_PROVIDER_INFO + + // SAMPLE_START: GET_STAKING_QUOTE + const quote = await getStakingQuote(appKit, { + amount: '1000000000', + direction: 'stake', + }); + console.log('Staking Quote:', quote); + // SAMPLE_END: GET_STAKING_QUOTE + + // SAMPLE_START: BUILD_STAKE_TRANSACTION + const txRequest = await buildStakeTransaction(appKit, { + quote, + userAddress, + }); + console.log('Stake Transaction:', txRequest); + // SAMPLE_END: BUILD_STAKE_TRANSACTION + + // SAMPLE_START: GET_STAKED_BALANCE + const balance = await getStakedBalance(appKit, { + userAddress, + }); + console.log('Staked Balance:', balance); + // SAMPLE_END: GET_STAKED_BALANCE +}; diff --git a/demo/examples/src/appkit/hooks/staking/use-staking.tsx b/demo/examples/src/appkit/hooks/staking/use-staking.tsx new file mode 100644 index 000000000..4b879cdb2 --- /dev/null +++ b/demo/examples/src/appkit/hooks/staking/use-staking.tsx @@ -0,0 +1,29 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { useStakingQuote, useStakedBalance } from '@ton/appkit-react'; + +export const UseStakingExample = () => { + // SAMPLE_START: USE_STAKING + const { data: quote } = useStakingQuote({ + amount: '1000000000', + direction: 'stake', + }); + + const { data: balance } = useStakedBalance({ + userAddress: 'EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c', + }); + + return ( +
+
Staking Quote: {quote?.amountOut}
+
Staked Balance: {balance?.stakedBalance}
+
+ ); + // SAMPLE_END: USE_STAKING +}; diff --git a/demo/examples/src/appkit/staking/tonstakers.ts b/demo/examples/src/appkit/staking/tonstakers.ts new file mode 100644 index 000000000..f2ccf5267 --- /dev/null +++ b/demo/examples/src/appkit/staking/tonstakers.ts @@ -0,0 +1,63 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { AppKit, Network, registerProvider, ApiClientToncenter, getApiClient } from '@ton/appkit'; +import { TonStakersStakingProvider } from '@ton/appkit/staking/tonstakers'; + +export const stakingProviderInitExample = async () => { + // SAMPLE_START: STAKING_PROVIDER_INIT + // Initialize AppKit with staking providers + const network = Network.mainnet(); + const toncenterApiClient = new ApiClientToncenter({ network }); + const appKit = new AppKit({ + networks: { + [network.chainId]: { + apiClient: toncenterApiClient, + }, + }, + providers: [ + new TonStakersStakingProvider({ + [network.chainId]: { + apiClient: toncenterApiClient, + }, + }), + ], + }); + // SAMPLE_END: STAKING_PROVIDER_INIT + + return appKit; +}; + +export const stakingProviderRegisterExample = async () => { + // SAMPLE_START: STAKING_PROVIDER_REGISTER + // 1. Initialize AppKit + const appKit = new AppKit({ + networks: { + [Network.mainnet().chainId]: { + apiClient: { + url: 'https://toncenter.com', + key: 'your-key', + }, + }, + }, + }); + + // 2. Register staking providers + const apiClient = getApiClient(appKit, { network: Network.mainnet() }); + registerProvider( + appKit, + new TonStakersStakingProvider({ + [Network.mainnet().chainId]: { + apiClient, + }, + }), + ); + // SAMPLE_END: STAKING_PROVIDER_REGISTER + + return appKit; +}; diff --git a/demo/wallet-core/src/hooks/useWalletStore.ts b/demo/wallet-core/src/hooks/useWalletStore.ts index d3d6bd174..9d3c296e8 100644 --- a/demo/wallet-core/src/hooks/useWalletStore.ts +++ b/demo/wallet-core/src/hooks/useWalletStore.ts @@ -217,15 +217,43 @@ export const useSwap = () => { isReverseSwap: state.swap.isReverseSwap, setFromToken: state.setFromToken, setToToken: state.setToToken, - setAmount: state.setAmount, + setSwapAmount: state.setSwapAmount, setDestinationAddress: state.setDestinationAddress, setSlippageBps: state.setSlippageBps, setIsReverseSwap: state.setIsReverseSwap, swapTokens: state.swapTokens, - getQuote: state.getQuote, + getSwapQuote: state.getSwapQuote, executeSwap: state.executeSwap, clearSwap: state.clearSwap, validateSwapInputs: state.validateSwapInputs, })), ); }; +/** + * Hook for Staking + */ +export const useStaking = () => { + return useWalletStore( + useShallow((state) => ({ + amount: state.staking.amount, + providerId: state.staking.providerId, + currentQuote: state.staking.currentQuote, + isLoadingQuote: state.staking.isLoadingQuote, + isStaking: state.staking.isStaking, + isUnstaking: state.staking.isUnstaking, + error: state.staking.error, + stakedBalance: state.staking.stakedBalance, + providerInfo: state.staking.providerInfo, + unstakeMode: state.staking.unstakeMode, + setStakingAmount: state.setStakingAmount, + setStakingProviderId: state.setStakingProviderId, + setUnstakeMode: state.setUnstakeMode, + getStakingQuote: state.getStakingQuote, + stake: state.stake, + unstake: state.unstake, + loadStakingData: state.loadStakingData, + clearStaking: state.clearStaking, + validateStakingInputs: state.validateStakingInputs, + })), + ); +}; diff --git a/demo/wallet-core/src/index.ts b/demo/wallet-core/src/index.ts index 23cc7cd79..2e1f8fdd9 100644 --- a/demo/wallet-core/src/index.ts +++ b/demo/wallet-core/src/index.ts @@ -30,6 +30,7 @@ export { useNfts, useJettons, useSwap, + useStaking, } from './hooks/useWalletStore'; export { useFormattedTonBalance, useFormattedAmount } from './hooks/useFormattedBalance'; export { useWalletInitialization } from './hooks/useWalletInitialization'; @@ -45,6 +46,7 @@ export type { JettonsSlice, NftsSlice, SwapSlice, + StakingSlice, } from './types/store'; export type { diff --git a/demo/wallet-core/src/store/createWalletStore.ts b/demo/wallet-core/src/store/createWalletStore.ts index 13d92b411..93698dd05 100644 --- a/demo/wallet-core/src/store/createWalletStore.ts +++ b/demo/wallet-core/src/store/createWalletStore.ts @@ -17,6 +17,7 @@ import { createTonConnectSlice } from './slices/tonConnectSlice'; import { createJettonsSlice } from './slices/jettonsSlice'; import { createNftsSlice } from './slices/nftsSlice'; import { createSwapSlice } from './slices/swapSlice'; +import { createStakingSlice } from './slices/stakingSlice'; import type { AppState } from '../types/store'; import type { StorageAdapter } from '../adapters/storage/types'; import type { WalletKitConfig } from '../types/wallet'; @@ -141,6 +142,9 @@ export function createWalletStore(options: CreateWalletStoreOptions = {}) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ...createSwapSlice(...a), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + ...createStakingSlice(...a), // eslint-disable-next-line @typescript-eslint/no-explicit-any })) as unknown as any, { diff --git a/demo/wallet-core/src/store/slices/stakingSlice.ts b/demo/wallet-core/src/store/slices/stakingSlice.ts new file mode 100644 index 000000000..c71531ef5 --- /dev/null +++ b/demo/wallet-core/src/store/slices/stakingSlice.ts @@ -0,0 +1,249 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakeParams, StakingQuoteParams, UnstakeParams, UnstakeMode } from '@ton/walletkit'; + +import { createComponentLogger } from '../../utils/logger'; +import type { SetState, StakingSliceCreator } from '../../types/store'; + +const log = createComponentLogger('StakingSlice'); + +export const createStakingSlice: StakingSliceCreator = (set: SetState, get) => ({ + staking: { + amount: '', + providerId: 'tonstakers', + currentQuote: null, + isLoadingQuote: false, + isStaking: false, + isUnstaking: false, + error: null, + unstakeMode: 'delayed', + stakedBalance: null, + providerInfo: null, + }, + + setStakingAmount: (amount: string) => { + set((state) => { + if (amount === '' || /^\d*\.?\d*$/.test(amount)) { + state.staking.amount = amount; + state.staking.currentQuote = null; + state.staking.error = null; + } + }); + }, + + setStakingProviderId: (providerId: string) => { + set((state) => { + state.staking.providerId = providerId; + state.staking.currentQuote = null; + state.staking.error = null; + }); + }, + setUnstakeMode: (unstakeMode: UnstakeMode) => { + set((state) => { + state.staking.unstakeMode = unstakeMode; + state.staking.currentQuote = null; + state.staking.error = null; + }); + }, + + validateStakingInputs: () => { + const state = get(); + const { amount } = state.staking; + + if (!amount || amount === '') { + return 'Please enter an amount'; + } + + const amountToValidate = parseFloat(amount); + if (isNaN(amountToValidate)) { + return 'Please enter a valid number'; + } + + if (amountToValidate <= 0) { + return 'Amount must be greater than 0'; + } + + const tonBalanceStr = state.walletManagement.balance; + if (!tonBalanceStr) { + return 'Insufficient balance'; + } + + return null; + }, + + getStakingQuote: async (params: Omit) => { + const state = get(); + const { providerId } = state.staking; + + if (!state.walletCore.walletKit) { + set((state) => { + state.staking.error = 'WalletKit not initialized'; + }); + return; + } + + const network = state.walletManagement.currentWallet?.getNetwork(); + if (!network) { + set((state) => { + state.staking.error = 'No active wallet'; + }); + return; + } + + set((state) => { + state.staking.isLoadingQuote = true; + state.staking.error = null; + }); + + try { + const quote = await state.walletCore.walletKit.staking.getQuote( + { + ...params, + network, + unstakeMode: state.staking.unstakeMode, + }, + providerId, + ); + + set((state) => { + state.staking.currentQuote = quote; + state.staking.isLoadingQuote = false; + }); + } catch (error) { + log.error('Failed to get staking quote:', error); + const errorMessage = error instanceof Error ? error.message : 'Failed to get quote'; + set((state) => { + state.staking.isLoadingQuote = false; + state.staking.error = errorMessage; + }); + } + }, + + stake: async (params: Omit) => { + const state = get(); + const { providerId } = state.staking; + const userAddress = state.walletManagement.address; + + if (!state.walletCore.walletKit || !state.walletManagement.currentWallet || !userAddress) { + set((state) => { + state.staking.error = 'Wallet not ready'; + }); + return; + } + + set((state) => { + state.staking.isStaking = true; + state.staking.error = null; + }); + + try { + const transaction = await state.walletCore.walletKit.staking.buildStakeTransaction( + { + ...params, + userAddress, + }, + providerId, + ); + + await state.walletCore.walletKit.handleNewTransaction(state.walletManagement.currentWallet, transaction); + + set((state) => { + state.staking.isStaking = false; + state.staking.amount = ''; + state.staking.currentQuote = null; + }); + } catch (error) { + log.error('Failed to stake:', error); + const errorMessage = error instanceof Error ? error.message : 'Failed to stake'; + set((state) => { + state.staking.isStaking = false; + state.staking.error = errorMessage; + }); + } + }, + + unstake: async (params: Omit) => { + const state = get(); + const { providerId } = state.staking; + const userAddress = state.walletManagement.address; + + if (!state.walletCore.walletKit || !state.walletManagement.currentWallet || !userAddress) { + set((state) => { + state.staking.error = 'Wallet not ready'; + }); + return; + } + + set((state) => { + state.staking.isUnstaking = true; + state.staking.error = null; + }); + + try { + const transaction = await state.walletCore.walletKit.staking.buildUnstakeTransaction( + { + ...params, + userAddress, + }, + providerId, + ); + + await state.walletCore.walletKit.handleNewTransaction(state.walletManagement.currentWallet, transaction); + + set((state) => { + state.staking.isUnstaking = false; + state.staking.amount = ''; + state.staking.currentQuote = null; + }); + } catch (error) { + log.error('Failed to unstake:', error); + const errorMessage = error instanceof Error ? error.message : 'Failed to unstake'; + set((state) => { + state.staking.isUnstaking = false; + state.staking.error = errorMessage; + }); + } + }, + + loadStakingData: async (userAddress: string) => { + const state = get(); + const { providerId } = state.staking; + + if (!state.walletCore.walletKit) return; + + const network = state.walletManagement.currentWallet?.getNetwork(); + + try { + const [balance, info] = await Promise.all([ + state.walletCore.walletKit.staking.getStakedBalance(userAddress, network, providerId), + state.walletCore.walletKit.staking.getStakingProviderInfo(network, providerId), + ]); + + set((state) => { + state.staking.stakedBalance = balance; + state.staking.providerInfo = info; + }); + } catch (error) { + log.error('Failed to load staking data:', error); + } + }, + + clearStaking: () => { + set((state) => { + state.staking.amount = ''; + state.staking.currentQuote = null; + state.staking.isLoadingQuote = false; + state.staking.isStaking = false; + state.staking.isUnstaking = false; + state.staking.error = null; + state.staking.stakedBalance = null; + state.staking.providerInfo = null; + }); + }, +}); diff --git a/demo/wallet-core/src/store/slices/swapSlice.ts b/demo/wallet-core/src/store/slices/swapSlice.ts index 3debacd36..7bd667437 100644 --- a/demo/wallet-core/src/store/slices/swapSlice.ts +++ b/demo/wallet-core/src/store/slices/swapSlice.ts @@ -51,7 +51,7 @@ export const createSwapSlice: SwapSliceCreator = (set: SetState, get) => ({ }); }, - setAmount: (amount: string) => { + setSwapAmount: (amount: string) => { set((state) => { // Allow empty string or valid number input if (amount === '' || /^\d*\.?\d*$/.test(amount)) { @@ -155,7 +155,7 @@ export const createSwapSlice: SwapSliceCreator = (set: SetState, get) => ({ return null; }, - getQuote: async () => { + getSwapQuote: async () => { const state = get(); const { fromToken, toToken, amount, isReverseSwap, slippageBps } = state.swap; diff --git a/demo/wallet-core/src/store/slices/walletCoreSlice.ts b/demo/wallet-core/src/store/slices/walletCoreSlice.ts index f2b4e1e42..cda8d6778 100644 --- a/demo/wallet-core/src/store/slices/walletCoreSlice.ts +++ b/demo/wallet-core/src/store/slices/walletCoreSlice.ts @@ -9,6 +9,7 @@ import { TonWalletKit, Network, createDeviceInfo, createWalletManifest, ApiClientTonApi } from '@ton/walletkit'; import type { ITonWalletKit } from '@ton/walletkit'; import { OmnistonSwapProvider } from '@ton/walletkit/swap/omniston'; +import { TonStakersStakingProvider } from '@ton/walletkit/staking/tonstakers'; import { createComponentLogger } from '../../utils/logger'; import { isExtension } from '../../utils/isExtension'; @@ -34,7 +35,6 @@ function createWalletKitInstance(walletKitConfig?: WalletKitConfig): ITonWalletK jsBridgeTransport: walletKitConfig?.jsBridgeTransport, }, - // TODO: Tetra networks: { [Network.mainnet().chainId]: { apiClient: { @@ -74,6 +74,16 @@ function createWalletKitInstance(walletKitConfig?: WalletKitConfig): ITonWalletK }) as ITonWalletKit; walletKit.swap.registerProvider(new OmnistonSwapProvider()); + walletKit.staking.registerProvider( + new TonStakersStakingProvider({ + [Network.mainnet().chainId]: { + apiClient: walletKit.getApiClient(Network.mainnet()), + }, + [Network.testnet().chainId]: { + apiClient: walletKit.getApiClient(Network.testnet()), + }, + }), + ); log.info(`WalletKit initialized with network: ${isExtension() ? 'extension' : 'web'}`); return walletKit; diff --git a/demo/wallet-core/src/types/store.ts b/demo/wallet-core/src/types/store.ts index 6450382fd..ad0859692 100644 --- a/demo/wallet-core/src/types/store.ts +++ b/demo/wallet-core/src/types/store.ts @@ -21,6 +21,13 @@ import type { WalletAdapter, SwapQuote, SwapToken, + StakingQuote, + StakingQuoteParams, + StakingBalance, + StakingProviderInfo, + StakeParams, + UnstakeParams, + UnstakeMode, } from '@ton/walletkit'; import type { @@ -217,17 +224,45 @@ export interface SwapState { isReverseSwap: boolean; } +// Staking slice interface +export interface StakingState { + amount: string; + providerId: string; + currentQuote: StakingQuote | null; + isLoadingQuote: boolean; + isStaking: boolean; + isUnstaking: boolean; + error: string | null; + unstakeMode: UnstakeMode; + stakedBalance: StakingBalance | null; + providerInfo: StakingProviderInfo | null; +} + +export interface StakingSlice { + staking: StakingState; + + setStakingAmount: (amount: string) => void; + setStakingProviderId: (providerId: string) => void; + setUnstakeMode: (mode: UnstakeMode) => void; + getStakingQuote: (params: Omit) => Promise; + stake: (params: Omit) => Promise; + unstake: (params: Omit) => Promise; + loadStakingData: (userAddress: string) => Promise; + clearStaking: () => void; + validateStakingInputs: () => string | null; +} + export interface SwapSlice { swap: SwapState; setFromToken: (token: SwapToken) => void; setToToken: (token: SwapToken) => void; - setAmount: (amount: string) => void; + setSwapAmount: (amount: string) => void; setDestinationAddress: (address: string) => void; setIsReverseSwap: (isReverseSwap: boolean) => void; setSlippageBps: (slippage: number) => void; swapTokens: () => void; - getQuote: () => Promise; + getSwapQuote: () => Promise; executeSwap: () => Promise; clearSwap: () => void; validateSwapInputs: () => string | null; @@ -235,13 +270,15 @@ export interface SwapSlice { // Combined app state export interface AppState - extends AuthSlice, + extends + AuthSlice, WalletCoreSlice, WalletManagementSlice, TonConnectSlice, JettonsSlice, NftsSlice, - SwapSlice { + SwapSlice, + StakingSlice { isHydrated: boolean; } @@ -265,6 +302,8 @@ export type NftsSliceCreator = StateCreator; export type SwapSliceCreator = StateCreator; +export type StakingSliceCreator = StateCreator; + // Migration types export interface MigrationState { version: number; diff --git a/eslint.config.js b/eslint.config.js index f7c969dda..802a0ac12 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -33,6 +33,7 @@ module.exports = [ '**/Packages/TONWalletKit/*', '**/TONWalletApp/TONWalletApp/*', '**/androidkit/**', + '**/analytics/swagger/generated.ts', ], }, { diff --git a/packages/appkit-react/README.md b/packages/appkit-react/README.md index a89769a62..579fb3f4f 100644 --- a/packages/appkit-react/README.md +++ b/packages/appkit-react/README.md @@ -199,6 +199,34 @@ Use `useSwapQuote` to get a quote and `useBuildSwapTransaction` to build the tra See [Swap Hooks](./docs/hooks.md#swap) for usage examples. +## Staking + +AppKit supports staking through various providers (e.g., Tonstakers). The staking functionality is integrated into the core action and hook system. + +### Hooks + +Use `useStakingQuote` to get a staking/unstaking quote and `useBuildStakeTransaction` or `useBuildUnstakeTransaction` to build the transaction. + +[Read more about Staking](https://github.com/ton-connect/kit/tree/main/packages/appkit/docs/staking.md) + +```tsx +const { data: quote } = useStakingQuote({ + amount: '1000000000', + direction: 'stake', +}); + +const { data: balance } = useStakedBalance({ + userAddress: 'EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c', +}); + +return ( +
+
Staking Quote: {quote?.amountOut}
+
Staked Balance: {balance?.stakedBalance}
+
+); +``` + ## Migration from TonConnect UI `AppKitProvider` automatically bridges TonConnect if a `TonConnectConnector` is configured, so `@tonconnect/ui-react` hooks (like `useTonAddress`, `useTonWallet`, etc.) work out of the box inside `AppKitProvider`. diff --git a/packages/appkit-react/src/features/staking/hooks/use-build-stake-transaction.ts b/packages/appkit-react/src/features/staking/hooks/use-build-stake-transaction.ts new file mode 100644 index 000000000..fb77ccb81 --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-build-stake-transaction.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UseMutationResult } from '@tanstack/react-query'; +import { buildStakeTransactionMutationOptions } from '@ton/appkit/queries'; +import type { + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + BuildStakeTransactionVariables, +} from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useMutation } from '../../../libs/query'; + +export type UseBuildStakeTransactionReturnType = UseMutationResult< + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + BuildStakeTransactionVariables, + context +>; + +/** + * Hook to build stake transaction + */ +export const useBuildStakeTransaction = (): UseBuildStakeTransactionReturnType => { + const appKit = useAppKit(); + return useMutation(buildStakeTransactionMutationOptions(appKit)); +}; diff --git a/packages/appkit-react/src/features/staking/hooks/use-build-unstake-transaction.ts b/packages/appkit-react/src/features/staking/hooks/use-build-unstake-transaction.ts new file mode 100644 index 000000000..928f5ab09 --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-build-unstake-transaction.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UseMutationResult } from '@tanstack/react-query'; +import { buildUnstakeTransactionMutationOptions } from '@ton/appkit/queries'; +import type { + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + BuildUnstakeTransactionVariables, +} from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useMutation } from '../../../libs/query'; + +export type UseBuildUnstakeTransactionReturnType = UseMutationResult< + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + BuildUnstakeTransactionVariables, + context +>; + +/** + * Hook to build unstake transaction + */ +export const useBuildUnstakeTransaction = (): UseBuildUnstakeTransactionReturnType => { + const appKit = useAppKit(); + return useMutation(buildUnstakeTransactionMutationOptions(appKit)); +}; diff --git a/packages/appkit-react/src/features/staking/hooks/use-staked-balance.ts b/packages/appkit-react/src/features/staking/hooks/use-staked-balance.ts new file mode 100644 index 000000000..afb01b6a5 --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-staked-balance.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakedBalanceQueryOptions } from '@ton/appkit/queries'; +import type { GetStakedBalanceData, GetStakedBalanceErrorType, GetStakedBalanceQueryConfig } from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useQuery } from '../../../libs/query'; +import type { UseQueryReturnType } from '../../../libs/query'; + +export type UseStakedBalanceParameters = GetStakedBalanceQueryConfig; +export type UseStakedBalanceReturnType = UseQueryReturnType< + selectData, + GetStakedBalanceErrorType +>; + +/** + * Hook to get user's staked balance + */ +export const useStakedBalance = ( + parameters: UseStakedBalanceParameters = {}, +): UseStakedBalanceReturnType => { + const appKit = useAppKit(); + return useQuery(getStakedBalanceQueryOptions(appKit, parameters)); +}; diff --git a/packages/appkit-react/src/features/staking/hooks/use-staking-provider-info.ts b/packages/appkit-react/src/features/staking/hooks/use-staking-provider-info.ts new file mode 100644 index 000000000..ed528d9b7 --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-staking-provider-info.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingProviderInfoQueryOptions } from '@ton/appkit/queries'; +import type { + GetStakingProviderInfoData, + GetStakingProviderInfoErrorType, + GetStakingProviderInfoQueryConfig, +} from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useQuery } from '../../../libs/query'; +import type { UseQueryReturnType } from '../../../libs/query'; + +export type UseStakingProviderInfoParameters = + GetStakingProviderInfoQueryConfig; +export type UseStakingProviderInfoReturnType = UseQueryReturnType< + selectData, + GetStakingProviderInfoErrorType +>; + +/** + * Hook to get staking provider information + */ +export const useStakingProviderInfo = ( + parameters: UseStakingProviderInfoParameters = {}, +): UseStakingProviderInfoReturnType => { + const appKit = useAppKit(); + return useQuery(getStakingProviderInfoQueryOptions(appKit, parameters)); +}; diff --git a/packages/appkit-react/src/features/staking/hooks/use-staking-providers.ts b/packages/appkit-react/src/features/staking/hooks/use-staking-providers.ts new file mode 100644 index 000000000..fc97cfdee --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-staking-providers.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingProvidersQueryOptions } from '@ton/appkit/queries'; +import type { + GetStakingProvidersData, + GetStakingProvidersErrorType, + GetStakingProvidersQueryConfig, +} from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useQuery } from '../../../libs/query'; +import type { UseQueryReturnType } from '../../../libs/query'; + +export type UseStakingProvidersParameters = + GetStakingProvidersQueryConfig; +export type UseStakingProvidersReturnType = UseQueryReturnType< + selectData, + GetStakingProvidersErrorType +>; + +/** + * Hook to get available staking provider IDs + */ +export const useStakingProviders = ( + parameters: UseStakingProvidersParameters = {}, +): UseStakingProvidersReturnType => { + const appKit = useAppKit(); + return useQuery(getStakingProvidersQueryOptions(appKit, parameters)); +}; diff --git a/packages/appkit-react/src/features/staking/hooks/use-staking-quote.ts b/packages/appkit-react/src/features/staking/hooks/use-staking-quote.ts new file mode 100644 index 000000000..c011c67a4 --- /dev/null +++ b/packages/appkit-react/src/features/staking/hooks/use-staking-quote.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingQuoteQueryOptions } from '@ton/appkit/queries'; +import type { GetStakingQuoteData, GetStakingQuoteErrorType, GetStakingQuoteQueryConfig } from '@ton/appkit/queries'; + +import { useAppKit } from '../../../hooks/use-app-kit'; +import { useQuery } from '../../../libs/query'; +import type { UseQueryReturnType } from '../../../libs/query'; + +export type UseStakingQuoteParameters = GetStakingQuoteQueryConfig; +export type UseStakingQuoteReturnType = UseQueryReturnType< + selectData, + GetStakingQuoteErrorType +>; + +/** + * Hook to get staking/unstaking quote + */ +export const useStakingQuote = ( + parameters: UseStakingQuoteParameters = {}, +): UseStakingQuoteReturnType => { + const appKit = useAppKit(); + return useQuery(getStakingQuoteQueryOptions(appKit, parameters)); +}; diff --git a/packages/appkit-react/src/features/staking/index.ts b/packages/appkit-react/src/features/staking/index.ts new file mode 100644 index 000000000..4208045cc --- /dev/null +++ b/packages/appkit-react/src/features/staking/index.ts @@ -0,0 +1,33 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export { + useStakingProviders, + type UseStakingProvidersParameters, + type UseStakingProvidersReturnType, +} from './hooks/use-staking-providers'; +export { + useStakingQuote, + type UseStakingQuoteParameters, + type UseStakingQuoteReturnType, +} from './hooks/use-staking-quote'; +export { + useStakedBalance, + type UseStakedBalanceParameters, + type UseStakedBalanceReturnType, +} from './hooks/use-staked-balance'; +export { + useStakingProviderInfo, + type UseStakingProviderInfoParameters, + type UseStakingProviderInfoReturnType, +} from './hooks/use-staking-provider-info'; +export { useBuildStakeTransaction, type UseBuildStakeTransactionReturnType } from './hooks/use-build-stake-transaction'; +export { + useBuildUnstakeTransaction, + type UseBuildUnstakeTransactionReturnType, +} from './hooks/use-build-unstake-transaction'; diff --git a/packages/appkit-react/src/index.ts b/packages/appkit-react/src/index.ts index 823e8e4b3..e44576dce 100644 --- a/packages/appkit-react/src/index.ts +++ b/packages/appkit-react/src/index.ts @@ -27,3 +27,4 @@ export * from './features/transaction'; export * from './features/wallets'; export * from './features/swap'; export * from './features/signing'; +export * from './features/staking'; diff --git a/packages/appkit/docs/actions.md b/packages/appkit/docs/actions.md index 4c23d6756..ab25ef7ee 100644 --- a/packages/appkit/docs/actions.md +++ b/packages/appkit/docs/actions.md @@ -260,6 +260,18 @@ const networks = getNetworks(appKit); console.log('Configured networks:', networks); ``` +### `getApiClient` + +Get the API client for a specific network. + +```ts +const apiClient = getApiClient(appKit, { + network: Network.mainnet(), +}); + +console.log('API Client:', apiClient); +``` + ### `watchNetworks` Watch configured networks. @@ -438,6 +450,63 @@ const transactionResponse = await sendTransaction(appKit, transactionRequest); console.log('Swap Transaction:', transactionResponse); ``` +## Staking + +### `getStakingProviders` + +Get all available staking provider IDs. + +```ts +const providers = await getStakingProviders(appKit); +console.log('Available Staking Providers:', providers); +``` + +### `getStakingProviderInfo` + +Get information about a specific staking provider. + +```ts +const providerInfo = await getStakingProviderInfo(appKit, { + providerId: 'tonstakers', +}); +console.log('Provider Info:', providerInfo); +``` + +### `getStakingQuote` + +Get a staking or unstaking quote. + +```ts +const quote = await getStakingQuote(appKit, { + amount: '1000000000', + direction: 'stake', +}); +console.log('Staking Quote:', quote); +``` + +### `buildStakeTransaction` + +Build a stake transaction based on a quote. + +```ts +const txRequest = await buildStakeTransaction(appKit, { + quote, + userAddress, +}); +console.log('Stake Transaction:', txRequest); +``` + +### `getStakedBalance` + +Get the user's staked balance. + +```ts +const balance = await getStakedBalance(appKit, { + userAddress, +}); +console.log('Staked Balance:', balance); +``` + ## Transaction ### `createTransferTonTransaction` diff --git a/packages/appkit/docs/staking.md b/packages/appkit/docs/staking.md new file mode 100644 index 000000000..84dcef800 --- /dev/null +++ b/packages/appkit/docs/staking.md @@ -0,0 +1,72 @@ + + +# Staking + +AppKit supports staking through various providers. Available providers: + +- **TonStakersStakingProvider** – [Tonstakers](https://tonstakers.com) liquid staking protocol + +## Installation + +Staking providers are included in the `@ton/appkit` package. No extra dependencies are required. + +## Setup + +You can set up staking providers by passing them to the `AppKit` constructor. + +```ts +// Initialize AppKit with staking providers +const network = Network.mainnet(); +const toncenterApiClient = new ApiClientToncenter({ network }); +const appKit = new AppKit({ + networks: { + [network.chainId]: { + apiClient: toncenterApiClient, + }, + }, + providers: [ + new TonStakersStakingProvider({ + [network.chainId]: { + apiClient: toncenterApiClient, + }, + }), + ], +}); +``` + +### Register Dynamically + +Alternatively, you can register providers dynamically using `registerProvider`: + +```ts +// 1. Initialize AppKit +const appKit = new AppKit({ + networks: { + [Network.mainnet().chainId]: { + apiClient: { + url: 'https://toncenter.com', + key: 'your-key', + }, + }, + }, +}); + +// 2. Register staking providers +const apiClient = getApiClient(appKit, { network: Network.mainnet() }); +registerProvider( + appKit, + new TonStakersStakingProvider({ + [Network.mainnet().chainId]: { + apiClient, + }, + }), +); +``` + +## Configuration + +- **Tonstakers**: [Tonstakers documentation](https://docs.tonstakers.com) and [provider README](https://github.com/ton-connect/kit/blob/main/packages/walletkit/src/defi/staking/tonstakers/README.md) diff --git a/packages/appkit/package.json b/packages/appkit/package.json index 3b422e2b3..57b776331 100644 --- a/packages/appkit/package.json +++ b/packages/appkit/package.json @@ -50,18 +50,31 @@ "types": "./dist/cjs/swap/dedust/index.d.ts", "default": "./dist/cjs/swap/dedust/index.js" } + }, + "./staking/tonstakers": { + "import": { + "types": "./dist/esm/staking/tonstakers/index.d.ts", + "default": "./dist/esm/staking/tonstakers/index.js" + }, + "require": { + "types": "./dist/cjs/staking/tonstakers/index.d.ts", + "default": "./dist/cjs/staking/tonstakers/index.js" + } } }, "typesVersions": { "*": { "queries": [ - "./dist/cjs/queries/index.d.ts" + "./dist/esm/queries/index.d.ts" ], "swap/omniston": [ - "./dist/cjs/swap/omniston/index.d.ts" + "./dist/esm/swap/omniston/index.d.ts" ], "swap/dedust": [ - "./dist/cjs/swap/dedust/index.d.ts" + "./dist/esm/swap/dedust/index.d.ts" + ], + "staking/tonstakers": [ + "./dist/esm/staking/tonstakers/index.d.ts" ] } }, diff --git a/packages/appkit/src/actions/index.ts b/packages/appkit/src/actions/index.ts index 6edc5f557..6400b1916 100644 --- a/packages/appkit/src/actions/index.ts +++ b/packages/appkit/src/actions/index.ts @@ -67,6 +67,7 @@ export { // Network export { getNetworks, type GetNetworksReturnType } from './network/get-networks'; export { getNetwork, type GetNetworkReturnType } from './network/get-network'; +export { getApiClient, type GetApiClientOptions, type GetApiClientReturnType } from './network/get-api-client'; export { watchNetworks, type WatchNetworksParameters, type WatchNetworksReturnType } from './network/watch-networks'; export { getDefaultNetwork, type GetDefaultNetworkReturnType } from './network/get-default-network'; export { @@ -107,6 +108,35 @@ export { type BuildSwapTransactionReturnType, } from './swap/build-swap-transaction'; +// Staking +export { getStakingManager, type GetStakingManagerReturnType } from './staking/get-staking-manager'; +export { getStakingProviders, type GetStakingProvidersReturnType } from './staking/get-staking-providers'; +export { + getStakingQuote, + type GetStakingQuoteOptions, + type GetStakingQuoteReturnType, +} from './staking/get-staking-quote'; +export { + buildStakeTransaction, + type BuildStakeTransactionOptions, + type BuildStakeTransactionReturnType, +} from './staking/build-stake-transaction'; +export { + buildUnstakeTransaction, + type BuildUnstakeTransactionOptions, + type BuildUnstakeTransactionReturnType, +} from './staking/build-unstake-transaction'; +export { + getStakedBalance, + type GetStakedBalanceOptions, + type GetStakedBalanceReturnType, +} from './staking/get-staked-balance'; +export { + getStakingProviderInfo, + type GetStakingProviderInfoOptions, + type GetStakingProviderInfoReturnType, +} from './staking/get-staking-provider-info'; + // Transactions export { sendTransaction, diff --git a/packages/appkit/src/actions/network/get-api-client.ts b/packages/appkit/src/actions/network/get-api-client.ts new file mode 100644 index 000000000..ff19b546e --- /dev/null +++ b/packages/appkit/src/actions/network/get-api-client.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { Network } from '../../types/network'; +import type { AppKit } from '../../core/app-kit'; +import type { ApiClient } from '../../core/network'; + +export type GetApiClientReturnType = ApiClient; + +export type GetApiClientOptions = { network: Network }; + +/** + * Get API client for a network + */ +export const getApiClient = (appKit: AppKit, options: GetApiClientOptions): GetApiClientReturnType => { + return appKit.networkManager.getClient(options.network); +}; diff --git a/packages/appkit/src/actions/staking/build-stake-transaction.ts b/packages/appkit/src/actions/staking/build-stake-transaction.ts new file mode 100644 index 000000000..6cadb0f48 --- /dev/null +++ b/packages/appkit/src/actions/staking/build-stake-transaction.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakeParams } from '@ton/walletkit'; + +import type { TransactionRequest } from '../../types/transaction'; +import type { AppKit } from '../../core/app-kit'; + +export type BuildStakeTransactionOptions = StakeParams & { + providerId?: string; +}; + +export type BuildStakeTransactionReturnType = Promise; + +/** + * Build stake transaction + */ +export const buildStakeTransaction = async ( + appKit: AppKit, + options: BuildStakeTransactionOptions, +): BuildStakeTransactionReturnType => { + return appKit.stakingManager.buildStakeTransaction(options, options.providerId); +}; diff --git a/packages/appkit/src/actions/staking/build-unstake-transaction.ts b/packages/appkit/src/actions/staking/build-unstake-transaction.ts new file mode 100644 index 000000000..eb6e2c319 --- /dev/null +++ b/packages/appkit/src/actions/staking/build-unstake-transaction.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UnstakeParams } from '@ton/walletkit'; + +import type { TransactionRequest } from '../../types/transaction'; +import type { AppKit } from '../../core/app-kit'; + +export type BuildUnstakeTransactionOptions = UnstakeParams & { + providerId?: string; +}; + +export type BuildUnstakeTransactionReturnType = Promise; + +/** + * Build unstake transaction + */ +export const buildUnstakeTransaction = async ( + appKit: AppKit, + options: BuildUnstakeTransactionOptions, +): BuildUnstakeTransactionReturnType => { + return appKit.stakingManager.buildUnstakeTransaction(options, options.providerId); +}; diff --git a/packages/appkit/src/actions/staking/get-staked-balance.ts b/packages/appkit/src/actions/staking/get-staked-balance.ts new file mode 100644 index 000000000..f975dc764 --- /dev/null +++ b/packages/appkit/src/actions/staking/get-staked-balance.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakingBalance, UserFriendlyAddress, Network } from '@ton/walletkit'; + +import type { AppKit } from '../../core/app-kit'; +import { resolveNetwork } from '../../utils'; + +export type GetStakedBalanceOptions = { + userAddress: UserFriendlyAddress; + network?: Network; + providerId?: string; +}; + +export type GetStakedBalanceReturnType = Promise; + +/** + * Get staked balance + */ +export const getStakedBalance = async ( + appKit: AppKit, + options: GetStakedBalanceOptions, +): GetStakedBalanceReturnType => { + return appKit.stakingManager.getStakedBalance( + options.userAddress, + resolveNetwork(appKit, options.network), + options.providerId, + ); +}; diff --git a/packages/appkit/src/actions/staking/get-staking-manager.ts b/packages/appkit/src/actions/staking/get-staking-manager.ts new file mode 100644 index 000000000..d5243498f --- /dev/null +++ b/packages/appkit/src/actions/staking/get-staking-manager.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakingManager } from '@ton/walletkit'; + +import type { AppKit } from '../../core/app-kit'; + +export type GetStakingManagerReturnType = StakingManager; + +/** + * Get staking manager instance + */ +export const getStakingManager = (appKit: AppKit): GetStakingManagerReturnType => { + return appKit.stakingManager; +}; diff --git a/packages/appkit/src/actions/staking/get-staking-provider-info.ts b/packages/appkit/src/actions/staking/get-staking-provider-info.ts new file mode 100644 index 000000000..eab2a1b7b --- /dev/null +++ b/packages/appkit/src/actions/staking/get-staking-provider-info.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakingProviderInfo, Network } from '@ton/walletkit'; + +import { resolveNetwork } from '../../utils'; +import type { AppKit } from '../../core/app-kit'; + +export type GetStakingProviderInfoOptions = { + network?: Network; + providerId?: string; +}; + +export type GetStakingProviderInfoReturnType = Promise; + +/** + * Get staking provider info + */ +export const getStakingProviderInfo = async ( + appKit: AppKit, + options: GetStakingProviderInfoOptions = {}, +): GetStakingProviderInfoReturnType => { + return appKit.stakingManager.getStakingProviderInfo(resolveNetwork(appKit, options.network), options.providerId); +}; diff --git a/packages/appkit/src/actions/staking/get-staking-providers.ts b/packages/appkit/src/actions/staking/get-staking-providers.ts new file mode 100644 index 000000000..8720d52b0 --- /dev/null +++ b/packages/appkit/src/actions/staking/get-staking-providers.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { AppKit } from '../../core/app-kit'; + +export type GetStakingProvidersReturnType = string[]; + +/** + * Get available staking provider IDs + */ +export const getStakingProviders = (appKit: AppKit): GetStakingProvidersReturnType => { + return appKit.stakingManager.getRegisteredProviders(); +}; diff --git a/packages/appkit/src/actions/staking/get-staking-quote.ts b/packages/appkit/src/actions/staking/get-staking-quote.ts new file mode 100644 index 000000000..fa683764e --- /dev/null +++ b/packages/appkit/src/actions/staking/get-staking-quote.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { StakingQuote, StakingQuoteParams } from '@ton/walletkit'; + +import type { AppKit } from '../../core/app-kit'; +import { resolveNetwork } from '../../utils'; + +export type GetStakingQuoteOptions = StakingQuoteParams & { + providerId?: string; +}; + +export type GetStakingQuoteReturnType = Promise; + +/** + * Get staking quote + */ +export const getStakingQuote = async (appKit: AppKit, options: GetStakingQuoteOptions): GetStakingQuoteReturnType => { + const optionsWithNetwork = { + ...options, + network: resolveNetwork(appKit, options.network), + }; + + return appKit.stakingManager.getQuote(optionsWithNetwork, options.providerId); +}; diff --git a/packages/appkit/src/core/app-kit/services/app-kit.ts b/packages/appkit/src/core/app-kit/services/app-kit.ts index 094d7bf32..772843426 100644 --- a/packages/appkit/src/core/app-kit/services/app-kit.ts +++ b/packages/appkit/src/core/app-kit/services/app-kit.ts @@ -6,7 +6,8 @@ * */ -import { SwapManager } from '@ton/walletkit'; +import { SwapManager, StakingManager } from '@ton/walletkit'; +import type { SwapProviderInterface, StakingProviderInterface } from '@ton/walletkit'; import type { Provider } from 'src/types/provider'; import type { AppKitConfig } from '../types/config'; @@ -28,6 +29,7 @@ export class AppKit { readonly connectors: Connector[] = []; readonly walletsManager: WalletsManager; readonly swapManager: SwapManager; + readonly stakingManager: StakingManager; readonly networkManager: AppKitNetworkManager; readonly config: AppKitConfig; @@ -47,6 +49,7 @@ export class AppKit { this.networkManager = new AppKitNetworkManager({ networks }, this.emitter); this.walletsManager = new WalletsManager(this.emitter); this.swapManager = new SwapManager(); + this.stakingManager = new StakingManager(); if (config.connectors) { config.connectors.forEach((connector) => { @@ -99,7 +102,10 @@ export class AppKit { registerProvider(provider: Provider): void { switch (provider.type) { case 'swap': - this.swapManager.registerProvider(provider); + this.swapManager.registerProvider(provider as SwapProviderInterface); + break; + case 'staking': + this.stakingManager.registerProvider(provider as StakingProviderInterface); break; default: throw new Error('Unknown provider type'); diff --git a/packages/appkit/src/queries/index.ts b/packages/appkit/src/queries/index.ts index 76d47c950..910922c51 100644 --- a/packages/appkit/src/queries/index.ts +++ b/packages/appkit/src/queries/index.ts @@ -154,6 +154,49 @@ export { type BuildSwapTransactionVariables, } from './swap/build-swap-transaction'; +// Staking +export { + getStakingProvidersQueryOptions, + type GetStakingProvidersData, + type GetStakingProvidersErrorType, + type GetStakingProvidersQueryConfig, +} from './staking/get-staking-providers'; +export { + getStakingQuoteQueryOptions, + type GetStakingQuoteQueryConfig, + type GetStakingQuoteQueryOptions, + type GetStakingQuoteData, + type GetStakingQuoteErrorType, + type GetStakingQuoteQueryFnData, + type GetStakingQuoteQueryKey, +} from './staking/get-staking-quote'; +export { + getStakedBalanceQueryOptions, + type GetStakedBalanceQueryConfig, + type GetStakedBalanceData, + type GetStakedBalanceErrorType, +} from './staking/get-staked-balance'; +export { + getStakingProviderInfoQueryOptions, + type GetStakingProviderInfoQueryConfig, + type GetStakingProviderInfoData, + type GetStakingProviderInfoErrorType, +} from './staking/get-staking-provider-info'; +export { + buildStakeTransactionMutationOptions, + type BuildStakeTransactionData, + type BuildStakeTransactionErrorType, + type BuildStakeTransactionMutationOptions, + type BuildStakeTransactionVariables, +} from './staking/build-stake-transaction'; +export { + buildUnstakeTransactionMutationOptions, + type BuildUnstakeTransactionData, + type BuildUnstakeTransactionErrorType, + type BuildUnstakeTransactionMutationOptions, + type BuildUnstakeTransactionVariables, +} from './staking/build-unstake-transaction'; + // Transaction export { transferTonMutationOptions, diff --git a/packages/appkit/src/queries/staking/build-stake-transaction.ts b/packages/appkit/src/queries/staking/build-stake-transaction.ts new file mode 100644 index 000000000..f98b06c29 --- /dev/null +++ b/packages/appkit/src/queries/staking/build-stake-transaction.ts @@ -0,0 +1,79 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { MutateOptions, MutationOptions } from '@tanstack/query-core'; + +import type { AppKit } from '../../core/app-kit'; +import type { MutationParameter } from '../../types/query'; +import type { Compute } from '../../types/utils'; +import { buildStakeTransaction } from '../../actions/staking/build-stake-transaction'; +import type { + BuildStakeTransactionOptions, + BuildStakeTransactionReturnType, +} from '../../actions/staking/build-stake-transaction'; + +export type BuildStakeTransactionMutationOptions = MutationParameter< + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + BuildStakeTransactionVariables, + context +>; + +export const buildStakeTransactionMutationOptions = ( + appKit: AppKit, + options: BuildStakeTransactionMutationOptions = {}, +): BuildStakeTransactionMutationConfig => { + return { + ...options.mutation, + mutationFn(variables) { + return buildStakeTransaction(appKit, variables); + }, + mutationKey: ['buildStakeTransaction'], + }; +}; + +export type BuildStakeTransactionMutationConfig = MutationOptions< + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + BuildStakeTransactionVariables, + context +>; + +export type BuildStakeTransactionData = Compute>; + +export type BuildStakeTransactionErrorType = Error; + +export type BuildStakeTransactionVariables = BuildStakeTransactionOptions; + +export type BuildStakeTransactionMutate = ( + variables: BuildStakeTransactionVariables, + options?: + | Compute< + MutateOptions< + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + Compute, + context + > + > + | undefined, +) => void; + +export type BuildStakeTransactionMutateAsync = ( + variables: BuildStakeTransactionVariables, + options?: + | Compute< + MutateOptions< + BuildStakeTransactionData, + BuildStakeTransactionErrorType, + Compute, + context + > + > + | undefined, +) => Promise; diff --git a/packages/appkit/src/queries/staking/build-unstake-transaction.ts b/packages/appkit/src/queries/staking/build-unstake-transaction.ts new file mode 100644 index 000000000..e037e4dc5 --- /dev/null +++ b/packages/appkit/src/queries/staking/build-unstake-transaction.ts @@ -0,0 +1,79 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { MutateOptions, MutationOptions } from '@tanstack/query-core'; + +import type { AppKit } from '../../core/app-kit'; +import type { MutationParameter } from '../../types/query'; +import type { Compute } from '../../types/utils'; +import { buildUnstakeTransaction } from '../../actions/staking/build-unstake-transaction'; +import type { + BuildUnstakeTransactionOptions, + BuildUnstakeTransactionReturnType, +} from '../../actions/staking/build-unstake-transaction'; + +export type BuildUnstakeTransactionMutationOptions = MutationParameter< + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + BuildUnstakeTransactionVariables, + context +>; + +export const buildUnstakeTransactionMutationOptions = ( + appKit: AppKit, + options: BuildUnstakeTransactionMutationOptions = {}, +): BuildUnstakeTransactionMutationConfig => { + return { + ...options.mutation, + mutationFn(variables) { + return buildUnstakeTransaction(appKit, variables); + }, + mutationKey: ['buildUnstakeTransaction'], + }; +}; + +export type BuildUnstakeTransactionMutationConfig = MutationOptions< + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + BuildUnstakeTransactionVariables, + context +>; + +export type BuildUnstakeTransactionData = Compute>; + +export type BuildUnstakeTransactionErrorType = Error; + +export type BuildUnstakeTransactionVariables = BuildUnstakeTransactionOptions; + +export type BuildUnstakeTransactionMutate = ( + variables: BuildUnstakeTransactionVariables, + options?: + | Compute< + MutateOptions< + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + Compute, + context + > + > + | undefined, +) => void; + +export type BuildUnstakeTransactionMutateAsync = ( + variables: BuildUnstakeTransactionVariables, + options?: + | Compute< + MutateOptions< + BuildUnstakeTransactionData, + BuildUnstakeTransactionErrorType, + Compute, + context + > + > + | undefined, +) => Promise; diff --git a/packages/appkit/src/queries/staking/get-staked-balance.ts b/packages/appkit/src/queries/staking/get-staked-balance.ts new file mode 100644 index 000000000..5eb642cfc --- /dev/null +++ b/packages/appkit/src/queries/staking/get-staked-balance.ts @@ -0,0 +1,60 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakedBalance } from '../../actions/staking/get-staked-balance'; +import type { GetStakedBalanceOptions } from '../../actions/staking/get-staked-balance'; +import type { GetStakedBalanceReturnType } from '../../actions/staking/get-staked-balance'; +import type { AppKit } from '../../core/app-kit'; +import type { QueryOptions, QueryParameter } from '../../types/query'; +import type { Compute, ExactPartial } from '../../types/utils'; +import { filterQueryOptions } from '../../utils'; + +export type GetStakedBalanceErrorType = Error; + +export type GetStakedBalanceQueryConfig = Compute< + ExactPartial +> & + QueryParameter; + +export const getStakedBalanceQueryOptions = ( + appKit: AppKit, + options: GetStakedBalanceQueryConfig = {}, +): GetStakedBalanceQueryOptions => { + return { + ...options.query, + enabled: Boolean(options.userAddress && (options.query?.enabled ?? true)), + queryFn: async (context) => { + const [, parameters] = context.queryKey as [string, GetStakedBalanceOptions]; + if (!parameters.userAddress) { + throw new Error('userAddress is required'); + } + + return getStakedBalance(appKit, parameters); + }, + queryKey: getStakedBalanceQueryKey(options), + }; +}; + +export type GetStakedBalanceQueryFnData = Compute>; + +export type GetStakedBalanceData = GetStakedBalanceQueryFnData; + +export const getStakedBalanceQueryKey = ( + options: Compute> = {}, +): GetStakedBalanceQueryKey => { + return ['stakedBalance', filterQueryOptions(options as unknown as Record)] as const; +}; + +export type GetStakedBalanceQueryKey = readonly ['stakedBalance', Compute>]; + +export type GetStakedBalanceQueryOptions = QueryOptions< + GetStakedBalanceQueryFnData, + GetStakedBalanceErrorType, + selectData, + GetStakedBalanceQueryKey +>; diff --git a/packages/appkit/src/queries/staking/get-staking-provider-info.ts b/packages/appkit/src/queries/staking/get-staking-provider-info.ts new file mode 100644 index 000000000..2fd7d8545 --- /dev/null +++ b/packages/appkit/src/queries/staking/get-staking-provider-info.ts @@ -0,0 +1,63 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingProviderInfo } from '../../actions/staking/get-staking-provider-info'; +import type { GetStakingProviderInfoOptions } from '../../actions/staking/get-staking-provider-info'; +import type { GetStakingProviderInfoReturnType } from '../../actions/staking/get-staking-provider-info'; +import type { AppKit } from '../../core/app-kit'; +import type { QueryOptions, QueryParameter } from '../../types/query'; +import type { Compute, ExactPartial } from '../../types/utils'; +import { filterQueryOptions } from '../../utils'; + +export type GetStakingProviderInfoErrorType = Error; + +export type GetStakingProviderInfoQueryConfig = Compute< + ExactPartial +> & + QueryParameter< + GetStakingProviderInfoQueryFnData, + GetStakingProviderInfoErrorType, + selectData, + GetStakingProviderInfoQueryKey + >; + +export const getStakingProviderInfoQueryOptions = ( + appKit: AppKit, + options: GetStakingProviderInfoQueryConfig = {}, +): GetStakingProviderInfoQueryOptions => { + return { + ...options.query, + queryFn: async (context) => { + const [, parameters] = context.queryKey as [string, GetStakingProviderInfoOptions]; + return getStakingProviderInfo(appKit, parameters); + }, + queryKey: getStakingProviderInfoQueryKey(options), + }; +}; + +export type GetStakingProviderInfoQueryFnData = Compute>; + +export type GetStakingProviderInfoData = GetStakingProviderInfoQueryFnData; + +export const getStakingProviderInfoQueryKey = ( + options: Compute> = {}, +): GetStakingProviderInfoQueryKey => { + return ['stakingProviderInfo', filterQueryOptions(options as unknown as Record)] as const; +}; + +export type GetStakingProviderInfoQueryKey = readonly [ + 'stakingProviderInfo', + Compute>, +]; + +export type GetStakingProviderInfoQueryOptions = QueryOptions< + GetStakingProviderInfoQueryFnData, + GetStakingProviderInfoErrorType, + selectData, + GetStakingProviderInfoQueryKey +>; diff --git a/packages/appkit/src/queries/staking/get-staking-providers.ts b/packages/appkit/src/queries/staking/get-staking-providers.ts new file mode 100644 index 000000000..19c9846ad --- /dev/null +++ b/packages/appkit/src/queries/staking/get-staking-providers.ts @@ -0,0 +1,52 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingProviders } from '../../actions/staking/get-staking-providers'; +import type { GetStakingProvidersReturnType } from '../../actions/staking/get-staking-providers'; +import type { AppKit } from '../../core/app-kit'; +import type { QueryOptions, QueryParameter } from '../../types/query'; +import type { Compute } from '../../types/utils'; + +export type GetStakingProvidersErrorType = Error; + +export type GetStakingProvidersQueryConfig = QueryParameter< + GetStakingProvidersQueryFnData, + GetStakingProvidersErrorType, + selectData, + GetStakingProvidersQueryKey +>; + +export const getStakingProvidersQueryOptions = ( + appKit: AppKit, + options: GetStakingProvidersQueryConfig = {}, +): GetStakingProvidersQueryOptions => { + return { + ...options.query, + queryFn: async () => { + return getStakingProviders(appKit); + }, + queryKey: getStakingProvidersQueryKey(), + }; +}; + +export type GetStakingProvidersQueryFnData = Compute>; + +export type GetStakingProvidersData = GetStakingProvidersQueryFnData; + +export const getStakingProvidersQueryKey = (): GetStakingProvidersQueryKey => { + return ['stakingProviders'] as const; +}; + +export type GetStakingProvidersQueryKey = readonly ['stakingProviders']; + +export type GetStakingProvidersQueryOptions = QueryOptions< + GetStakingProvidersQueryFnData, + GetStakingProvidersErrorType, + selectData, + GetStakingProvidersQueryKey +>; diff --git a/packages/appkit/src/queries/staking/get-staking-quote.ts b/packages/appkit/src/queries/staking/get-staking-quote.ts new file mode 100644 index 000000000..363187089 --- /dev/null +++ b/packages/appkit/src/queries/staking/get-staking-quote.ts @@ -0,0 +1,60 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { getStakingQuote } from '../../actions/staking/get-staking-quote'; +import type { GetStakingQuoteOptions } from '../../actions/staking/get-staking-quote'; +import type { GetStakingQuoteReturnType } from '../../actions/staking/get-staking-quote'; +import type { AppKit } from '../../core/app-kit'; +import type { QueryOptions, QueryParameter } from '../../types/query'; +import type { Compute, ExactPartial } from '../../types/utils'; +import { filterQueryOptions } from '../../utils'; + +export type GetStakingQuoteErrorType = Error; + +export type GetStakingQuoteQueryConfig = Compute< + ExactPartial +> & + QueryParameter; + +export const getStakingQuoteQueryOptions = ( + appKit: AppKit, + options: GetStakingQuoteQueryConfig = {}, +): GetStakingQuoteQueryOptions => { + return { + ...options.query, + enabled: Boolean(options.amount && options.direction && (options.query?.enabled ?? true)), + queryFn: async (context) => { + const [, parameters] = context.queryKey as [string, GetStakingQuoteOptions]; + if (!parameters.amount || !parameters.direction) { + throw new Error('amount and direction are required'); + } + + return getStakingQuote(appKit, parameters); + }, + queryKey: getStakingQuoteQueryKey(options), + }; +}; + +export type GetStakingQuoteQueryFnData = Compute>; + +export type GetStakingQuoteData = GetStakingQuoteQueryFnData; + +export const getStakingQuoteQueryKey = ( + options: Compute> = {}, +): GetStakingQuoteQueryKey => { + return ['stakingQuote', filterQueryOptions(options as unknown as Record)] as const; +}; + +export type GetStakingQuoteQueryKey = readonly ['stakingQuote', Compute>]; + +export type GetStakingQuoteQueryOptions = QueryOptions< + GetStakingQuoteQueryFnData, + GetStakingQuoteErrorType, + selectData, + GetStakingQuoteQueryKey +>; diff --git a/packages/appkit/src/staking/index.ts b/packages/appkit/src/staking/index.ts new file mode 100644 index 000000000..ecea5a62d --- /dev/null +++ b/packages/appkit/src/staking/index.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export type { + StakeParams, + StakingAPI, + StakingQuote, + StakingQuoteParams, + StakingProvider, + StakingError, + StakingManager, + StakingBalance, + StakingProviderInfo, + StakingProviderInterface, + StakingQuoteDirection, + UnstakeMode, + UnstakeParams, +} from '@ton/walletkit'; diff --git a/packages/appkit/src/staking/tonstakers/index.ts b/packages/appkit/src/staking/tonstakers/index.ts new file mode 100644 index 000000000..9b56f3973 --- /dev/null +++ b/packages/appkit/src/staking/tonstakers/index.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export * from '@ton/walletkit/staking/tonstakers'; diff --git a/packages/appkit/src/types/provider.ts b/packages/appkit/src/types/provider.ts index b2cd46a28..51d5748df 100644 --- a/packages/appkit/src/types/provider.ts +++ b/packages/appkit/src/types/provider.ts @@ -6,9 +6,9 @@ * */ -import type { SwapProviderInterface } from '@ton/walletkit'; +import type { SwapProviderInterface, StakingProviderInterface } from '@ton/walletkit'; /** * Provider configuration */ -export type Provider = SwapProviderInterface; +export type Provider = SwapProviderInterface | StakingProviderInterface; diff --git a/packages/walletkit/package.json b/packages/walletkit/package.json index 26a8d3618..a4dad92b6 100644 --- a/packages/walletkit/package.json +++ b/packages/walletkit/package.json @@ -50,6 +50,16 @@ "types": "./dist/cjs/defi/swap/dedust/index.d.ts", "default": "./dist/cjs/defi/swap/dedust/index.js" } + }, + "./staking/tonstakers": { + "import": { + "types": "./dist/esm/defi/staking/tonstakers/index.d.ts", + "default": "./dist/esm/defi/staking/tonstakers/index.js" + }, + "require": { + "types": "./dist/cjs/defi/staking/tonstakers/index.d.ts", + "default": "./dist/cjs/defi/staking/tonstakers/index.js" + } } }, "typesVersions": { @@ -62,6 +72,9 @@ ], "swap/dedust": [ "./dist/cjs/defi/swap/dedust/index.d.ts" + ], + "staking/tonstakers": [ + "./dist/cjs/defi/staking/tonstakers/index.d.ts" ] } }, diff --git a/packages/walletkit/src/api/interfaces/DefiProvider.ts b/packages/walletkit/src/api/interfaces/DefiProvider.ts index f1a327f21..f4bf465f2 100644 --- a/packages/walletkit/src/api/interfaces/DefiProvider.ts +++ b/packages/walletkit/src/api/interfaces/DefiProvider.ts @@ -9,7 +9,7 @@ /** * Type of provider */ -export type DefiProviderType = 'swap'; +export type DefiProviderType = 'swap' | 'staking'; /** * Base interface for all providers diff --git a/packages/walletkit/src/api/interfaces/StakingAPI.ts b/packages/walletkit/src/api/interfaces/StakingAPI.ts new file mode 100644 index 000000000..402165146 --- /dev/null +++ b/packages/walletkit/src/api/interfaces/StakingAPI.ts @@ -0,0 +1,129 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { DefiManagerAPI } from './DefiManagerAPI'; +import type { DefiProvider } from './DefiProvider'; +import type { + Network, + StakeParams, + StakingBalance, + StakingProviderInfo, + StakingQuote, + StakingQuoteParams, + UnstakeParams, + TransactionRequest, + UserFriendlyAddress, + UnstakeMode, +} from '../models'; + +/** + * Staking API interface exposed by StakingManager + */ +export interface StakingAPI extends DefiManagerAPI { + /** + * Get a quote for staking or unstaking + * @param params Quote parameters (amount, direction, etc.) + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns A promise that resolves to a StakingQuote + */ + getQuote(params: StakingQuoteParams, providerId?: string): Promise; + + /** + * Build a transaction for staking + * @param params Staking parameters (quote, user address, etc.) + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns A promise that resolves to a TransactionRequest + */ + buildStakeTransaction(params: StakeParams, providerId?: string): Promise; + + /** + * Build a transaction for unstaking + * @param params Unstaking parameters (quote, user address, etc.) + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns A promise that resolves to a TransactionRequest + */ + buildUnstakeTransaction(params: UnstakeParams, providerId?: string): Promise; + + /** + * Get user's staked balance + * @param userAddress User address + * @param network Network to query (optional) + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns A promise that resolves to a StakingBalance + */ + getStakedBalance(userAddress: UserFriendlyAddress, network?: Network, providerId?: string): Promise; + + /** + * Get staking provider information + * @param network Network to query (optional) + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns A promise that resolves to a StakingProviderInfo + */ + getStakingProviderInfo(network?: Network, providerId?: string): Promise; + + /** + * Get supported unstake modes + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns An array of supported unstake modes + */ + getSupportedUnstakeModes(providerId?: string): UnstakeMode[]; +} + +/** + * Interface that all staking providers must implement + */ +export interface StakingProviderInterface extends DefiProvider { + readonly type: 'staking'; + + /** + * Unique identifier for the provider + */ + readonly providerId: string; + + /** + * Get a quote for staking or unstaking + * @param params Quote parameters including provider-specific options + * @returns A promise that resolves to a StakingQuote + */ + getQuote(params: StakingQuoteParams): Promise; + + /** + * Build a transaction for staking + * @param params Staking parameters including provider-specific options + * @returns A promise that resolves to a TransactionRequest + */ + buildStakeTransaction(params: StakeParams): Promise; + + /** + * Build a transaction for unstaking + * @param params Unstaking parameters including provider-specific options + * @returns A promise that resolves to a TransactionRequest + */ + buildUnstakeTransaction(params: UnstakeParams): Promise; + + /** + * Get user's staked balance + * @param userAddress User address + * @param network Network to query (optional) + * @returns A promise that resolves to a StakingBalance + */ + getStakedBalance(userAddress: UserFriendlyAddress, network?: Network): Promise; + + /** + * Get staking provider information + * @param network Network to query (optional) + * @returns A promise that resolves to a StakingProviderInfo + */ + getStakingProviderInfo(network?: Network): Promise; + + /** + * Get supported unstake modes + * @returns An array of supported unstake modes + */ + getSupportedUnstakeModes(): UnstakeMode[]; +} diff --git a/packages/walletkit/src/api/interfaces/index.ts b/packages/walletkit/src/api/interfaces/index.ts index 49ebc0c94..da88c2b56 100644 --- a/packages/walletkit/src/api/interfaces/index.ts +++ b/packages/walletkit/src/api/interfaces/index.ts @@ -9,9 +9,11 @@ export type { Wallet, WalletTonInterface, WalletNftInterface, WalletJettonInterface } from './Wallet'; export type { WalletAdapter } from './WalletAdapter'; export type { WalletSigner, ISigner } from './WalletSigner'; + // Defi interfaces export type { DefiManagerAPI } from './DefiManagerAPI'; -export type { SwapAPI, SwapProviderInterface } from './SwapAPI'; export type { DefiProvider } from './DefiProvider'; +export type { SwapAPI, SwapProviderInterface } from './SwapAPI'; +export type { StakingAPI, StakingProviderInterface } from './StakingAPI'; export type { TONConnectSessionManager } from './TONConnectSessionManager'; diff --git a/packages/walletkit/src/api/models/index.ts b/packages/walletkit/src/api/models/index.ts index e038205db..eecec5dc0 100644 --- a/packages/walletkit/src/api/models/index.ts +++ b/packages/walletkit/src/api/models/index.ts @@ -76,6 +76,16 @@ export type { SwapQuote } from './swaps/SwapQuote'; export type { SwapQuoteParams } from './swaps/SwapQuoteParams'; export type { SwapParams } from './swaps/SwapParams'; +// Staking models +export type { StakeParams } from './staking/StakeParams'; +export type { StakingBalance } from './staking/StakingBalance'; +export type { StakingProviderInfo } from './staking/StakingProviderInfo'; +export type { StakingQuote } from './staking/StakingQuote'; +export type { StakingQuoteDirection } from './staking/StakingQuoteDirection'; +export type { StakingQuoteParams } from './staking/StakingQuoteParams'; +export type { UnstakeMode } from './staking/UnstakeMode'; +export type { UnstakeParams } from './staking/UnstakeParams'; + // Transaction models export * from './transactions/Transaction'; export type { TransactionAddressMetadata, TransactionAddressMetadataEntry } from './transactions/TransactionMetadata'; diff --git a/packages/walletkit/src/api/models/staking/StakeParams.ts b/packages/walletkit/src/api/models/staking/StakeParams.ts new file mode 100644 index 000000000..8a59e9f1d --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakeParams.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UserFriendlyAddress } from '../core/Primitives'; +import type { StakingQuote } from './StakingQuote'; + +/** + * Parameters for staking TON + */ +export interface StakeParams { + /** + * The staking quote based on which the transaction is built + */ + quote: StakingQuote; + + /** + * Address of the user performing the staking + */ + userAddress: UserFriendlyAddress; + + /** + * Provider-specific options + */ + providerOptions?: TProviderOptions; +} diff --git a/packages/walletkit/src/api/models/staking/StakingBalance.ts b/packages/walletkit/src/api/models/staking/StakingBalance.ts new file mode 100644 index 000000000..b597731d6 --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakingBalance.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { TokenAmount } from '../core/TokenAmount'; + +/** + * Staking balance information for a user + */ +export interface StakingBalance { + /** + * Amount currently staked + */ + stakedBalance: TokenAmount; + + /** + * Amount available for instant unstake + */ + instantUnstakeAvailable: TokenAmount; + + /** + * Identifier of the staking provider + */ + providerId: string; +} diff --git a/packages/walletkit/src/api/models/staking/StakingProviderInfo.ts b/packages/walletkit/src/api/models/staking/StakingProviderInfo.ts new file mode 100644 index 000000000..c226de5b2 --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakingProviderInfo.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { TokenAmount } from '../core/TokenAmount'; + +/** + * Staking information for a provider + */ +export interface StakingProviderInfo { + /** + * Annual Percentage Yield in basis points (100 = 1%) + * @format int + */ + apy: number; + + /** + * Amount available for instant unstake + */ + instantUnstakeAvailable?: TokenAmount; + + /** + * Identifier of the staking provider + */ + providerId: string; +} diff --git a/packages/walletkit/src/api/models/staking/StakingQuote.ts b/packages/walletkit/src/api/models/staking/StakingQuote.ts new file mode 100644 index 000000000..b540d310a --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakingQuote.ts @@ -0,0 +1,69 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { Network } from '../core/Network'; +import type { TokenAmount } from '../core/TokenAmount'; +import type { StakingQuoteDirection } from './StakingQuoteDirection'; +import type { UnstakeMode } from './UnstakeMode'; + +/** + * Staking quote response with pricing information + */ +export interface StakingQuote { + /** + * Direction of the quote (stake or unstake) + */ + direction: StakingQuoteDirection; + + /** + * Amount of tokens being provided + */ + amountIn: TokenAmount; + + /** + * Estimated amount of tokens to be received + */ + amountOut: TokenAmount; + + /** + * Network on which the staking will be executed + */ + network: Network; + + /** + * Identifier of the staking provider + */ + providerId: string; + + /** + * Annual Percentage Yield in basis points (100 = 1%) + * @format int + */ + apy?: number; + + /** + * Mode of unstaking (if applicable) + */ + unstakeMode?: UnstakeMode; + + /** + * Estimated delay in hours for unstaking + * @format int + */ + estimatedUnstakeDelayHours?: number; + + /** + * Amount available for instant unstake + */ + instantUnstakeAvailable?: TokenAmount; + + /** + * Provider-specific metadata for the quote + */ + metadata?: unknown; +} diff --git a/packages/walletkit/src/api/models/staking/StakingQuoteDirection.ts b/packages/walletkit/src/api/models/staking/StakingQuoteDirection.ts new file mode 100644 index 000000000..ca2625b77 --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakingQuoteDirection.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +/** + * Direction of the staking quote + */ +export type StakingQuoteDirection = 'stake' | 'unstake'; diff --git a/packages/walletkit/src/api/models/staking/StakingQuoteParams.ts b/packages/walletkit/src/api/models/staking/StakingQuoteParams.ts new file mode 100644 index 000000000..4620deeee --- /dev/null +++ b/packages/walletkit/src/api/models/staking/StakingQuoteParams.ts @@ -0,0 +1,48 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UserFriendlyAddress } from '../core/Primitives'; +import type { Network } from '../core/Network'; +import type { StakingQuoteDirection } from './StakingQuoteDirection'; +import type { UnstakeMode } from './UnstakeMode'; +import type { TokenAmount } from '../core/TokenAmount'; + +/** + * Parameters for getting a staking quote + */ +export interface StakingQuoteParams { + /** + * Direction of the quote (stake or unstake) + */ + direction: StakingQuoteDirection; + + /** + * Amount of tokens to stake or unstake + */ + amount: TokenAmount; + + /** + * Address of the user + */ + userAddress?: UserFriendlyAddress; + + /** + * Network on which the staking will be executed + */ + network?: Network; + + /** + * Requested mode of unstaking + */ + unstakeMode?: UnstakeMode; + + /** + * Provider-specific options + */ + providerOptions?: TProviderOptions; +} diff --git a/packages/walletkit/src/api/models/staking/UnstakeMode.ts b/packages/walletkit/src/api/models/staking/UnstakeMode.ts new file mode 100644 index 000000000..752a9612c --- /dev/null +++ b/packages/walletkit/src/api/models/staking/UnstakeMode.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +/** + * Mode of unstaking + */ +export type UnstakeMode = 'instant' | 'delayed' | 'bestRate'; diff --git a/packages/walletkit/src/api/models/staking/UnstakeParams.ts b/packages/walletkit/src/api/models/staking/UnstakeParams.ts new file mode 100644 index 000000000..16ee795a2 --- /dev/null +++ b/packages/walletkit/src/api/models/staking/UnstakeParams.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UserFriendlyAddress } from '../core/Primitives'; +import type { StakingQuote } from './StakingQuote'; + +/** + * Parameters for unstaking TON + */ +export interface UnstakeParams { + /** + * The staking quote based on which the transaction is built + */ + quote: StakingQuote; + + /** + * Address of the user performing the unstaking + */ + userAddress: UserFriendlyAddress; + + /** + * Optional upper bound for delayed unstake waiting time. + * Providers can use this to decide between instant and delayed flows. + * @format int + */ + maxDelayHours?: number; + + /** + * Provider-specific options + */ + providerOptions?: TProviderOptions; +} diff --git a/packages/walletkit/src/clients/BaseApiClient.ts b/packages/walletkit/src/clients/BaseApiClient.ts index 20f7a0785..f9966ed92 100644 --- a/packages/walletkit/src/clients/BaseApiClient.ts +++ b/packages/walletkit/src/clients/BaseApiClient.ts @@ -37,24 +37,7 @@ export abstract class BaseApiClient { protected abstract appendAuthHeaders(headers: Headers): void; - private async doRequest(url: URL, init: globalThis.RequestInit = {}): Promise { - const fetchFn = this.fetchApi; - - if (!this.timeout || this.timeout <= 0) { - return fetchFn(url, init); - } - - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), this.timeout); - - try { - return await fetchFn(url, { ...init, signal: controller.signal }); - } finally { - clearTimeout(timeoutId); - } - } - - protected async fetch(url: URL, props: globalThis.RequestInit = {}): Promise { + async fetch(url: URL, props: globalThis.RequestInit = {}): Promise { const headers = new Headers(props.headers); headers.set('accept', 'application/json'); this.appendAuthHeaders(headers); @@ -72,11 +55,11 @@ export abstract class BaseApiClient { return json as Promise; } - protected async getJson(path: string, query?: Record): Promise { + async getJson(path: string, query?: Record): Promise { return this.fetch(this.buildUrl(path, query), { method: 'GET' }); } - protected async postJson(path: string, props: unknown): Promise { + async postJson(path: string, props: unknown): Promise { return this.fetch(this.buildUrl(path), { method: 'POST', headers: { 'content-type': 'application/json' }, @@ -113,4 +96,21 @@ export abstract class BaseApiClient { } return new TonClientError(`HTTP ${response.status}: ${message}`, code, detail); } + + private async doRequest(url: URL, init: globalThis.RequestInit = {}): Promise { + const fetchFn = this.fetchApi; + + if (!this.timeout || this.timeout <= 0) { + return fetchFn(url, init); + } + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), this.timeout); + + try { + return await fetchFn(url, { ...init, signal: controller.signal }); + } finally { + clearTimeout(timeoutId); + } + } } diff --git a/packages/walletkit/src/core/TonWalletKit.ts b/packages/walletkit/src/core/TonWalletKit.ts index 2f7eb742a..47d181e8e 100644 --- a/packages/walletkit/src/core/TonWalletKit.ts +++ b/packages/walletkit/src/core/TonWalletKit.ts @@ -30,6 +30,7 @@ import type { RequestProcessor } from './RequestProcessor'; import { JettonsManager } from './JettonsManager'; import type { JettonsAPI } from '../types/jettons'; import { SwapManager } from '../defi/swap'; +import { StakingManager } from '../defi/staking'; import type { RawBridgeEventConnect, RawBridgeEventRestoreConnection, @@ -88,6 +89,7 @@ export class TonWalletKit implements ITonWalletKit { private networkManager: NetworkManager; private jettonsManager!: JettonsManager; private swapManager: SwapManager; + private stakingManager: StakingManager; private initializer: Initializer; private eventProcessor!: StorageEventProcessor; private bridgeManager!: BridgeManager; @@ -129,6 +131,8 @@ export class TonWalletKit implements ITonWalletKit { // Initialize SwapManager this.swapManager = new SwapManager(); + // Initialize StakingManager + this.stakingManager = new StakingManager(); this.eventEmitter.on('restoreConnection', async (event: RawBridgeEventRestoreConnection) => { if (!event.domain) { @@ -706,12 +710,6 @@ export class TonWalletKit implements ITonWalletKit { * @throws WalletKitError if no client is configured for the network */ getApiClient(network: Network): ApiClient { - if (!this.isInitialized) { - throw new WalletKitError( - ERROR_CODES.INITIALIZATION_ERROR, - 'TonWalletKit not yet initialized - call initialize() first', - ); - } return this.networkManager.getClient(network); } @@ -790,6 +788,13 @@ export class TonWalletKit implements ITonWalletKit { return this.swapManager; } + /** + * Staking API access + */ + get staking(): StakingManager { + return this.stakingManager; + } + /** * Get the event emitter for this kit instance * Allows external components to listen to and emit events diff --git a/packages/walletkit/src/defi/staking/StakingManager.ts b/packages/walletkit/src/defi/staking/StakingManager.ts new file mode 100644 index 000000000..f454039bf --- /dev/null +++ b/packages/walletkit/src/defi/staking/StakingManager.ts @@ -0,0 +1,145 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { TransactionRequest, UserFriendlyAddress, Network } from '../../api/models'; +import type { + StakeParams, + UnstakeParams, + StakingBalance, + StakingProviderInfo, + StakingQuoteParams, + StakingQuote, + UnstakeMode, +} from '../../api/models'; +import type { StakingAPI, StakingProviderInterface } from '../../api/interfaces'; +import { StakingError, StakingErrorCode } from './errors'; +import { globalLogger } from '../../core/Logger'; +import { DefiManager } from '../DefiManager'; + +const log = globalLogger.createChild('StakingManager'); + +/** + * StakingManager - manages staking providers and delegates staking operations + * + * Allows registration of multiple staking providers and provides a unified API + * for staking operations. Providers can be switched dynamically. + */ +export class StakingManager extends DefiManager implements StakingAPI { + /** + * Get a quote for staking or unstaking + * @param params - Quote parameters + * @param providerId - Optional provider id to use + */ + async getQuote(params: StakingQuoteParams, providerId?: string): Promise { + log.debug('Getting staking quote', params); + try { + const quote = await this.getProvider(providerId).getQuote(params); + log.debug('Received staking quote', quote); + return quote; + } catch (error) { + throw this.createError('Failed to get staking quote', StakingErrorCode.InvalidParams, { error, params }); + } + } + + /** + * Stake TON using a provider + * @param params - Staking parameters + * @param providerId - Optional provider id to use + */ + async buildStakeTransaction(params: StakeParams, providerId?: string): Promise { + log.debug('Building staking transaction', params); + try { + return await this.getProvider(providerId).buildStakeTransaction(params); + } catch (error) { + throw this.createError('Failed to build staking transaction', StakingErrorCode.InvalidParams, { + error, + params, + }); + } + } + + /** + * Unstake TON using a provider + * @param params - Unstaking parameters + * @param providerId - Optional provider id to use + */ + async buildUnstakeTransaction(params: UnstakeParams, providerId?: string): Promise { + log.debug('Building unstaking transaction', params); + try { + return await this.getProvider(providerId).buildUnstakeTransaction(params); + } catch (error) { + throw this.createError('Failed to build unstaking transaction', StakingErrorCode.InvalidParams, { + error, + params, + }); + } + } + + /** + * Get staking balance for a user + * @param userAddress - User address + * @param network - Network to query + * @param providerId - Optional provider id to use + */ + async getStakedBalance( + userAddress: UserFriendlyAddress, + network?: Network, + providerId?: string, + ): Promise { + log.debug('Getting staking balance', { + userAddress, + network, + provider: providerId || this.defaultProviderId, + }); + + try { + return await this.getProvider(providerId).getStakedBalance(userAddress, network); + } catch (error) { + throw this.createError('Failed to get staking balance', StakingErrorCode.InvalidParams, { + error, + userAddress, + network, + }); + } + } + + /** + * Get staking information for a network + * @param network - Network to query + * @param providerId - Optional provider id to use + */ + async getStakingProviderInfo(network?: Network, providerId?: string): Promise { + log.debug('Getting staking info', { + network, + provider: providerId || this.defaultProviderId, + }); + + try { + return await this.getProvider(providerId).getStakingProviderInfo(network); + } catch (error) { + throw this.createError('Failed to get staking info', StakingErrorCode.InvalidParams, { error, network }); + } + } + + /** + * Get supported unstake modes + * @param providerId Provider identifier (optional, uses default if not specified) + * @returns An array of supported unstake modes + */ + getSupportedUnstakeModes(providerId?: string): UnstakeMode[] { + return this.getProvider(providerId).getSupportedUnstakeModes(); + } + + protected createError(message: string, code: string, details?: unknown): StakingError { + const errorCode = Object.values(StakingErrorCode).includes(code as StakingErrorCode) + ? (code as StakingErrorCode) + : StakingErrorCode.InvalidParams; + log.error(message, { code, details }); + return new StakingError(message, errorCode, details); + } +} diff --git a/packages/walletkit/src/defi/staking/StakingProvider.ts b/packages/walletkit/src/defi/staking/StakingProvider.ts new file mode 100644 index 000000000..83673dfb4 --- /dev/null +++ b/packages/walletkit/src/defi/staking/StakingProvider.ts @@ -0,0 +1,73 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { Network, TransactionRequest, UserFriendlyAddress } from '../../api/models'; +import type { + StakeParams, + UnstakeParams, + StakingBalance, + StakingProviderInfo, + StakingQuoteParams, + StakingQuote, + UnstakeMode, +} from '../../api/models'; +import type { StakingProviderInterface } from '../../api/interfaces'; + +/** + * Abstract base class for staking providers + * + * Provides common utilities and enforces implementation of core staking methods. + * Users can extend this class to create custom staking providers. + */ +export abstract class StakingProvider implements StakingProviderInterface { + readonly type = 'staking'; + readonly providerId: string; + + constructor(providerId: string) { + this.providerId = providerId; + } + + /** + * Get a quote for staking or unstaking + * @param params - Quote parameters including direction and amount + */ + abstract getQuote(params: StakingQuoteParams): Promise; + + /** + * Build a transaction for staking + * @param params - Staking parameters including amount and user address + * @returns Promise resolving to transaction request ready to be signed + */ + abstract buildStakeTransaction(params: StakeParams): Promise; + + /** + * Build a transaction for unstaking + * @param params - Unstaking parameters including amount and user address + * @returns Promise resolving to transaction request ready to be signed + */ + abstract buildUnstakeTransaction(params: UnstakeParams): Promise; + + /** + * Get staked balance for a user + * @param userAddress - User address to fetch balance for + * @param network - Optional network to use for balance query + */ + abstract getStakedBalance(userAddress: UserFriendlyAddress, network?: Network): Promise; + + /** + * Get staking information for a network + * @param network - Optional network to fetch info for + */ + abstract getStakingProviderInfo(network?: Network): Promise; + + /** + * Get supported unstake modes + * @returns An array of supported unstake modes + */ + abstract getSupportedUnstakeModes(): UnstakeMode[]; +} diff --git a/packages/walletkit/src/defi/staking/errors.ts b/packages/walletkit/src/defi/staking/errors.ts new file mode 100644 index 000000000..e6295cda4 --- /dev/null +++ b/packages/walletkit/src/defi/staking/errors.ts @@ -0,0 +1,24 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { DefiManagerError } from '../errors'; + +export enum StakingErrorCode { + InvalidParams = 'INVALID_PARAMS', + UnsupportedOperation = 'UNSUPPORTED_OPERATION', +} + +export class StakingError extends DefiManagerError { + public readonly code: StakingErrorCode; + + constructor(message: string, code: StakingErrorCode, details?: unknown) { + super(message, code, details); + this.name = 'StakingError'; + this.code = code; + } +} diff --git a/packages/walletkit/src/defi/staking/index.ts b/packages/walletkit/src/defi/staking/index.ts new file mode 100644 index 000000000..b9a085c2a --- /dev/null +++ b/packages/walletkit/src/defi/staking/index.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export { StakingProvider } from './StakingProvider'; +export { StakingManager } from './StakingManager'; +export { StakingError } from './errors'; +export type { StakingErrorCode } from './errors'; diff --git a/packages/walletkit/src/defi/staking/tonstakers/PoolContract.ts b/packages/walletkit/src/defi/staking/tonstakers/PoolContract.ts new file mode 100644 index 000000000..8979efb43 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/PoolContract.ts @@ -0,0 +1,167 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { Address, beginCell } from '@ton/core'; + +import type { Base64String, TokenAmount, TransactionRequestMessage, UserFriendlyAddress } from '../../../api/models'; +import type { ApiClient } from '../../../types/toncenter/ApiClient'; +import { CONTRACT } from './constants'; +import { asAddressFriendly, ReaderStack, SerializeStack } from '../../../utils'; +import { formatUnits } from '../../../utils/units'; + +export class PoolContract { + readonly address: UserFriendlyAddress; + + private readonly client: ApiClient; + + constructor(address: string | UserFriendlyAddress, client: ApiClient) { + this.address = asAddressFriendly(address); + this.client = client; + } + + async getJettonMinter(): Promise { + const data = await this.client.runGetMethod(this.address, 'get_pool_full_data'); + const stack = ReaderStack(data.stack); + + // Skip all fields until jettonMinter + // 0: state, 1: halted, 2: totalBalance, 3: interestRatePercent + // 4: optimisticDepositWithdrawals, 5: depositsOpen, 6: savedValidatorSetHash + // 7: prevRound, 8: currentRound, 9: minLoan, 10: maxLoan, 11: governanceFeePercent + stack.skip(12); + + return asAddressFriendly(stack.readAddress()); + } + + async getJettonWalletAddress(userAddress: UserFriendlyAddress): Promise { + const jettonMinter = await this.getJettonMinter(); + const data = await this.client.runGetMethod( + jettonMinter, + 'get_wallet_address', + SerializeStack([{ type: 'slice', cell: beginCell().storeAddress(Address.parse(userAddress)).endCell() }]), + ); + const stack = ReaderStack(data.stack); + return asAddressFriendly(stack.readAddress()); + } + + async getStakedBalance(userAddress: UserFriendlyAddress): Promise { + const jettonWalletAddress = await this.getJettonWalletAddress(userAddress); + const data = await this.client.runGetMethod(jettonWalletAddress, 'get_wallet_data'); + const stack = ReaderStack(data.stack); + return stack.readBigNumber().toString(); + } + + /** + * Build stake message payload. + * TL‑B: deposit#47d54391 query_id:uint64 = InternalMsgBody; + */ + buildStakePayload(queryId: bigint = 0n): Base64String { + const cell = beginCell() + .storeUint(CONTRACT.PAYLOAD_STAKE, 32) + .storeUint(queryId, 64) + .storeUint(CONTRACT.PARTNER_CODE, 64) + .endCell(); + + return cell.toBoc().toString('base64') as Base64String; + } + + /** + * Build unstake message payload to be sent to user's tsTON jetton wallet. + * + * Internal body: + * - op: burn#595f07bc (see TonstakersBurnPayload specification) + * - query_id: uint64 + * - amount: Coins + * - response_destination: MsgAddress (user address) + * - custom_payload: Maybe ^Cell (TonstakersBurnPayload) + */ + buildUnstakePayload(params: { + amount: bigint; + userAddress: UserFriendlyAddress; + waitTillRoundEnd: boolean; + fillOrKill: boolean; + queryId?: bigint; + }): Base64String { + const { amount, userAddress, waitTillRoundEnd, fillOrKill, queryId = 0n } = params; + + const burnPayloadCell = beginCell() + .storeBit(waitTillRoundEnd ? 1 : 0) + .storeBit(fillOrKill ? 1 : 0) + .endCell(); + + const cell = beginCell() + .storeUint(CONTRACT.PAYLOAD_UNSTAKE, 32) + .storeUint(queryId, 64) + .storeCoins(amount) + .storeAddress(Address.parse(userAddress)) + .storeMaybeRef(burnPayloadCell) + .endCell(); + + return cell.toBoc().toString('base64') as Base64String; + } + + /** + * Helper to construct a TransactionRequestMessage for unstake flow. + * Note: fee amount is not applied here and should be added by caller. + */ + async buildUnstakeMessage(params: { + amount: bigint; + userAddress: UserFriendlyAddress; + waitTillRoundEnd: boolean; + fillOrKill: boolean; + }): Promise { + const { amount, userAddress, waitTillRoundEnd, fillOrKill } = params; + + const jettonWalletAddress = await this.getJettonWalletAddress(userAddress); + const payload = this.buildUnstakePayload({ + amount, + userAddress, + waitTillRoundEnd, + fillOrKill, + }); + + return { + address: jettonWalletAddress, + amount: CONTRACT.UNSTAKE_FEE_RES.toString(), + payload, + }; + } + + /** + * Get staking contract balance (instant liquidity available). + */ + async getPoolBalance(): Promise { + const balance = await this.client.getBalance(this.address); + return BigInt(balance); + } + + /** + * Get current and projected exchange rates for tsTON/TON. + */ + async getRates(): Promise<{ tsTONTON: number; tsTONTONProjected: number }> { + const data = await this.client.runGetMethod(this.address, 'get_pool_full_data'); + const stack = ReaderStack(data.stack); + + stack.skip(2); // Skip state, halted + const totalBalance = Number(formatUnits(stack.readBigNumber(), 9)); + + stack.skip(10); // Skip up to minter + const supply = Number(formatUnits(stack.readBigNumber(), 9)); + + stack.skip(14); // Skip to projected balance + const projectedBalance = Number(formatUnits(stack.readBigNumber(), 9)); + const projectedSupply = Number(formatUnits(stack.readBigNumber(), 9)); + + const tsTONTON = supply > 0 ? totalBalance / supply : 1; + const tsTONTONProjected = projectedSupply > 0 ? projectedBalance / projectedSupply : 1; + + return { + tsTONTON, + tsTONTONProjected, + }; + } +} diff --git a/packages/walletkit/src/defi/staking/tonstakers/StakingCache.spec.ts b/packages/walletkit/src/defi/staking/tonstakers/StakingCache.spec.ts new file mode 100644 index 000000000..61d55e19b --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/StakingCache.spec.ts @@ -0,0 +1,98 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { describe, it, expect, vi, beforeEach } from 'vitest'; + +import { StakingCache } from './StakingCache'; + +describe('StakingCache', () => { + let cache: StakingCache; + + beforeEach(() => { + cache = new StakingCache(); + }); + + describe('get', () => { + it('should return cached value if exists', async () => { + const fetcher = vi.fn().mockResolvedValue('value1'); + + const result1 = await cache.get('key1', fetcher); + const result2 = await cache.get('key1', fetcher); + + expect(result1).toBe('value1'); + expect(result2).toBe('value1'); + expect(fetcher).toHaveBeenCalledTimes(1); + }); + + it('should call fetcher if value not cached', async () => { + const fetcher = vi.fn().mockResolvedValue('fetched-value'); + + const result = await cache.get('new-key', fetcher); + + expect(result).toBe('fetched-value'); + expect(fetcher).toHaveBeenCalledTimes(1); + }); + + it('should cache fetched value', async () => { + const fetcher1 = vi.fn().mockResolvedValue('first'); + const fetcher2 = vi.fn().mockResolvedValue('second'); + + await cache.get('key', fetcher1); + const result = await cache.get('key', fetcher2); + + expect(result).toBe('first'); + expect(fetcher2).not.toHaveBeenCalled(); + }); + }); + + describe('clear', () => { + it('should clear all cached values', async () => { + const fetcher1 = vi.fn().mockResolvedValue('value1'); + const fetcher2 = vi.fn().mockResolvedValue('value2'); + + await cache.get('key1', fetcher1); + await cache.get('key2', fetcher2); + + cache.clear(); + + const newFetcher1 = vi.fn().mockResolvedValue('new-value1'); + const newFetcher2 = vi.fn().mockResolvedValue('new-value2'); + + const result1 = await cache.get('key1', newFetcher1); + const result2 = await cache.get('key2', newFetcher2); + + expect(result1).toBe('new-value1'); + expect(result2).toBe('new-value2'); + expect(newFetcher1).toHaveBeenCalledTimes(1); + expect(newFetcher2).toHaveBeenCalledTimes(1); + }); + }); + + describe('invalidate', () => { + it('should remove specific key', async () => { + const fetcher1 = vi.fn().mockResolvedValue('value1'); + const fetcher2 = vi.fn().mockResolvedValue('value2'); + + await cache.get('key1', fetcher1); + await cache.get('key2', fetcher2); + + cache.invalidate('key1'); + + const newFetcher1 = vi.fn().mockResolvedValue('new-value1'); + const newFetcher2 = vi.fn().mockResolvedValue('new-value2'); + + const result1 = await cache.get('key1', newFetcher1); + const result2 = await cache.get('key2', newFetcher2); + + expect(result1).toBe('new-value1'); + expect(result2).toBe('value2'); + expect(newFetcher1).toHaveBeenCalledTimes(1); + expect(newFetcher2).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/walletkit/src/defi/staking/tonstakers/StakingCache.ts b/packages/walletkit/src/defi/staking/tonstakers/StakingCache.ts new file mode 100644 index 000000000..e72e74755 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/StakingCache.ts @@ -0,0 +1,43 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { LRUCache } from 'lru-cache'; + +import { CACHE_TIMEOUT } from './constants'; + +export class StakingCache { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private cache: LRUCache; + private readonly defaultTtl: number; + + constructor(maxSize: number = 100, defaultTtl: number = CACHE_TIMEOUT) { + this.defaultTtl = defaultTtl; + this.cache = new LRUCache({ + max: maxSize, + }); + } + + async get(key: string, fetcher: () => Promise, ttl: number = this.defaultTtl): Promise { + const cached = this.cache.get(key); + if (cached !== undefined) { + return cached as T; + } + + const value = await fetcher(); + this.cache.set(key, value, { ttl }); + return value; + } + + clear(): void { + this.cache.clear(); + } + + invalidate(key: string): void { + this.cache.delete(key); + } +} diff --git a/packages/walletkit/src/defi/staking/tonstakers/TonStakersContract.spec.ts b/packages/walletkit/src/defi/staking/tonstakers/TonStakersContract.spec.ts new file mode 100644 index 000000000..f7cfb46fb --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/TonStakersContract.spec.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { Cell } from '@ton/core'; + +import { PoolContract } from './PoolContract'; +import { CONTRACT, STAKING_CONTRACT_ADDRESS } from './constants'; +import { Network } from '../../../api/models'; + +const mockApiClient = { + runGetMethod: vi.fn(), + getBalance: vi.fn(), +}; + +describe('TonStakersContract', () => { + let contract: PoolContract; + + beforeEach(() => { + vi.clearAllMocks(); + contract = new PoolContract(STAKING_CONTRACT_ADDRESS[Network.mainnet().chainId], mockApiClient as never); + }); + + describe('buildStakePayload', () => { + it('should create correct Cell with op code, query_id, and partner code', () => { + const queryId = 123n; + const payload = contract.buildStakePayload(queryId); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + expect(slice.loadUint(32)).toBe(CONTRACT.PAYLOAD_STAKE); + expect(slice.loadUintBig(64)).toBe(queryId); + expect(slice.loadUintBig(64)).toBe(BigInt(CONTRACT.PARTNER_CODE)); + }); + + it('should use default query_id of 1n when not provided', () => { + const payload = contract.buildStakePayload(); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + slice.loadUint(32); + expect(slice.loadUintBig(64)).toBe(0n); + }); + }); + + describe('buildUnstakePayload', () => { + const baseParams = { + amount: 1000000000n, + userAddress: 'EQDtFpEwcFAEcRe5mLVh2N6C0x-_hJEM7W61_JLnSF74p4q2', + }; + + it('should build Delayed unstake payload (waitTillRoundEnd=false, fillOrKill=false)', () => { + const payload = contract.buildUnstakePayload({ + ...baseParams, + waitTillRoundEnd: false, + fillOrKill: false, + }); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + expect(slice.loadUint(32)).toBe(CONTRACT.PAYLOAD_UNSTAKE); + expect(slice.loadUintBig(64)).toBe(0n); + expect(slice.loadCoins()).toBe(baseParams.amount); + slice.loadAddress(); + + const burnPayloadRef = slice.loadMaybeRef(); + expect(burnPayloadRef).not.toBeNull(); + const burnSlice = burnPayloadRef!.beginParse(); + expect(burnSlice.loadBit()).toBe(false); + expect(burnSlice.loadBit()).toBe(false); + }); + + it('should build Instant unstake payload (waitTillRoundEnd=false, fillOrKill=true)', () => { + const payload = contract.buildUnstakePayload({ + ...baseParams, + waitTillRoundEnd: false, + fillOrKill: true, + }); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + slice.loadUint(32); + slice.loadUintBig(64); + slice.loadCoins(); + slice.loadAddress(); + + const burnPayloadRef = slice.loadMaybeRef(); + expect(burnPayloadRef).not.toBeNull(); + const burnSlice = burnPayloadRef!.beginParse(); + expect(burnSlice.loadBit()).toBe(false); + expect(burnSlice.loadBit()).toBe(true); + }); + + it('should build BestRate unstake payload (waitTillRoundEnd=true, fillOrKill=false)', () => { + const payload = contract.buildUnstakePayload({ + ...baseParams, + waitTillRoundEnd: true, + fillOrKill: false, + }); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + slice.loadUint(32); + slice.loadUintBig(64); + slice.loadCoins(); + slice.loadAddress(); + + const burnPayloadRef = slice.loadMaybeRef(); + expect(burnPayloadRef).not.toBeNull(); + const burnSlice = burnPayloadRef!.beginParse(); + expect(burnSlice.loadBit()).toBe(true); + expect(burnSlice.loadBit()).toBe(false); + }); + + it('should use custom query_id when provided', () => { + const customQueryId = 999n; + const payload = contract.buildUnstakePayload({ + ...baseParams, + waitTillRoundEnd: false, + fillOrKill: false, + queryId: customQueryId, + }); + + const cell = Cell.fromBase64(payload); + const slice = cell.beginParse(); + + slice.loadUint(32); + expect(slice.loadUintBig(64)).toBe(customQueryId); + }); + }); +}); diff --git a/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.spec.ts b/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.spec.ts new file mode 100644 index 000000000..e3cc8b30f --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.spec.ts @@ -0,0 +1,298 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import type { MockInstance } from 'vitest'; + +import { TonStakersStakingProvider } from './TonStakersStakingProvider'; +import { PoolContract } from './PoolContract'; +import { CONTRACT } from './constants'; +import { Network } from '../../../api/models'; +import type { Base64String, UnstakeMode, UserFriendlyAddress } from '../../../api/models'; +import type { ApiClient } from '../../../types/toncenter/ApiClient'; + +const mockApiClient = { + runGetMethod: vi.fn(), + getBalance: vi.fn(), +}; + +describe('TonStakersStakingProvider', () => { + let provider: TonStakersStakingProvider; + const testUserAddress = 'EQDtFpEwcFAEcRe5mLVh2N6C0x-_hJEM7W61_JLnSF74p4q2'; + + let buildStakePayloadSpy: MockInstance; + let buildUnstakeMessageSpy: MockInstance; + let getApyFromTonApiSpy: MockInstance; + + beforeEach(() => { + vi.clearAllMocks(); + + buildStakePayloadSpy = vi + .spyOn(PoolContract.prototype, 'buildStakePayload') + .mockReturnValue('mock-stake-payload' as Base64String); + + buildUnstakeMessageSpy = vi.spyOn(PoolContract.prototype, 'buildUnstakeMessage').mockResolvedValue({ + address: 'EQMockJettonWallet', + amount: CONTRACT.UNSTAKE_FEE_RES.toString(), + payload: 'mock-unstake-payload' as Base64String, + }); + vi.spyOn(PoolContract.prototype, 'getPoolBalance').mockResolvedValue(500000000000n); + vi.spyOn(PoolContract.prototype, 'getRates').mockResolvedValue({ + tsTONTON: 1.05, + tsTONTONProjected: 1.1, + }); + + provider = new TonStakersStakingProvider({ + [Network.mainnet().chainId]: { + apiClient: mockApiClient as unknown as ApiClient, + contractAddress: 'EQCkWxfyhAkim3g2DjKQQg8T5P4g-Q1-K_jErGcDJZ4i-vqR' as UserFriendlyAddress, + }, + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + getApyFromTonApiSpy = vi.spyOn(provider as any, 'getApyFromTonApi').mockResolvedValue(0.05); + }); + + describe('getQuote', () => { + it('should return correct quote with APY for stake direction', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'stake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + }); + + expect(quote.direction).toBe('stake'); + expect(quote.amountIn).toBe(amount); + // amountOut = 1 / 1.1 = 0.909090909 + expect(quote.amountOut).toBe('0.909090909'); + expect(quote.providerId).toBe('tonstakers'); + expect(quote.apy).toBe(0.05); + expect(getApyFromTonApiSpy).toHaveBeenCalled(); + }); + + it('should return correct quote with unstakeMode for unstake direction', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + unstakeMode: 'instant', + }); + + expect(quote.direction).toBe('unstake'); + expect(quote.amountIn).toBe(amount); + // amountOut = 1 * 1.05 = 1.05 + expect(quote.amountOut).toBe('1.050000000'); + expect(quote.providerId).toBe('tonstakers'); + expect(quote.unstakeMode).toBe('instant'); + }); + + it('should default to Delayed unstakeMode when not specified', async () => { + const quote = await provider.getQuote({ + direction: 'unstake', + amount: '1', + network: Network.mainnet(), + }); + + expect(quote.unstakeMode).toBe('delayed'); + }); + }); + + describe('stake', () => { + it('should build correct transaction with stake payload', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'stake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + }); + + const tx = await provider.buildStakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(tx.fromAddress).toBe(testUserAddress); + expect(tx.network).toEqual(Network.mainnet()); + expect(tx.messages).toHaveLength(1); + + const message = tx.messages[0]; + expect(message.address).toBe('EQCkWxfyhAkim3g2DjKQQg8T5P4g-Q1-K_jErGcDJZ4i-vqR'); + expect(message.payload).toBe('mock-stake-payload'); + + const expectedAmount = CONTRACT.STAKE_FEE_RES + 1000000000n; + expect(message.amount).toBe(expectedAmount.toString()); + + expect(buildStakePayloadSpy).toHaveBeenCalledWith(1n); + }); + }); + + describe('unstake', () => { + it('should build correct transaction for Delayed mode', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + unstakeMode: 'delayed', + }); + + const tx = await provider.buildUnstakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(tx.fromAddress).toBe(testUserAddress); + expect(tx.messages).toHaveLength(1); + expect(tx.messages[0].address).toBe('EQMockJettonWallet'); + expect(tx.messages[0].payload).toBe('mock-unstake-payload'); + + expect(buildUnstakeMessageSpy).toHaveBeenCalledWith({ + amount: 1000000000n, + userAddress: testUserAddress, + waitTillRoundEnd: false, + fillOrKill: false, + }); + }); + + it('should build correct transaction for Instant mode', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + unstakeMode: 'instant', + }); + + await provider.buildUnstakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(buildUnstakeMessageSpy).toHaveBeenCalledWith({ + amount: 1000000000n, + userAddress: testUserAddress, + waitTillRoundEnd: false, + fillOrKill: true, + }); + }); + + it('should build correct transaction for BestRate mode', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + unstakeMode: 'bestRate', + }); + + await provider.buildUnstakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(buildUnstakeMessageSpy).toHaveBeenCalledWith({ + amount: 1000000000n, + userAddress: testUserAddress, + waitTillRoundEnd: true, + fillOrKill: false, + }); + }); + + it('should default to Delayed mode when unstakeMode not specified in quote', async () => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + }); + + await provider.buildUnstakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(buildUnstakeMessageSpy).toHaveBeenCalledWith({ + amount: 1000000000n, + userAddress: testUserAddress, + waitTillRoundEnd: false, + fillOrKill: false, + }); + }); + }); + + describe('unstake mode flags', () => { + it.each([ + { mode: 'delayed', waitTillRoundEnd: false, fillOrKill: false }, + { mode: 'instant', waitTillRoundEnd: false, fillOrKill: true }, + { mode: 'bestRate', waitTillRoundEnd: true, fillOrKill: false }, + ])('should set correct flags for $mode mode', async ({ mode, waitTillRoundEnd, fillOrKill }) => { + const amount = '1'; + const quote = await provider.getQuote({ + direction: 'unstake', + amount, + userAddress: testUserAddress, + network: Network.mainnet(), + unstakeMode: mode as UnstakeMode, + }); + + await provider.buildUnstakeTransaction({ + quote, + userAddress: testUserAddress, + }); + + expect(buildUnstakeMessageSpy).toHaveBeenCalledWith( + expect.objectContaining({ + waitTillRoundEnd, + fillOrKill, + }), + ); + }); + }); + + describe('getStakingProviderInfo', () => { + it('should return simplified info with APY and liquidity', async () => { + const info = await provider.getStakingProviderInfo(Network.mainnet()); + + expect(info.apy).toBe(0.05); + expect(info.instantUnstakeAvailable).toBe('500'); + expect(info.providerId).toBe('tonstakers'); + // Ensure exchange rates are NOT in the response + expect(info).not.toHaveProperty('tsTONTON'); + expect(info).not.toHaveProperty('tsTONTONProjected'); + }); + }); + + describe('getStakedBalance', () => { + it('should return user balance and provider info', async () => { + mockApiClient.getBalance.mockResolvedValue('2000000000'); // 2 TON + vi.spyOn(PoolContract.prototype, 'getStakedBalance').mockResolvedValue('1000000000'); // 1 tsTON + + const balance = await provider.getStakedBalance(testUserAddress, Network.mainnet()); + + expect(balance.stakedBalance).toBe('1'); + expect(balance.instantUnstakeAvailable).toBe('500'); + expect(balance.providerId).toBe('tonstakers'); + }); + }); + + describe('getSupportedUnstakeModes', () => { + it('should return supported unstake modes', () => { + const modes = provider.getSupportedUnstakeModes(); + expect(modes).toEqual(['delayed', 'instant', 'bestRate']); + }); + }); +}); diff --git a/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.ts b/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.ts new file mode 100644 index 000000000..d23801777 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/TonStakersStakingProvider.ts @@ -0,0 +1,349 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { TransactionRequest, UserFriendlyAddress } from '../../../api/models'; +import { Network } from '../../../api/models'; +import { globalLogger } from '../../../core/Logger'; +import { StakingProvider } from '../StakingProvider'; +import type { + StakeParams, + UnstakeParams, + StakingBalance, + StakingProviderInfo, + StakingQuoteParams, + StakingQuote, + UnstakeMode, +} from '../../../api/models'; +import { StakingError, StakingErrorCode } from '../errors'; +import type { TonStakersProviderConfig } from './models/TonStakersProviderConfig'; +import { CONTRACT, STAKING_CONTRACT_ADDRESS } from './constants'; +import { PoolContract } from './PoolContract'; +import { StakingCache } from './StakingCache'; +import { ApiClientTonApi } from '../../../clients/tonapi/ApiClientTonApi'; +import { formatUnits, parseUnits } from '../../../utils/units'; +import type { ApiClient } from '../../../types/toncenter/ApiClient'; + +const log = globalLogger.createChild('TonStakersStakingProvider'); + +/** + * TonStakersStakingProvider - Staking provider for the Tonstakers liquid staking protocol. + * + * This provider implements all staking operations. It supports: + * - Stake: Deposit TON to receive tsTON liquid staking tokens + * - Unstake: Burn tsTON to withdraw TON with 3 modes: + * - Delayed: Standard withdrawal at end of round (~18 hours) + * - Instant: Immediate withdrawal if liquidity available + * - BestRate: Wait for best exchange rate at round end + */ +export class TonStakersStakingProvider extends StakingProvider { + readonly supportedUnstakeModes: UnstakeMode[] = ['delayed', 'instant', 'bestRate']; + + protected config: TonStakersProviderConfig; + private cache: StakingCache; + + /** + * Create a new TonStakersStakingProvider instance. + * + * @param config - Optional configuration with custom contract addresses per network + */ + constructor(config: TonStakersProviderConfig = {}) { + super('tonstakers'); + + this.config = Object.entries(config).reduce((acc, [chainId, configByNetwork]) => { + if (!configByNetwork.contractAddress && !STAKING_CONTRACT_ADDRESS[chainId]) { + throw new Error(`Contract address not found for chain ${chainId}, provide it in config`); + } + + acc[chainId] = { + ...configByNetwork, + contractAddress: configByNetwork.contractAddress || STAKING_CONTRACT_ADDRESS[chainId], + }; + + return acc; + }, {} as TonStakersProviderConfig); + + this.cache = new StakingCache(); + log.info('TonStakersStakingProvider initialized'); + } + + /** + * Get a quote for staking or unstaking operations. + * + * @param params - Quote parameters including direction, amount, and optional unstake mode + * @returns Quote with expected amounts and current APY (for stake direction) + */ + async getQuote(params: StakingQuoteParams): Promise { + log.debug('TonStakers quote requested', { + direction: params.direction, + amount: params.amount, + userAddress: params.userAddress, + }); + + const stakingInfo = await this.getStakingProviderInfo(params.network); + const contract = this.getContract(params.network); + const rates = await contract.getRates(); + + if (params.direction === 'stake') { + // User deposits TON, receives tsTON: tsTON = TON / rate + const amountInTokens = Number(params.amount); + const amountOutTokens = amountInTokens / rates.tsTONTONProjected; + const amountOut = amountOutTokens.toFixed(9); + + return { + direction: 'stake', + amountIn: params.amount, + amountOut, + network: params.network || Network.mainnet(), + providerId: 'tonstakers', + apy: stakingInfo.apy, + }; + } else { + // User burns tsTON, receives TON: TON = tsTON * rate + const amountInTokens = Number(params.amount); + const amountOutTokens = + params.unstakeMode === 'instant' + ? amountInTokens * rates.tsTONTON + : amountInTokens * rates.tsTONTONProjected; + const amountOut = amountOutTokens.toFixed(9); + + return { + direction: 'unstake', + amountIn: params.amount, + amountOut, + network: params.network || Network.mainnet(), + providerId: 'tonstakers', + unstakeMode: params.unstakeMode || 'delayed', + }; + } + } + + /** + * Build a transaction for staking TON. + * + * The stake operation sends TON to the Tonstakers pool contract + * and receives tsTON liquid staking tokens in return. + * A fee reserve of 1 TON is automatically added to the amount. + * + * @param params - Stake parameters including quote and user address + * @returns Transaction request ready to be signed and sent + */ + async buildStakeTransaction(params: StakeParams): Promise { + log.debug('TonStakers stake requested', { params }); + + const network = params.quote.network; + const contractAddress = this.getStakingContractAddress(network); + const amount = parseUnits(params.quote.amountIn, 9); + const totalAmount = amount + CONTRACT.STAKE_FEE_RES; + + const contract = this.getContract(network); + const payload = contract.buildStakePayload(1n); + + const message = { + address: contractAddress, + amount: totalAmount.toString(), + payload, + }; + + return { + messages: [message], + fromAddress: params.userAddress, + network, + }; + } + + /** + * Build a transaction for unstaking tsTON. + * + * Supports three unstake modes: + * - **Delayed** (default): Standard withdrawal, funds released at end of round (~18 hours) + * - **Instant**: Immediate withdrawal if pool has sufficient liquidity (fillOrKill) + * - **BestRate**: Wait until round end for best exchange rate + * + * @param params - Unstake parameters including quote and user address + * @returns Transaction request ready to be signed and sent + */ + async buildUnstakeTransaction(params: UnstakeParams): Promise { + log.debug('TonStakers unstake requested', { amount: params.quote.amountIn, userAddress: params.userAddress }); + + const network = params.quote.network; + const amount = parseUnits(params.quote.amountIn, 9); + const unstakeMode = params.quote.unstakeMode || 'delayed'; + + let waitTillRoundEnd = false; + let fillOrKill = false; + + switch (unstakeMode) { + case 'instant': + waitTillRoundEnd = false; + fillOrKill = true; + break; + case 'bestRate': + waitTillRoundEnd = true; + fillOrKill = false; + break; + case 'delayed': + default: + waitTillRoundEnd = false; + fillOrKill = false; + break; + } + + const contract = this.getContract(network); + const message = await contract.buildUnstakeMessage({ + amount, + userAddress: params.userAddress, + waitTillRoundEnd, + fillOrKill, + }); + + return { + messages: [message], + fromAddress: params.userAddress, + network, + }; + } + + /** + * Get staking balance information for a user. + * + * Returns: + * - stakedBalance: Amount of tsTON tokens held + * - availableBalance: TON available for staking (minus fee reserve) + * - instantUnstakeAvailable: Pool liquidity for instant unstaking + * + * @param userAddress - User wallet address + * @param network - Network to query (defaults to mainnet) + * @returns Balance information including staked and available amounts + */ + async getStakedBalance(userAddress: UserFriendlyAddress, network?: Network): Promise { + log.debug('TonStakers balance requested', { userAddress, network }); + + try { + const targetNetwork = network ?? Network.mainnet(); + + let stakedBalance = '0'; + let instantUnstakeAvailable = 0n; + + const contract = this.getContract(targetNetwork); + + try { + stakedBalance = await contract.getStakedBalance(userAddress); + } catch (error) { + log.warn('Failed to get staked balance', { error }); + } + + try { + instantUnstakeAvailable = await contract.getPoolBalance(); + } catch (error) { + log.warn('Failed to get instant unstake liquidity', { error }); + } + + return { + stakedBalance: formatUnits(stakedBalance, 9), // in tsTON tokens + instantUnstakeAvailable: formatUnits(instantUnstakeAvailable, 9), + providerId: 'tonstakers', + }; + } catch (error) { + log.error('Failed to get balance', { error, userAddress, network }); + throw new StakingError('Failed to get staking balance', StakingErrorCode.InvalidParams, { + error, + userAddress, + network, + }); + } + } + + /** + * Get staking pool information including APY and liquidity. + * APY is fetched from TonAPI. + * Results are cached for 30 seconds to reduce API calls. + * + * @param network - Network to query (defaults to mainnet) + * @returns Staking info with APY and available instant liquidity + */ + async getStakingProviderInfo(network?: Network): Promise { + log.debug('TonStakers info requested', { network }); + + const targetNetwork = network ?? Network.mainnet(); + const cacheKey = `staking-info:${targetNetwork.chainId}`; + + return await this.cache.get(cacheKey, async () => { + const contract = this.getContract(targetNetwork); + const instantLiquidity = await contract.getPoolBalance(); + const apy = await this.getApyFromTonApi(targetNetwork); + + return { + apy, + instantUnstakeAvailable: formatUnits(instantLiquidity, 9), + providerId: 'tonstakers', + }; + }); + } + + /** + * Get supported unstake modes + * @returns An array of supported unstake modes + */ + getSupportedUnstakeModes(): UnstakeMode[] { + return ['delayed', 'instant', 'bestRate']; + } + + /** + * Clear all cached data. + * Use this to force fresh data retrieval on next call. + */ + clearCache(): void { + this.cache.clear(); + } + + private getStakingContractAddress(network?: Network): string { + const targetNetwork = network ?? Network.mainnet(); + const networkConfig = this.config[targetNetwork.chainId]; + + if (!networkConfig || !networkConfig.contractAddress) { + throw new StakingError( + 'Staking contract address is not configured for the selected network', + StakingErrorCode.InvalidParams, + { network: targetNetwork }, + ); + } + + return networkConfig.contractAddress; + } + + private getContract(network?: Network): PoolContract { + const targetNetwork = network ?? Network.mainnet(); + const apiClient = this.getApiClient(targetNetwork); + const contractAddress = this.getStakingContractAddress(targetNetwork); + return new PoolContract(contractAddress, apiClient); + } + + private getApiClient(network?: Network): ApiClient { + const targetNetwork = network ?? Network.mainnet(); + const apiClient = this.config[targetNetwork.chainId].apiClient; + if (!apiClient) { + throw new Error(`API client not found for chain ${targetNetwork.chainId}`); + } + return apiClient; + } + + private async getApyFromTonApi(network: Network): Promise { + const networkConfig = this.config[network.chainId]; + const token = networkConfig?.tonApiToken; + const address = this.getStakingContractAddress(network); + const client = new ApiClientTonApi({ network, apiKey: token }); + + const poolInfo = await client.getJson<{ pool: { apy: number } }>(`/v2/staking/pool/${address}`); + + if (!poolInfo?.pool?.apy) { + throw new Error('Invalid APY data from TonAPI'); + } + + return Number(poolInfo.pool.apy); + } +} diff --git a/packages/walletkit/src/defi/staking/tonstakers/constants.ts b/packages/walletkit/src/defi/staking/tonstakers/constants.ts new file mode 100644 index 000000000..da2607a09 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/constants.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { Network } from '../../../api/models'; +import type { UserFriendlyAddress } from '../../../api/models'; +import { parseUnits } from '../../../utils/units'; + +export const CACHE_TIMEOUT = 30000; + +export const STAKING_CONTRACT_ADDRESS = { + // https://github.com/ton-blockchain/liquid-staking-contract/tree/35d676f6ac6e35e755ea3c4d7d7cf577627b1cf0 + [Network.mainnet().chainId]: 'EQCkWxfyhAkim3g2DjKQQg8T5P4g-Q1-K_jErGcDJZ4i-vqR' as UserFriendlyAddress, + // https://github.com/ton-blockchain/liquid-staking-contract/tree/77f13c850890517a6b490ef5f109c31b4fa783e7 + [Network.testnet().chainId]: 'kQANFsYyYn-GSZ4oajUJmboDURZU-udMHf9JxzO4vYM_hFP3' as UserFriendlyAddress, +}; + +// Contract-related constants +export const CONTRACT = { + PARTNER_CODE: 0x000000106796caef, + PAYLOAD_UNSTAKE: 0x595f07bc, + PAYLOAD_STAKE: 0x47d54391, + STAKE_FEE_RES: parseUnits('1', 9), + UNSTAKE_FEE_RES: parseUnits('1.05', 9), + RECOMMENDED_FEE_RESERVE: parseUnits('1.1', 9), +}; diff --git a/packages/walletkit/src/defi/staking/tonstakers/index.ts b/packages/walletkit/src/defi/staking/tonstakers/index.ts new file mode 100644 index 000000000..4d1968a97 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/index.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export { TonStakersStakingProvider } from './TonStakersStakingProvider'; +export { PoolContract } from './PoolContract'; +export { StakingCache } from './StakingCache'; +export type { TonStakersProviderConfig } from './models/TonStakersProviderConfig'; diff --git a/packages/walletkit/src/defi/staking/tonstakers/models/TonStakersProviderConfig.ts b/packages/walletkit/src/defi/staking/tonstakers/models/TonStakersProviderConfig.ts new file mode 100644 index 000000000..26d706083 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/models/TonStakersProviderConfig.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { UserFriendlyAddress } from '../../../../api/models'; +import type { ApiClient } from '../../../../types/toncenter/ApiClient'; + +export interface TonStakersProviderConfig { + [chainId: string]: { + apiClient: ApiClient; + contractAddress?: UserFriendlyAddress; + /** + * Optional TonAPI token used exclusively for fetching historical APY. + * The provider is fully functional without this token. + */ + tonApiToken?: string; + }; +} diff --git a/packages/walletkit/src/defi/staking/tonstakers/models/index.ts b/packages/walletkit/src/defi/staking/tonstakers/models/index.ts new file mode 100644 index 000000000..5c9626354 --- /dev/null +++ b/packages/walletkit/src/defi/staking/tonstakers/models/index.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +export type { TonStakersProviderConfig } from './TonStakersProviderConfig'; diff --git a/packages/walletkit/src/defi/swap/SwapProvider.ts b/packages/walletkit/src/defi/swap/SwapProvider.ts index ddbe847b6..65fadef4b 100644 --- a/packages/walletkit/src/defi/swap/SwapProvider.ts +++ b/packages/walletkit/src/defi/swap/SwapProvider.ts @@ -28,9 +28,10 @@ import type { SwapProviderInterface } from '../../api/interfaces'; * } * ``` */ -export abstract class SwapProvider - implements SwapProviderInterface -{ +export abstract class SwapProvider< + TQuoteOptions = undefined, + TSwapOptions = undefined, +> implements SwapProviderInterface { readonly type = 'swap'; abstract readonly providerId: string; diff --git a/packages/walletkit/src/index.ts b/packages/walletkit/src/index.ts index 23479bc3a..5d449299c 100644 --- a/packages/walletkit/src/index.ts +++ b/packages/walletkit/src/index.ts @@ -20,6 +20,7 @@ export { RequestProcessor } from './core/RequestProcessor'; export { Initializer } from './core/Initializer'; export { JettonsManager } from './core/JettonsManager'; export { SwapManager, SwapProvider, SwapError } from './defi/swap'; +export { StakingManager, StakingProvider, StakingError } from './defi/staking'; export { EventEmitter } from './core/EventEmitter'; export type { EventListener } from './core/EventEmitter'; export { ApiClientToncenter } from './clients/toncenter'; diff --git a/packages/walletkit/src/types/kit.ts b/packages/walletkit/src/types/kit.ts index 6159043e2..dbf72abee 100644 --- a/packages/walletkit/src/types/kit.ts +++ b/packages/walletkit/src/types/kit.ts @@ -27,7 +27,7 @@ import type { SendTransactionApprovalResponse, ConnectionApprovalResponse, } from '../api/models'; -import type { SwapAPI } from '../api/interfaces'; +import type { SwapAPI, StakingAPI } from '../api/interfaces'; /** * Main TonWalletKit interface @@ -148,4 +148,7 @@ export interface ITonWalletKit { /** Jettons API access */ swap: SwapAPI; + + /** Staking API access */ + staking: StakingAPI; } diff --git a/packages/walletkit/src/utils/tvmStack.ts b/packages/walletkit/src/utils/tvmStack.ts index 67c37d713..bc4266c38 100644 --- a/packages/walletkit/src/utils/tvmStack.ts +++ b/packages/walletkit/src/utils/tvmStack.ts @@ -8,6 +8,7 @@ import type { TupleItem } from '@ton/core'; import { Cell } from '@ton/core'; +import { TupleReader } from '@ton/core'; import type { RawStackItem } from '../api/models/'; export type { RawStackItem }; @@ -44,6 +45,10 @@ export function ParseStack(list: RawStackItem[]): TupleItem[] { return stack; } +export function ReaderStack(list: RawStackItem[]): TupleReader { + return new TupleReader(ParseStack(list)); +} + // todo - add support for all types function SerializeStackItem(item: TupleItem): RawStackItem { switch (item.type) { diff --git a/packages/walletkit/src/validation/address.spec.ts b/packages/walletkit/src/validation/address.spec.ts new file mode 100644 index 000000000..8c3d19056 --- /dev/null +++ b/packages/walletkit/src/validation/address.spec.ts @@ -0,0 +1,61 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { describe, it, expect } from 'vitest'; + +import { validateTonAddress, detectAddressFormat } from './address'; + +describe('address validation', () => { + const validRaw = '0:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'; + const validBounceable = 'EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N'; + const validNonBounceable = 'UQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqEBI'; + + describe('validateTonAddress', () => { + it('should validate correct raw address', () => { + const result = validateTonAddress(validRaw); + expect(result.isValid).toBe(true); + }); + + it('should validate correct bounceable address', () => { + const result = validateTonAddress(validBounceable); + expect(result.isValid).toBe(true); + }); + + it('should validate correct non-bounceable address', () => { + const result = validateTonAddress(validNonBounceable); + expect(result.isValid).toBe(true); + }); + + it('should fail for invalid address', () => { + const result = validateTonAddress('invalid-address'); + expect(result.isValid).toBe(false); + expect(result.errors.length).toBeGreaterThan(0); + }); + + it('should return errors for invalid type', () => { + // @ts-expect-error Testing invalid type input + const result = validateTonAddress(123); + expect(result.isValid).toBe(false); + }); + }); + + describe('detectAddressFormat', () => { + it('should detect raw', () => { + expect(detectAddressFormat(validRaw)).toBe('raw'); + }); + it('should detect bounceable', () => { + expect(detectAddressFormat(validBounceable)).toBe('bounceable'); + }); + it('should detect non-bounceable', () => { + expect(detectAddressFormat(validNonBounceable)).toBe('non-bounceable'); + }); + it('should detect unknown', () => { + expect(detectAddressFormat('invalid')).toBe('unknown'); + }); + }); +}); diff --git a/packages/walletkit/src/validation/wallet.spec.ts b/packages/walletkit/src/validation/wallet.spec.ts new file mode 100644 index 000000000..2f7aadbd0 --- /dev/null +++ b/packages/walletkit/src/validation/wallet.spec.ts @@ -0,0 +1,85 @@ +/** + * Copyright (c) TonTech. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { describe, it, expect, vi } from 'vitest'; + +import { validatePublicKey, validateWalletVersion, validateWalletMethods, validateWallet } from './wallet'; +import type { Wallet } from '../api/interfaces'; + +describe('wallet validation', () => { + describe('validatePublicKey', () => { + it('should validate correct public key', () => { + const validKey = '0'.repeat(64); + const result = validatePublicKey(validKey); + expect(result.isValid).toBe(true); + expect(result.errors).toHaveLength(0); + }); + + it('should reject invalid public key', () => { + const invalidLength = '0'.repeat(63); + const r1 = validatePublicKey(invalidLength); + expect(r1.isValid).toBe(false); + expect(r1.errors).toContainEqual(expect.stringContaining('must be 64 characters long')); + + const invalidChars = 'x'.repeat(64); + const r2 = validatePublicKey(invalidChars); + expect(r2.isValid).toBe(false); + expect(r2.errors).toContainEqual(expect.stringContaining('hexadecimal characters')); + + const empty = ''; + const r3 = validatePublicKey(empty); + expect(r3.isValid).toBe(false); + }); + }); + + describe('validateWalletVersion', () => { + it('should validate correct versions', () => { + expect(validateWalletVersion('v3r1').isValid).toBe(true); + expect(validateWalletVersion('v4r2').isValid).toBe(true); + expect(validateWalletVersion('v5r1').isValid).toBe(true); + }); + + it('should reject invalid versions', () => { + expect(validateWalletVersion('v1r1').isValid).toBe(false); + expect(validateWalletVersion('invalid').isValid).toBe(false); + expect(validateWalletVersion('').isValid).toBe(false); + }); + }); + + describe('validateWalletMethods', () => { + it('should pass for valid wallet', async () => { + const mockWallet = { + getAddress: vi.fn().mockResolvedValue('valid-address'), + getBalance: vi.fn().mockResolvedValue('100'), + getStateInit: vi.fn().mockResolvedValue('state-init'), + } as unknown as Wallet; + + const result = await validateWalletMethods(mockWallet); + expect(result.isValid).toBe(true); + expect(result.errors).toHaveLength(0); + }); + + it('should fail if methods throw', async () => { + const mockWallet = { + getAddress: vi.fn().mockRejectedValue(new Error('fail')), + getBalance: vi.fn().mockResolvedValue('100'), + } as unknown as Wallet; + + const result = await validateWalletMethods(mockWallet); + expect(result.isValid).toBe(false); + expect(result.errors).toContainEqual(expect.stringContaining('getAddress() failed')); + }); + }); + + describe('validateWallet', () => { + it('should return valid result (placeholder)', () => { + const result = validateWallet({} as Wallet); + expect(result.isValid).toBe(true); + }); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e5b97132..763e0d8f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ catalogs: version: 5.90.20 '@ton/core': specifier: ^0.63.0 - version: 0.63.0 + version: 0.63.1 '@ton/crypto': specifier: 3.3.0 version: 3.3.0 @@ -59,25 +59,25 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.29.8 - version: 2.29.8(@types/node@24.10.13) + version: 2.30.0(@types/node@22.19.15) '@ton/toolchain': specifier: github:the-ton-tech/toolchain#v1.5.0 - version: https://codeload.github.com/the-ton-tech/toolchain/tar.gz/31376da778155bd0984d68abf2a46dce417bacb8(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1))(jiti@2.6.1)(typescript@5.9.3) + version: https://codeload.github.com/the-ton-tech/toolchain/tar.gz/31376da778155bd0984d68abf2a46dce417bacb8(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1))(jiti@2.6.1)(typescript@5.9.3) eslint: specifier: ^9.39.2 - version: 9.39.2(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-license-header: specifier: ^0.8.0 version: 0.8.0 globals: specifier: ^17.1.0 - version: 17.3.0 + version: 17.4.0 rimraf: specifier: ^6.1.2 - version: 6.1.2 + version: 6.1.3 turbo: specifier: 2.7.4 version: 2.7.4 @@ -89,7 +89,7 @@ importers: version: 0.7.8 '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.2.1(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@ton/appkit': specifier: workspace:* version: link:../../packages/appkit @@ -98,7 +98,7 @@ importers: version: link:../../packages/appkit-react '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': specifier: 'catalog:' version: 3.3.0 @@ -131,16 +131,16 @@ importers: version: 19.2.3(react@19.2.3) react-router-dom: specifier: ^7.9.5 - version: 7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 7.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tailwind-merge: specifier: ^3.4.0 - version: 3.4.0 + version: 3.5.0 tailwindcss: specifier: ^4.1.18 - version: 4.1.18 + version: 4.2.1 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -150,7 +150,7 @@ importers: devDependencies: '@eslint/js': specifier: ^9.39.2 - version: 9.39.2 + version: 9.39.4 '@types/react': specifier: 'catalog:' version: 19.2.8 @@ -159,31 +159,31 @@ importers: version: 19.2.3(@types/react@19.2.8) '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.4(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) eslint: specifier: ^9.39.2 - version: 9.39.2(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^7.0.1 - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.26 - version: 0.4.26(eslint@9.39.2(jiti@2.6.1)) + version: 0.4.26(eslint@9.39.4(jiti@2.6.1)) globals: specifier: ^17.0.0 - version: 17.3.0 + version: 17.4.0 typescript: specifier: ~5.9.3 version: 5.9.3 typescript-eslint: specifier: ^8.53.0 - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-bundle-analyzer: specifier: ^1.3.2 - version: 1.3.2 + version: 1.3.6 apps/demo-wallet: dependencies: @@ -201,10 +201,10 @@ importers: version: 6.30.0 '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.2.1(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': specifier: 'catalog:' version: 3.3.0 @@ -213,7 +213,7 @@ importers: version: link:../../packages/walletkit '@truecarry/vite-plugin-web-extension': specifier: ^4.5.1 - version: 4.5.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0) + version: 4.5.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0) '@truecarry/webext-bridge': specifier: ^6.0.2 version: 6.0.2 @@ -246,19 +246,19 @@ importers: version: 19.2.3(react@19.2.3) react-router-dom: specifier: ^7.12.0 - version: 7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 7.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tailwind-merge: specifier: ^3.4.0 - version: 3.4.0 + version: 3.5.0 tailwindcss: specifier: ^4.1.18 - version: 4.1.18 + version: 4.2.1 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.18) + version: 1.0.7(tailwindcss@4.2.1) tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -268,13 +268,13 @@ importers: devDependencies: '@eslint/js': specifier: ^9.39.2 - version: 9.39.2 + version: 9.39.4 '@playwright/test': specifier: ^1.57.0 version: 1.58.2 '@types/chrome': specifier: ^0.1.33 - version: 0.1.36 + version: 0.1.37 '@types/react': specifier: 'catalog:' version: 19.2.8 @@ -283,46 +283,46 @@ importers: version: 19.2.3(@types/react@19.2.8) '@types/webextension-polyfill': specifier: ^0.12.4 - version: 0.12.4 + version: 0.12.5 '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 5.1.4(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) allure-js-commons: specifier: ^3.4.5 - version: 3.4.5(allure-playwright@3.4.5(@playwright/test@1.58.2)) + version: 3.6.0(allure-playwright@3.6.0(@playwright/test@1.58.2)) allure-playwright: specifier: ^3.4.5 - version: 3.4.5(@playwright/test@1.58.2) + version: 3.6.0(@playwright/test@1.58.2) cross-env: specifier: ^10.1.0 version: 10.1.0 dotenv: specifier: ^17.2.3 - version: 17.2.3 + version: 17.3.1 eslint: specifier: ^9.39.2 - version: 9.39.2(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.2(jiti@2.6.1)) + version: 5.2.0(eslint@9.39.4(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.26 - version: 0.4.26(eslint@9.39.2(jiti@2.6.1)) + version: 0.4.26(eslint@9.39.4(jiti@2.6.1)) globals: specifier: ^17.0.0 - version: 17.3.0 + version: 17.4.0 typescript: specifier: ~5.9.3 version: 5.9.3 typescript-eslint: specifier: ^8.53.0 - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-bundle-analyzer: specifier: ^1.3.2 - version: 1.3.2 + version: 1.3.6 webextension-polyfill: specifier: ^0.12.0 version: 0.12.0 @@ -358,16 +358,16 @@ importers: version: 2.2.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)) '@ton-community/ton-ledger': specifier: 7.3.0 - version: 7.3.0(@ton/core@0.63.0(@ton/crypto@3.3.0)) + version: 7.3.0(@ton/core@0.63.1(@ton/crypto@3.3.0)) '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': specifier: 'catalog:' version: 3.3.0 '@ton/ton': specifier: 16.1.0 - version: 16.1.0(@ton/core@0.63.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + version: 16.1.0(@ton/core@0.63.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) '@ton/walletkit': specifier: workspace:* version: link:../../packages/walletkit @@ -415,7 +415,7 @@ importers: version: 5.0.10(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-router: specifier: 6.0.22 - version: 6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-secure-store: specifier: ~15.0.8 version: 15.0.8(expo@54.0.32) @@ -521,7 +521,7 @@ importers: version: 11.10.0 grammy: specifier: ^1.35.0 - version: 1.39.3 + version: 1.41.1 tsx: specifier: ^4.19.0 version: 4.21.0 @@ -531,7 +531,7 @@ importers: version: 7.6.13 '@types/node': specifier: ^22.15.29 - version: 22.19.11 + version: 22.19.15 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -558,7 +558,7 @@ importers: version: 19.2.8 dotenv: specifier: ^17.2.3 - version: 17.2.3 + version: 17.3.1 react: specifier: 'catalog:' version: 19.2.3 @@ -583,10 +583,10 @@ importers: version: 4.0.17(vitest@4.0.18) happy-dom: specifier: ^20.6.1 - version: 20.6.1 + version: 20.8.3 vitest: specifier: ^4.0.17 - version: 4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) demo/v4ledger-adapter: dependencies: @@ -595,10 +595,10 @@ importers: version: 6.32.0 '@ton-community/ton-ledger': specifier: ^7.3.0 - version: 7.3.0(@ton/core@0.63.0(@ton/crypto@3.3.0)) + version: 7.3.0(@ton/core@0.63.1(@ton/crypto@3.3.0)) '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/walletkit': specifier: workspace:* version: link:../../packages/walletkit @@ -611,10 +611,10 @@ importers: version: 6.30.0 dotenv: specifier: ^17.2.3 - version: 17.2.3 + version: 17.3.1 rimraf: specifier: ^6.1.2 - version: 6.1.2 + version: 6.1.3 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -626,7 +626,7 @@ importers: version: link:../v4ledger-adapter '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': specifier: 'catalog:' version: 3.3.0 @@ -648,7 +648,7 @@ importers: version: 19.2.8 rimraf: specifier: ^6.1.2 - version: 6.1.2 + version: 6.1.3 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -667,7 +667,7 @@ importers: version: 5.90.20 '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@tonconnect/ui': specifier: 'catalog:' version: 2.4.1 @@ -676,7 +676,7 @@ importers: version: 5.8.3 vitest: specifier: ^4.0.17 - version: 4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/appkit-react: dependencies: @@ -685,7 +685,7 @@ importers: version: link:../appkit '@tonconnect/ui': specifier: '>=2.4.1' - version: 2.4.1 + version: 2.4.2 clsx: specifier: 2.1.1 version: 2.1.1 @@ -698,16 +698,16 @@ importers: devDependencies: '@storybook/addon-docs': specifier: 10.2.8 - version: 10.2.8(@types/react@19.2.8)(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 10.2.8(@types/react@19.2.8)(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@storybook/react': specifier: 10.2.8 - version: 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + version: 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@storybook/react-vite': specifier: 10.2.8 - version: 10.2.8(esbuild@0.27.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 10.2.8(esbuild@0.27.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@storybook/test': specifier: ^8.6.15 - version: 8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + version: 8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@tanstack/react-query': specifier: 'catalog:' version: 5.90.20(react@19.2.3) @@ -731,22 +731,22 @@ importers: version: 19.2.3(react@19.2.3) storybook: specifier: 10.2.8 - version: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) typescript: specifier: ^5.9.2 version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-node-polyfills: specifier: ^0.25.0 - version: 0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 0.25.0(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) packages/mcp: dependencies: '@modelcontextprotocol/sdk': specifier: ^1.25.1 - version: 1.26.0(zod@3.25.76) + version: 1.27.1(zod@3.25.76) '@ton/walletkit': specifier: workspace:* version: link:../walletkit @@ -756,13 +756,13 @@ importers: devDependencies: '@types/node': specifier: ^22.15.29 - version: 22.19.11 + version: 22.19.15 '@vitest/coverage-v8': specifier: ^4.0.17 version: 4.0.17(vitest@4.0.18) rimraf: specifier: ^6.1.0 - version: 6.1.2 + version: 6.1.3 rolldown: specifier: 1.0.0-rc.2 version: 1.0.0-rc.2 @@ -771,7 +771,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.17 - version: 4.0.18(@types/node@22.19.11)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/walletkit: dependencies: @@ -792,32 +792,32 @@ importers: version: 3.4.1 lru-cache: specifier: ^11.2.4 - version: 11.2.5 + version: 11.2.6 uuid: specifier: ^13.0.0 version: 13.0.0 devDependencies: '@jest/globals': specifier: ^30.2.0 - version: 30.2.0 + version: 30.3.0 '@stryker-mutator/core': specifier: ^9.4.0 - version: 9.5.1(@types/node@24.10.13) + version: 9.6.0(@types/node@22.19.15) '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': specifier: 'catalog:' version: 3.3.0 '@types/chrome': specifier: ^0.1.33 - version: 0.1.36 + version: 0.1.37 '@types/jest': specifier: ^30.0.0 version: 30.0.0 '@types/webextension-polyfill': specifier: ^0.12.4 - version: 0.12.4 + version: 0.12.5 '@vitest/coverage-v8': specifier: 4.0.17 version: 4.0.17(vitest@4.0.18) @@ -829,31 +829,31 @@ importers: version: 5.6.2 dotenv: specifier: ^17.2.3 - version: 17.2.3 + version: 17.3.1 eslint: specifier: ^9.39.2 - version: 9.39.2(jiti@2.6.1) + version: 9.39.4(jiti@2.6.1) jest: specifier: ^30.2.0 - version: 30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) + version: 30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) node-hid: specifier: ^3.2.0 - version: 3.2.0 + version: 3.3.0 rimraf: specifier: ^6.1.2 - version: 6.1.2 + version: 6.1.3 swagger-typescript-api: specifier: 13.2.16 - version: 13.2.16(magicast@0.5.1) + version: 13.2.16(magicast@0.5.2) ts-jest: specifier: ^29.4.6 - version: 29.4.6(@babel/core@7.29.0)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0))(esbuild@0.27.3)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.6(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@30.3.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)))(typescript@5.9.3) ts-json-schema-generator: specifier: ^2.4.0 - version: 2.4.0 + version: 2.9.0 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@24.10.13)(typescript@5.9.3) + version: 10.9.2(@types/node@22.19.15)(typescript@5.9.3) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -862,13 +862,13 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) vite-bundle-analyzer: specifier: ^1.3.2 - version: 1.3.2 + version: 1.3.6 vitest: specifier: ^4.0.17 - version: 4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: '@ston-fi/omniston-sdk': specifier: ^0.7.8 @@ -891,13 +891,13 @@ importers: devDependencies: '@ton/core': specifier: 'catalog:' - version: 0.63.0(@ton/crypto@3.3.0) + version: 0.63.1(@ton/crypto@3.3.0) typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/walletkit-ios-bridge: dependencies: @@ -928,7 +928,7 @@ importers: version: 5.9.3 vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -940,9 +940,6 @@ packages: graphql: optional: true - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -950,15 +947,6 @@ packages: resolution: {integrity: sha512-d4c+fg+xy9e46c8+YnrrgIQR45CZlAi7PwdzIfDXDM6ACxEZli1/fxhURsq30ZpMZy6LvSkr41jGq5aF5TD7rQ==} hasBin: true - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} - - '@asamuzakjp/dom-selector@6.7.8': - resolution: {integrity: sha512-stisC1nULNc9oH5lakAj8MH88ZxeGxzyWNDfbdCxvJSJIvDsHNZqYvscGTgy/ysgXWLJPt6K/4t0/GjvtKcFJQ==} - - '@asamuzakjp/nwsapi@2.3.9': - resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -970,18 +958,10 @@ packages: resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} - engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.29.1': resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} @@ -1006,8 +986,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.6': - resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} + '@babel/helper-define-polyfill-provider@0.6.7': + resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1077,22 +1057,11 @@ packages: resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.0': resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-proposal-decorators@7.28.6': - resolution: {integrity: sha512-RVdFPPyY9fCRAX68haPmOk2iyKW8PKJFthmm8NeSI3paNxKWGZIn99+VbIf0FrtCpFnPgnpF/L48tadi617ULg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-decorators@7.29.0': resolution: {integrity: sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==} engines: {node: '>=6.9.0'} @@ -1515,8 +1484,8 @@ packages: '@biomejs/wasm-nodejs@2.2.6': resolution: {integrity: sha512-lUEcvW+2eyMTgCofknBT04AvY7KkQSqKe3Nv40+ZxWVlStsPB0v2RWLu7xks69Yxcb3TfNGsfq21OWkdrmO2NQ==} - '@changesets/apply-release-plan@7.0.14': - resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} + '@changesets/apply-release-plan@7.1.0': + resolution: {integrity: sha512-yq8ML3YS7koKQ/9bk1PqO0HMzApIFNwjlwCnwFEXMzNe8NpzeeYYKCmnhWJGkN8g7E51MnWaSbqRcTcdIxUgnQ==} '@changesets/assemble-release-plan@6.0.9': resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} @@ -1524,12 +1493,12 @@ packages: '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.29.8': - resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} + '@changesets/cli@2.30.0': + resolution: {integrity: sha512-5D3Nk2JPqMI1wK25pEymeWRSlSMdo5QOGlyfrKg0AOufrUcjEE3RQgaCpHoBiM31CSNrtSgdJ0U6zL1rLDDfBA==} hasBin: true - '@changesets/config@3.1.2': - resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==} + '@changesets/config@3.1.3': + resolution: {integrity: sha512-vnXjcey8YgBn2L1OPWd3ORs0bGC4LoYcK/ubpgvzNVr53JXV5GiTVj7fWdMRsoKUH7hhhMAQnsJUqLr21EncNw==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} @@ -1537,8 +1506,8 @@ packages: '@changesets/get-dependents-graph@2.1.3': resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-release-plan@4.0.14': - resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} + '@changesets/get-release-plan@4.0.15': + resolution: {integrity: sha512-Q04ZaRPuEVZtA+auOYgFaVQQSA98dXiVe/yFaZfY7hoSmQICHGvP0TF4u3EDNHWmmCS4ekA/XSpKlSM2PyTS2g==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -1549,14 +1518,14 @@ packages: '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.4.2': - resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==} + '@changesets/parse@0.4.3': + resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} '@changesets/pre@2.0.2': resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@changesets/read@0.6.6': - resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==} + '@changesets/read@0.6.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} '@changesets/should-skip-package@0.1.2': resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} @@ -1577,37 +1546,6 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/color-helpers@6.0.1': - resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} - engines: {node: '>=20.19.0'} - - '@csstools/css-calc@3.1.1': - resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-color-parser@4.0.1': - resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.0.27': - resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} - - '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} - engines: {node: '>=20.19.0'} - '@devicefarmer/adbkit-logcat@2.1.3': resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} engines: {node: '>= 4'} @@ -1803,8 +1741,8 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/config-helpers@0.4.2': @@ -1815,12 +1753,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -1831,15 +1769,6 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/bytes@1.14.1': - resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - '@noble/hashes': ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - '@noble/hashes': - optional: true - '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} @@ -1885,18 +1814,18 @@ packages: react-native: optional: true - '@expo/env@2.0.8': - resolution: {integrity: sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==} + '@expo/env@2.0.11': + resolution: {integrity: sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==} '@expo/fingerprint@0.15.4': resolution: {integrity: sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==} hasBin: true - '@expo/image-utils@0.8.8': - resolution: {integrity: sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==} + '@expo/image-utils@0.8.12': + resolution: {integrity: sha512-3KguH7kyKqq7pNwLb9j6BBdD/bjmNwXZG/HPWT6GWIXbwrvAJt2JNyYTP5agWJ8jbbuys1yuCzmkX+TU6rmI7A==} - '@expo/json-file@10.0.8': - resolution: {integrity: sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==} + '@expo/json-file@10.0.12': + resolution: {integrity: sha512-inbDycp1rMAelAofg7h/mMzIe+Owx6F7pur3XdQ3EPTy00tme+4P6FWgHKUcjN8dBSrnbRNpSyh5/shzHyVCyQ==} '@expo/metro-config@54.0.14': resolution: {integrity: sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA==} @@ -1920,12 +1849,12 @@ packages: '@expo/metro@54.2.0': resolution: {integrity: sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==} - '@expo/osascript@2.3.8': - resolution: {integrity: sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w==} + '@expo/osascript@2.4.2': + resolution: {integrity: sha512-/XP7PSYF2hzOZzqfjgkoWtllyeTN8dW3aM4P6YgKcmmPikKL5FdoyQhti4eh6RK5a5VrUXJTOlTNIpIHsfB5Iw==} engines: {node: '>=12'} - '@expo/package-manager@1.9.10': - resolution: {integrity: sha512-axJm+NOj3jVxep49va/+L3KkF3YW/dkV+RwzqUJedZrv4LeTqOG4rhrCaCPXHTvLqCTDKu6j0Xyd28N7mnxsGA==} + '@expo/package-manager@1.10.3': + resolution: {integrity: sha512-ZuXiK/9fCrIuLjPSe1VYmfp0Sa85kCMwd8QQpgyi5ufppYKRtLBg14QOgUqj8ZMbJTxE0xqzd0XR7kOs3vAK9A==} '@expo/plist@0.4.8': resolution: {integrity: sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==} @@ -1958,24 +1887,24 @@ packages: '@expo/ws-tunnel@1.0.6': resolution: {integrity: sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==} - '@expo/xcpretty@4.4.0': - resolution: {integrity: sha512-o2qDlTqJ606h4xR36H2zWTywmZ3v3842K6TU8Ik2n1mfW0S580VHlt3eItVYdLYz+klaPp7CXqanja8eASZjRw==} + '@expo/xcpretty@4.4.1': + resolution: {integrity: sha512-KZNxZvnGCtiM2aYYZ6Wz0Ix5r47dAvpNLApFtZWnSoERzAdOMzVBOPysBoM0JlF6FKWZ8GPqgn6qt3dV/8Zlpg==} hasBin: true - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/react-dom@2.1.7': - resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} '@gorhom/bottom-sheet@5.2.8': resolution: {integrity: sha512-+N27SMpbBxXZQ/IA2nlEV6RGxL/qSFHKfdFKcygvW+HqPG5jVNb1OqehLQsGfBP+Up42i0gW5ppI+DhpB7UCzA==} @@ -1998,11 +1927,11 @@ packages: react: '*' react-native: '*' - '@grammyjs/types@3.23.0': - resolution: {integrity: sha512-D3jQ4UWERPsyR3op/YFudMMIPNTU47vy7L51uO9/73tMELmjO/+LX5N36/Y0CG5IQfIsz43MxiHI5rgsK0/k+g==} + '@grammyjs/types@3.25.0': + resolution: {integrity: sha512-iN9i5p+8ZOu9OMxWNcguojQfz4K/PDyMPOnL7PPCON+SoA/F8OKMH3uR7CVUkYfdNe0GCz8QOzAWrnqusQYFOg==} - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -2027,8 +1956,8 @@ packages: resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.0.4': - resolution: {integrity: sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==} + '@inquirer/checkbox@5.1.0': + resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2036,8 +1965,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.0.4': - resolution: {integrity: sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==} + '@inquirer/confirm@6.0.8': + resolution: {integrity: sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2045,8 +1974,8 @@ packages: '@types/node': optional: true - '@inquirer/core@11.1.1': - resolution: {integrity: sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==} + '@inquirer/core@11.1.5': + resolution: {integrity: sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2054,8 +1983,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.4': - resolution: {integrity: sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==} + '@inquirer/editor@5.0.8': + resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2063,8 +1992,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.4': - resolution: {integrity: sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==} + '@inquirer/expand@5.0.8': + resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2094,8 +2023,8 @@ packages: resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@5.0.4': - resolution: {integrity: sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==} + '@inquirer/input@5.0.8': + resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2103,8 +2032,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.4': - resolution: {integrity: sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==} + '@inquirer/number@4.0.8': + resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2112,8 +2041,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.4': - resolution: {integrity: sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==} + '@inquirer/password@5.0.8': + resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2121,8 +2050,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.2.0': - resolution: {integrity: sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==} + '@inquirer/prompts@8.3.0': + resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2130,8 +2059,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.0': - resolution: {integrity: sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==} + '@inquirer/rawlist@5.2.4': + resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2139,8 +2068,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.0': - resolution: {integrity: sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==} + '@inquirer/search@4.1.4': + resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2148,8 +2077,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.0.4': - resolution: {integrity: sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==} + '@inquirer/select@5.1.0': + resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2166,14 +2095,6 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2194,12 +2115,12 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@30.2.0': - resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==} + '@jest/console@30.3.0': + resolution: {integrity: sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/core@30.2.0': - resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==} + '@jest/core@30.3.0': + resolution: {integrity: sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2211,48 +2132,48 @@ packages: resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/diff-sequences@30.0.1': - resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + '@jest/diff-sequences@30.3.0': + resolution: {integrity: sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/environment@29.7.0': resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/environment@30.2.0': - resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} + '@jest/environment@30.3.0': + resolution: {integrity: sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect-utils@30.2.0': - resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==} + '@jest/expect-utils@30.3.0': + resolution: {integrity: sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect@30.2.0': - resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==} + '@jest/expect@30.3.0': + resolution: {integrity: sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/fake-timers@29.7.0': resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/fake-timers@30.2.0': - resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} + '@jest/fake-timers@30.3.0': + resolution: {integrity: sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/get-type@30.1.0': resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/globals@30.2.0': - resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==} + '@jest/globals@30.3.0': + resolution: {integrity: sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/pattern@30.0.1': resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/reporters@30.2.0': - resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==} + '@jest/reporters@30.3.0': + resolution: {integrity: sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2268,36 +2189,36 @@ packages: resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/snapshot-utils@30.2.0': - resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==} + '@jest/snapshot-utils@30.3.0': + resolution: {integrity: sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/source-map@30.0.1': resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/test-result@30.2.0': - resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==} + '@jest/test-result@30.3.0': + resolution: {integrity: sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/test-sequencer@30.2.0': - resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==} + '@jest/test-sequencer@30.3.0': + resolution: {integrity: sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/transform@29.7.0': resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/transform@30.2.0': - resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} + '@jest/transform@30.3.0': + resolution: {integrity: sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@30.2.0': - resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} + '@jest/types@30.3.0': + resolution: {integrity: sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4': @@ -2382,8 +2303,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@modelcontextprotocol/sdk@1.26.0': - resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -2446,8 +2367,8 @@ packages: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} engines: {node: '>=12'} '@polka/url@1.0.0-next.29': @@ -3219,25 +3140,25 @@ packages: '@types/react': optional: true - '@react-navigation/bottom-tabs@7.10.1': - resolution: {integrity: sha512-MirOzKEe/rRwPSE9HMrS4niIo0LyUhewlvd01TpzQ1ipuXjH2wJbzAM9gS/r62zriB6HMHz2OY6oIRduwQJtTw==} + '@react-navigation/bottom-tabs@7.15.5': + resolution: {integrity: sha512-wQHredlCrRmShWQ1vF4HUcLdaiJ8fUgnbaeQH7BJ7MQVQh4mdzab0IOY/4QSmUyNRB350oyu1biTycyQ5FKWMQ==} peerDependencies: - '@react-navigation/native': ^7.1.28 + '@react-navigation/native': ^7.1.33 react: '>= 18.2.0' react-native: '*' react-native-safe-area-context: '>= 4.0.0' react-native-screens: '>= 4.0.0' - '@react-navigation/core@7.14.0': - resolution: {integrity: sha512-tMpzskBzVp0E7CRNdNtJIdXjk54Kwe/TF9ViXAef+YFM1kSfGv4e/B2ozfXE+YyYgmh4WavTv8fkdJz1CNyu+g==} + '@react-navigation/core@7.16.1': + resolution: {integrity: sha512-xhquoyhKdqDfiL7LuupbwYnmauUGfVFGDEJO34m26k8zSN1eDjQ2stBZcHN8ILOI1PrG9885nf8ZmfaQxPS0ww==} peerDependencies: react: '>= 18.2.0' - '@react-navigation/elements@2.9.5': - resolution: {integrity: sha512-iHZU8rRN1014Upz73AqNVXDvSMZDh5/ktQ1CMe21rdgnOY79RWtHHBp9qOS3VtqlUVYGkuX5GEw5mDt4tKdl0g==} + '@react-navigation/elements@2.9.10': + resolution: {integrity: sha512-N8tuBekzTRb0pkMHFJGvmC6Q5OisSbt6gzvw7RHMnp4NDo5auVllT12sWFaTXf8mTduaLKNSrD/NZNaOqThCBg==} peerDependencies: '@react-native-masked-view/masked-view': '>= 0.2.0' - '@react-navigation/native': ^7.1.28 + '@react-navigation/native': ^7.1.33 react: '>= 18.2.0' react-native: '*' react-native-safe-area-context: '>= 4.0.0' @@ -3245,17 +3166,17 @@ packages: '@react-native-masked-view/masked-view': optional: true - '@react-navigation/native-stack@7.11.0': - resolution: {integrity: sha512-yNx9Wr4dfpOHpqjf2sGog4eH6KCYwTAEPlUPrKbvWlQbCRm5bglwPmaTXw9hTovX9v3HIa42yo7bXpbYfq4jzg==} + '@react-navigation/native-stack@7.14.4': + resolution: {integrity: sha512-HFEnM5Q7JY3FmmiolD/zvgY+9sxZAyVGPZJoz7BdTvJmi1VHOdplf24YiH45mqeitlGnaOlvNT55rH4abHJ5eA==} peerDependencies: - '@react-navigation/native': ^7.1.28 + '@react-navigation/native': ^7.1.33 react: '>= 18.2.0' react-native: '*' react-native-safe-area-context: '>= 4.0.0' react-native-screens: '>= 4.0.0' - '@react-navigation/native@7.1.28': - resolution: {integrity: sha512-d1QDn+KNHfHGt3UIwOZvupvdsDdiHYZBEj7+wL2yDVo3tMezamYy60H9s3EnNVE1Ae1ty0trc7F2OKqo/RmsdQ==} + '@react-navigation/native@7.1.33': + resolution: {integrity: sha512-DpFdWGcgLajKZ1TuIvDNQsblN2QaUFWpTQaB8v7WRP9Mix8H/6TFoIrZd93pbymI2hybd6UYrD+lI408eWVcfw==} peerDependencies: react: '>= 18.2.0' react-native: '*' @@ -3364,128 +3285,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -3501,11 +3422,11 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sinclair/typebox@0.34.41': - resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} + '@sinclair/typebox@0.34.48': + resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} @@ -3517,11 +3438,11 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@sinonjs/fake-timers@13.0.5': - resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@sinonjs/fake-timers@15.1.1': + resolution: {integrity: sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@ston-fi/omniston-sdk@0.7.8': resolution: {integrity: sha512-2qXKbFGgwcPEVxTGBqvOjoH8914KAuXzUN7Id1KGe1rCLafZG8OKRg1u+c72ER/vthPhAMANWUsnitjhxoXXvg==} @@ -3600,81 +3521,81 @@ packages: peerDependencies: storybook: ^8.6.15 - '@stryker-mutator/api@9.5.1': - resolution: {integrity: sha512-Z8Waw3v9XfqouOKnRjPv0ePnu7UfYfErJaNE2+al2bqquFaTuONYaeED55A4gzupjmfdGCfBdnMdmiuH4zww5g==} + '@stryker-mutator/api@9.6.0': + resolution: {integrity: sha512-kJEEwOVoWDXGEIXuM+9efT6LSJ7nyxnQQvjEoKg8GSZXbDUjfD0tqA0aBD06U1SzQLKCM7ffjgPffr154MHZKw==} engines: {node: '>=20.0.0'} - '@stryker-mutator/core@9.5.1': - resolution: {integrity: sha512-dudpdpxfWaoYcFE9XIYm+z0La2WMPh8M0DHQYuAT+zZ9VTaFd0L92DmzAuqc7oJgR9DX66nYoU7i0GQ5+5oOIQ==} + '@stryker-mutator/core@9.6.0': + resolution: {integrity: sha512-oSbw01l6HXHt0iW9x5fQj7yHGGT8ZjCkXSkI7Bsu0juO7Q6vRMXk7XcvKpCBgRgzKXi1osg8+iIzj7acHuxepQ==} engines: {node: '>=20.0.0'} hasBin: true - '@stryker-mutator/instrumenter@9.5.1': - resolution: {integrity: sha512-WjuqwJOmiftTGCzhtWhyXqMd5+TVMVsoAWDonvp4uVf5/1HPN/dVcDYILTrfK/sfiOvtLCK30byRBhoaUnOs4A==} + '@stryker-mutator/instrumenter@9.6.0': + resolution: {integrity: sha512-tWdRYfm9LF4Go7cNOos0xEIOEnN7ZOSj38rfXvGZS9IINlvYBrBCl2xcz/67v6l5A7xksMWWByZRIq2bgdnnUg==} engines: {node: '>=20.0.0'} - '@stryker-mutator/util@9.5.1': - resolution: {integrity: sha512-KXmbEeXF3Z20P+9W8i/f1j+U5nWSm9oeb1VNV6j5/RfzhnMKWZCrvojJqRfnxdkCiMIFWMAHSlM9K0mfFZLNXQ==} + '@stryker-mutator/util@9.6.0': + resolution: {integrity: sha512-gw7fJOFNHEj9inAEOodD9RrrMEMhZmWJ46Ww/kDJAXlSsBBmdwCzeomNLngmLTvgp14z7Tfq85DHYwvmNMdOxA==} - '@tailwindcss/node@4.1.18': - resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + '@tailwindcss/node@4.2.1': + resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} - '@tailwindcss/oxide-android-arm64@4.1.18': - resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-android-arm64@4.2.1': + resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} + engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.18': - resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-arm64@4.2.1': + resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} + engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.18': - resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-darwin-x64@4.2.1': + resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} + engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.18': - resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-freebsd-x64@4.2.1': + resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} + engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': - resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': + resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} + engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': - resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': + resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': - resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': + resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} + engines: {node: '>= 20'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': - resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': + resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.18': - resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-linux-x64-musl@4.2.1': + resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} + engines: {node: '>= 20'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.18': - resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + '@tailwindcss/oxide-wasm32-wasi@4.2.1': + resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -3685,24 +3606,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': - resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': + resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} + engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': - resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} - engines: {node: '>= 10'} + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': + resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} + engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.18': - resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} - engines: {node: '>= 10'} + '@tailwindcss/oxide@4.2.1': + resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} + engines: {node: '>= 20'} - '@tailwindcss/vite@4.1.18': - resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} + '@tailwindcss/vite@4.2.1': + resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -3762,8 +3683,8 @@ packages: peerDependencies: '@ton/core': '>=0.52.2' - '@ton/core@0.63.0': - resolution: {integrity: sha512-uBc0WQNYVzjAwPvIazf0Ryhpv4nJd4dKIuHoj766gUdwe8sVzGM+TxKKKJETL70hh/mxACyUlR4tAwN0LWDNow==} + '@ton/core@0.63.1': + resolution: {integrity: sha512-hDWMjlKzc18W2E4OeV3hUP8ohRJNHPD4Wd1+AQJj8zshZyCRT0usrvnExgbNUTo/vntDqCGMzgYWbXxyaA+L4g==} peerDependencies: '@ton/crypto': '>=3.2.0' @@ -3811,6 +3732,9 @@ packages: '@tonconnect/ui@2.4.1': resolution: {integrity: sha512-W0wIDJdDdYV3rqP0vt92H/5HktkjeEAddhAOBo0LKZzrMG0r9obY00FKpuV/i2re9RAXLGq/oMwBRZaRHer4kA==} + '@tonconnect/ui@2.4.2': + resolution: {integrity: sha512-8mr7AAxcg8TQBgzOiOQ8/B5BGvS1DVM+2vSLk5NTqli/eGZzNhk/09wcKYdTH50lQ/WbYoAdZu5StWHZ9R7Dmw==} + '@truecarry/vite-plugin-web-extension@4.5.1': resolution: {integrity: sha512-WSramCYE+wVFH/zQdBhaBP5gSd9pldyjOu+jvkaTEFXwzCDbNQJ+34ke4/XDsaohpcQTe+lbVXbUT+Jt4Ni9Jw==} engines: {node: '>=16'} @@ -3818,8 +3742,8 @@ packages: '@truecarry/webext-bridge@6.0.2': resolution: {integrity: sha512-Q2gmBkfbForHKxvDKI2Ep5LGih7+wEsjluXqNxUHNXW2b8ztNmuI77nZBqNLb83B3AeKGxe0txPnCycPVgYzXA==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -3854,8 +3778,8 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - '@types/chrome@0.1.36': - resolution: {integrity: sha512-BvHbuyGttYXnGt5Gpwa4769KIinKHY1iLjlAPrrMBS2GI9m/XNMPtdsq0NgQalyuUdxvlMN/0OyGw0shFVIoUQ==} + '@types/chrome@0.1.37': + resolution: {integrity: sha512-IJE4ceuDO7lrEuua7Pow47zwNcI8E6qqkowRP7aFPaZ0lrjxh6y836OPqqkIZeTX64FTogbw+4RNH0+QrweCTQ==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3899,8 +3823,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash@4.17.23': - resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -3911,11 +3835,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.19.11': - resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} - - '@types/node@24.10.13': - resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} + '@types/node@22.19.15': + resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -3937,11 +3858,11 @@ packages: '@types/swagger-schema-official@2.0.25': resolution: {integrity: sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==} - '@types/w3c-web-usb@1.0.12': - resolution: {integrity: sha512-GD9XFhJZFtCbspsB3t1vD3SgkWVInIMoL1g1CcE0p3DD7abgLrQ2Ws22RS38CXPUCQXgyKjUAGKdy5d0CLT5jw==} + '@types/w3c-web-usb@1.0.13': + resolution: {integrity: sha512-N2nSl3Xsx8mRHZBvMSdNGtzMyeleTvtlEw+ujujgXalPqOjIA6UtrqcB6OzyUjkTbDm3J7P1RNK1lgoO7jxtsw==} - '@types/webextension-polyfill@0.12.4': - resolution: {integrity: sha512-wK8YdSI0pDiaehSLDIvtvonYmLwUUivg4Z6JCJO8rkyssMAG82cFJgwPK/V7NO61mJBLg/tXeoXQL8AFzpXZmQ==} + '@types/webextension-polyfill@0.12.5': + resolution: {integrity: sha512-uKSAv6LgcVdINmxXMKBuVIcg/2m5JZugoZO8x20g7j2bXJkPIl/lVGQcDlbV+aXAiTyXT2RA5U5mI4IGCDMQeg==} '@types/webextension-polyfill@0.8.3': resolution: {integrity: sha512-GN+Hjzy9mXjWoXKmaicTegv3FJ0WFZ3aYz77Wk8TMp1IY3vEzvzj1vnsa0ggV7vMI1i+PUxe4qqnIJKCzf9aTg==} @@ -3961,125 +3882,66 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.34': - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} - - '@typescript-eslint/eslint-plugin@8.40.0': - resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.40.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.40.0': - resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.40.0': - resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/eslint-plugin@8.57.0': + resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + '@typescript-eslint/parser': ^8.57.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.40.0': - resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.40.0': - resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} + '@typescript-eslint/parser@8.57.0': + resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} + '@typescript-eslint/project-service@8.57.0': + resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.40.0': - resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} + '@typescript-eslint/scope-manager@8.57.0': + resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} + '@typescript-eslint/tsconfig-utils@8.57.0': + resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.40.0': - resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.40.0': - resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} + '@typescript-eslint/type-utils@8.57.0': + resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} + '@typescript-eslint/types@8.57.0': + resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.40.0': - resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} + '@typescript-eslint/typescript-estree@8.57.0': + resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} + '@typescript-eslint/utils@8.57.0': + resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.40.0': - resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} + '@typescript-eslint/visitor-keys@8.57.0': + resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -4294,12 +4156,12 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -4319,22 +4181,22 @@ packages: ajv: optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - allure-js-commons@3.4.5: - resolution: {integrity: sha512-mzAppLFva9PJqWvdI/aXn8jqr+5Am67JITdthMfEk8En6AhsrvRWZAjHZ1yUMDGEbxmivCni3lppvitJGStxFQ==} + allure-js-commons@3.6.0: + resolution: {integrity: sha512-RquIzMlh2l+ZLtq+Uxt+ZpOptxLzyPvLfPGbwU7dtgXo0QfUvhLFFkCljIR7Gjxo7jZ+WVqoto1yOPpXqU/i4g==} peerDependencies: - allure-playwright: 3.4.5 + allure-playwright: 3.6.0 peerDependenciesMeta: allure-playwright: optional: true - allure-playwright@3.4.5: - resolution: {integrity: sha512-pVewTpU9Z4qgT14VJdtYLAfF8rWROuESmvDkvyu/QnFWhRFrcDBnomynj84yx/QpXyMjJL+qu1yMU2z4Mq1YnA==} + allure-playwright@3.6.0: + resolution: {integrity: sha512-p/m41kdrgkKeJP0dgn/7yEQggxRBQEYdwRKUSfg2VEIfCP1va/6ph7dZNsYWKq+Hyj4Nd5DLs33DTS9VwEHe8w==} peerDependencies: '@playwright/test': '>=1.53.0' @@ -4364,8 +4226,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.0: - resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -4467,8 +4329,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.11: - resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} + ast-v8-to-istanbul@0.3.12: + resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -4490,8 +4352,8 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - atomically@2.1.0: - resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} + atomically@2.1.1: + resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} @@ -4506,8 +4368,8 @@ packages: peerDependencies: '@babel/core': ^7.8.0 - babel-jest@30.2.0: - resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} + babel-jest@30.3.0: + resolution: {integrity: sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@babel/core': ^7.11.0 || ^8.0.0-0 @@ -4524,12 +4386,12 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-jest-hoist@30.2.0: - resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} + babel-plugin-jest-hoist@30.3.0: + resolution: {integrity: sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-polyfill-corejs2@0.4.15: - resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} + babel-plugin-polyfill-corejs2@0.4.16: + resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4538,8 +4400,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.6: - resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} + babel-plugin-polyfill-regenerator@0.6.7: + resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4578,8 +4440,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-jest@30.2.0: - resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} + babel-preset-jest@30.3.0: + resolution: {integrity: sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@babel/core': ^7.11.0 || ^8.0.0-beta.1 @@ -4587,11 +4449,16 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true better-opn@3.0.2: @@ -4605,9 +4472,6 @@ packages: better-sqlite3@11.10.0: resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - big-integer@1.6.52: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} @@ -4630,11 +4494,11 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} - bn.js@5.2.2: - resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + bn.js@5.2.3: + resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} @@ -4664,6 +4528,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -4768,8 +4636,8 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - caniuse-lite@1.0.30001767: - resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} + caniuse-lite@1.0.30001777: + resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} @@ -4840,8 +4708,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.1: - resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} cipher-base@1.0.7: @@ -4851,11 +4719,11 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - citty@0.2.0: - resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==} + citty@0.2.1: + resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} - cjs-module-lexer@2.1.1: - resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -4935,12 +4803,8 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - commander@14.0.2: - resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} commander@2.20.3: @@ -5020,8 +4884,8 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} copyfiles@2.4.1: @@ -5066,10 +4930,6 @@ packages: resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} engines: {node: '>= 0.10'} - crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -5077,10 +4937,6 @@ packages: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -5091,17 +4947,9 @@ packages: cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - cssstyle@5.3.7: - resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} - engines: {node: '>=20'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - data-urls@7.0.0: - resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -5161,9 +5009,6 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -5172,8 +5017,8 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -5265,8 +5110,8 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} diffie-hellman@5.0.3: @@ -5325,12 +5170,8 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -5343,8 +5184,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.283: - resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==} + electron-to-chromium@1.5.307: + resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -5380,8 +5221,8 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -5392,22 +5233,22 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} env-editor@0.4.2: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -5443,11 +5284,6 @@ packages: es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - esbuild@0.27.3: resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} @@ -5526,8 +5362,8 @@ packages: eslint-plugin-license-header@0.8.0: resolution: {integrity: sha512-khTCz6G3JdoQfwrtY4XKl98KW4PpnWUKuFx8v+twIRhJADEyYglMDC0td8It75C1MZ88gcvMusWuUlJsos7gYg==} - eslint-plugin-prettier@5.5.4: - resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + eslint-plugin-prettier@5.5.5: + resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -5569,8 +5405,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5588,8 +5428,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -5641,15 +5481,12 @@ packages: evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - exec-async@2.2.0: - resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@9.6.0: - resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} exit-x@0.2.2: @@ -5660,12 +5497,12 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@30.2.0: - resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} + expect@30.3.0: + resolution: {integrity: sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} expo-asset@12.0.12: @@ -5846,8 +5683,8 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - express-rate-limit@8.2.1: - resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5885,11 +5722,20 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fast-wrap-ansi@0.2.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -5950,8 +5796,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.1: + resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} @@ -5976,8 +5822,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} forwarded@0.2.0: @@ -6003,8 +5849,8 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -6042,6 +5888,10 @@ packages: resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} hasBin: true + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -6050,8 +5900,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -6082,8 +5932,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} getenv@2.0.0: resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==} @@ -6112,19 +5962,9 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} - engines: {node: 20 || >=22} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - - glob@13.0.0: - resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} - engines: {node: 20 || >=22} - - glob@13.0.2: - resolution: {integrity: sha512-035InabNu/c1lW0tzPhAgapKctblppqsKKG9ZaNzbr+gXwWMjXoiyGSyB9sArzrjG7jY+zntRq5ZSUYemrnWVQ==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -6134,10 +5974,6 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -6146,8 +5982,8 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.3.0: - resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -6171,13 +6007,10 @@ packages: graceful-readlink@1.0.1: resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} - grammy@1.39.3: - resolution: {integrity: sha512-7arRRoOtOh9UwMwANZ475kJrWV6P3/EGNooeHlY0/SwZv4t3ZZ3Uiz9cAXK8Zg9xSdgmm8T21kx6n7SZaWvOcw==} + grammy@1.41.1: + resolution: {integrity: sha512-wcHAQ1e7svL3fJMpDchcQVcWUmywhuepOOjHUHmMmWAwUJEIyK5ea5sbSjZd+Gy1aMpZeP8VYJa+4tP+j1YptQ==} engines: {node: ^12.20.0 || >=14.13.1} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} @@ -6186,8 +6019,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.6.1: - resolution: {integrity: sha512-+0vhESXXhFwkdjZnJ5DlmJIfUYGgIEEjzIjB+aKJbFuqlvvKyOi+XkI1fYbgYR9QCxG5T08koxsQ6HrQfa5gCQ==} + happy-dom@20.8.3: + resolution: {integrity: sha512-lMHQRRwIPyJ70HV0kkFT7jH/gXzSI7yDkQFe07E2flwmNDFoWUTRMKpW2sglsnpeA7b6S2TJPp98EbQxai8eaQ==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -6241,6 +6074,9 @@ packages: hermes-estree@0.32.0: resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + hermes-estree@0.33.3: + resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} + hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} @@ -6250,24 +6086,23 @@ packages: hermes-parser@0.32.0: resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + hermes-parser@0.33.3: + resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.11.10: - resolution: {integrity: sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg==} + hono@4.12.7: + resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==} engines: {node: '>=16.9.0'} hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} - html-encoding-sniffer@6.0.0: - resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -6281,10 +6116,6 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - http2-client@1.3.5: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} @@ -6295,8 +6126,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-id@4.1.1: - resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + human-id@4.1.3: + resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true human-signals@2.1.0: @@ -6375,8 +6206,8 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -6458,8 +6289,8 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -6520,9 +6351,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-primitive@3.0.1: resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} engines: {node: '>=0.10.0'} @@ -6594,8 +6422,8 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} isarray@0.0.1: @@ -6653,20 +6481,16 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - - jest-changed-files@30.2.0: - resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==} + jest-changed-files@30.3.0: + resolution: {integrity: sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-circus@30.2.0: - resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==} + jest-circus@30.3.0: + resolution: {integrity: sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-cli@30.2.0: - resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==} + jest-cli@30.3.0: + resolution: {integrity: sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: @@ -6675,8 +6499,8 @@ packages: node-notifier: optional: true - jest-config@30.2.0: - resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==} + jest-config@30.3.0: + resolution: {integrity: sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@types/node': '*' @@ -6690,24 +6514,24 @@ packages: ts-node: optional: true - jest-diff@30.2.0: - resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==} + jest-diff@30.3.0: + resolution: {integrity: sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-docblock@30.2.0: resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-each@30.2.0: - resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==} + jest-each@30.3.0: + resolution: {integrity: sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-environment-node@30.2.0: - resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==} + jest-environment-node@30.3.0: + resolution: {integrity: sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-get-type@29.6.3: @@ -6718,32 +6542,32 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@30.2.0: - resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} + jest-haste-map@30.3.0: + resolution: {integrity: sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-leak-detector@30.2.0: - resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==} + jest-leak-detector@30.3.0: + resolution: {integrity: sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-matcher-utils@30.2.0: - resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==} + jest-matcher-utils@30.3.0: + resolution: {integrity: sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@30.2.0: - resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} + jest-message-util@30.3.0: + resolution: {integrity: sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@30.2.0: - resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} + jest-mock@30.3.0: + resolution: {integrity: sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-pnp-resolver@1.2.3: @@ -6763,56 +6587,56 @@ packages: resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-resolve-dependencies@30.2.0: - resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==} + jest-resolve-dependencies@30.3.0: + resolution: {integrity: sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-resolve@30.2.0: - resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==} + jest-resolve@30.3.0: + resolution: {integrity: sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-runner@30.2.0: - resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==} + jest-runner@30.3.0: + resolution: {integrity: sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-runtime@30.2.0: - resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==} + jest-runtime@30.3.0: + resolution: {integrity: sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-snapshot@30.2.0: - resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==} + jest-snapshot@30.3.0: + resolution: {integrity: sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@30.2.0: - resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} + jest-util@30.3.0: + resolution: {integrity: sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-validate@30.2.0: - resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==} + jest-validate@30.3.0: + resolution: {integrity: sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-watcher@30.2.0: - resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==} + jest-watcher@30.3.0: + resolution: {integrity: sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-worker@29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-worker@30.2.0: - resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} + jest-worker@30.3.0: + resolution: {integrity: sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest@30.2.0: - resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==} + jest@30.3.0: + resolution: {integrity: sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: @@ -6828,8 +6652,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.1: + resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} js-md4@0.3.2: resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} @@ -6840,8 +6664,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true js-yaml@4.1.1: @@ -6851,15 +6675,6 @@ packages: jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} - jsdom@28.0.0: - resolution: {integrity: sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -6921,8 +6736,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - ky@1.14.0: - resolution: {integrity: sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==} + ky@1.14.3: + resolution: {integrity: sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==} engines: {node: '>=18'} lan-network@0.1.7: @@ -6950,23 +6765,17 @@ packages: lighthouse-logger@2.0.2: resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - lightningcss-android-arm64@1.31.1: resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] - os: [darwin] + os: [android] lightningcss-darwin-arm64@1.31.1: resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} @@ -6974,10 +6783,10 @@ packages: cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} - cpu: [x64] + cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.31.1: @@ -6986,11 +6795,11 @@ packages: cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] - os: [freebsd] + os: [darwin] lightningcss-freebsd-x64@1.31.1: resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} @@ -6998,11 +6807,11 @@ packages: cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [freebsd] lightningcss-linux-arm-gnueabihf@1.31.1: resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} @@ -7010,10 +6819,10 @@ packages: cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} - cpu: [arm64] + cpu: [arm] os: [linux] lightningcss-linux-arm64-gnu@1.31.1: @@ -7022,8 +6831,8 @@ packages: cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -7034,10 +6843,10 @@ packages: cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} - cpu: [x64] + cpu: [arm64] os: [linux] lightningcss-linux-x64-gnu@1.31.1: @@ -7046,8 +6855,8 @@ packages: cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] @@ -7058,11 +6867,11 @@ packages: cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [linux] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -7070,10 +6879,10 @@ packages: cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} - cpu: [x64] + cpu: [arm64] os: [win32] lightningcss-win32-x64-msvc@1.31.1: @@ -7082,14 +6891,20 @@ packages: cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] lightningcss@1.31.1: resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -7132,8 +6947,8 @@ packages: lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} @@ -7149,8 +6964,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.5: - resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -7168,8 +6983,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.1: - resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + magicast@0.5.2: + resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -7197,9 +7012,6 @@ packages: mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} - media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} @@ -7226,60 +7038,118 @@ packages: resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==} engines: {node: '>=20.19.4'} + metro-babel-transformer@0.83.5: + resolution: {integrity: sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==} + engines: {node: '>=20.19.4'} + metro-cache-key@0.83.3: resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==} engines: {node: '>=20.19.4'} + metro-cache-key@0.83.5: + resolution: {integrity: sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==} + engines: {node: '>=20.19.4'} + metro-cache@0.83.3: resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==} engines: {node: '>=20.19.4'} + metro-cache@0.83.5: + resolution: {integrity: sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==} + engines: {node: '>=20.19.4'} + metro-config@0.83.3: resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==} engines: {node: '>=20.19.4'} + metro-config@0.83.5: + resolution: {integrity: sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==} + engines: {node: '>=20.19.4'} + metro-core@0.83.3: resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==} engines: {node: '>=20.19.4'} + metro-core@0.83.5: + resolution: {integrity: sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==} + engines: {node: '>=20.19.4'} + metro-file-map@0.83.3: resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==} engines: {node: '>=20.19.4'} + metro-file-map@0.83.5: + resolution: {integrity: sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==} + engines: {node: '>=20.19.4'} + metro-minify-terser@0.83.3: resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==} engines: {node: '>=20.19.4'} + metro-minify-terser@0.83.5: + resolution: {integrity: sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==} + engines: {node: '>=20.19.4'} + metro-resolver@0.83.3: resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==} engines: {node: '>=20.19.4'} + metro-resolver@0.83.5: + resolution: {integrity: sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==} + engines: {node: '>=20.19.4'} + metro-runtime@0.83.3: resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==} engines: {node: '>=20.19.4'} + metro-runtime@0.83.5: + resolution: {integrity: sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==} + engines: {node: '>=20.19.4'} + metro-source-map@0.83.3: resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==} engines: {node: '>=20.19.4'} + metro-source-map@0.83.5: + resolution: {integrity: sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==} + engines: {node: '>=20.19.4'} + metro-symbolicate@0.83.3: resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==} engines: {node: '>=20.19.4'} hasBin: true + metro-symbolicate@0.83.5: + resolution: {integrity: sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==} + engines: {node: '>=20.19.4'} + hasBin: true + metro-transform-plugins@0.83.3: resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==} engines: {node: '>=20.19.4'} + metro-transform-plugins@0.83.5: + resolution: {integrity: sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==} + engines: {node: '>=20.19.4'} + metro-transform-worker@0.83.3: resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==} engines: {node: '>=20.19.4'} + metro-transform-worker@0.83.5: + resolution: {integrity: sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==} + engines: {node: '>=20.19.4'} + metro@0.83.3: resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==} engines: {node: '>=20.19.4'} hasBin: true + metro@0.83.5: + resolution: {integrity: sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==} + engines: {node: '>=20.19.4'} + hasBin: true + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -7331,26 +7201,22 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - - minimatch@10.1.2: - resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} - engines: {node: 20 || >=22} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@3.1.0: @@ -7387,14 +7253,14 @@ packages: resolution: {integrity: sha512-SBGK0j8hLDne7bktgThKI8kGvGTx3rY3LAeQTmOKZ5bVnL/7TorLMvcVF7dIPJCu5RNUWhkkuF53kurygYVt3g==} engines: {node: '>=18'} - mutation-testing-elements@3.7.1: - resolution: {integrity: sha512-R8uWHQLpQbKRCWnF1D1DB0ldft2s33KuR0xvFm+V/kam6hCz1L57INSHAFTtVJmGhaKqTeH2yXsFwtjjrVDi3A==} + mutation-testing-elements@3.7.2: + resolution: {integrity: sha512-i7X2Q4X5eYon72W2QQ9HND7plVhQcqTnv+Xc3KeYslRZSJ4WYJoal8LFdbWm7dKWLNE0rYkCUrvboasWzF3MMA==} - mutation-testing-metrics@3.7.1: - resolution: {integrity: sha512-vtRtoYNdQpz9d8Qx/K5Anem0afHRzrKf8K8WRAhCs0/oziM8wwOEVn7iWBJESFmSIghkq/1vG8YEzLR2O9rC/A==} + mutation-testing-metrics@3.7.2: + resolution: {integrity: sha512-ichXZSC4FeJbcVHYOWzWUhNuTJGogc0WiQol8lqEBrBSp+ADl3fmcZMqrx0ogInEUiImn+A8JyTk6uh9vd25TQ==} - mutation-testing-report-schema@3.7.1: - resolution: {integrity: sha512-aKnIreO4je4B0mWD/pAPWw0IZ35de6ScL2nexUOKI/Lt0Qd7nGq1sH7JqmQUd7iqEokg0JlgmeiW5ghpOuP1og==} + mutation-testing-report-schema@3.7.2: + resolution: {integrity: sha512-fN5M61SDzIOeJyatMOhGPLDOFz5BQIjTNPjo4PcHIEUWrejO4i4B5PFuQ/2l43709hEsTxeiXX00H73WERKcDw==} mute-stream@3.0.0: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} @@ -7452,8 +7318,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - node-abi@3.77.0: - resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} + node-abi@3.88.0: + resolution: {integrity: sha512-At6b4UqIEVudaqPsXjmUO1r/N5BUr4yhDGs5PkBE8/oG5+TfLPhFechiskFsnT6Ql0VfUXbalUUCbfXxtj7K+w==} engines: {node: '>=10'} node-addon-api@3.2.1: @@ -7491,8 +7357,8 @@ packages: engines: {node: '>=10'} hasBin: true - node-hid@3.2.0: - resolution: {integrity: sha512-DJZcRV2QYboBay7AYNrtIdsKBOwInblf7fU7fuDmbxLecfKkMNy0hNUDx0gXtkndUV0DXP6hYL09IDrfYbh5pw==} + node-hid@3.3.0: + resolution: {integrity: sha512-j+dFgJLRAE0nufQKXk3IfS6T6YuHhCgMvz4TrG0sgtb6DSCdYpfJ1etcdmeCmPQjUgO+yo32ktVrRliNs/+fmg==} engines: {node: '>=10.16'} hasBin: true @@ -7505,8 +7371,8 @@ packages: node-readfiles@0.2.0: resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} node-stdlib-browser@1.3.1: resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} @@ -7537,8 +7403,8 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - nypm@0.6.4: - resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==} + nypm@0.6.5: + resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} engines: {node: '>=18'} hasBin: true @@ -7562,6 +7428,10 @@ packages: resolution: {integrity: sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==} engines: {node: '>=20.19.4'} + ob1@0.83.5: + resolution: {integrity: sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==} + engines: {node: '>=20.19.4'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7734,9 +7604,6 @@ packages: resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==} engines: {node: '>=10'} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -7767,9 +7634,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} @@ -7814,8 +7681,8 @@ packages: pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} pino@9.7.0: resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} @@ -7875,8 +7742,8 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.3: @@ -7889,8 +7756,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} prettier@2.8.8: @@ -7898,8 +7765,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -7915,8 +7782,8 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-format@30.2.0: - resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} + pretty-format@30.3.0: + resolution: {integrity: sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} pretty-ms@9.3.0: @@ -7968,8 +7835,8 @@ packages: public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -7994,8 +7861,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} quansync@0.2.11: @@ -8069,11 +7936,6 @@ packages: peerDependencies: react: ^19.2.3 - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} - peerDependencies: - react: ^19.2.4 - react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} @@ -8121,8 +7983,8 @@ packages: react: '*' react-native: '*' - react-native-is-edge-to-edge@1.2.1: - resolution: {integrity: sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==} + react-native-is-edge-to-edge@1.3.1: + resolution: {integrity: sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA==} peerDependencies: react: '*' react-native: '*' @@ -8263,15 +8125,15 @@ packages: '@types/react': optional: true - react-router-dom@7.13.0: - resolution: {integrity: sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==} + react-router-dom@7.13.1: + resolution: {integrity: sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.13.0: - resolution: {integrity: sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==} + react-router@7.13.1: + resolution: {integrity: sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -8357,8 +8219,8 @@ packages: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} - registry-auth-token@5.1.0: - resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} engines: {node: '>=14'} registry-url@6.0.1: @@ -8403,10 +8265,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -8417,11 +8275,6 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.11: resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} @@ -8443,8 +8296,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.1.2: - resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + rimraf@6.1.3: + resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==} engines: {node: 20 || >=22} hasBin: true @@ -8457,8 +8310,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8508,12 +8361,9 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.4.3: - resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} + sax@1.5.0: + resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + engines: {node: '>=11.0.0'} scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} @@ -8540,6 +8390,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} @@ -8618,6 +8473,10 @@ packages: shell-quote@1.7.3: resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + shellwords@0.1.1: resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} @@ -8843,8 +8702,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -8933,30 +8792,27 @@ packages: resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} hasBin: true - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - symbol.inspect@1.0.1: resolution: {integrity: sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==} - synckit@0.11.11: - resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + synckit@0.11.12: + resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==} engines: {node: ^14.18.0 || >=16.0.0} tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwind-merge@3.4.0: - resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@4.1.18: - resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tailwindcss@4.2.1: + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} @@ -8969,14 +8825,9 @@ packages: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} - tar@7.5.7: - resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} + tar@7.5.11: + resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} templite@1.2.0: resolution: {integrity: sha512-O9BpPXF44a9Pg84Be6mjzlrqOtbP2I/B5PNLWu5hb1n9UQ1GTLsjdMg1z5ROCkF6NFXsO5LQfRXEpgTGrZ7Q0Q==} @@ -9068,13 +8919,6 @@ packages: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tldts-core@7.0.23: - resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} - - tldts@7.0.23: - resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} - hasBin: true - tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -9098,10 +8942,6 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -9109,20 +8949,10 @@ packages: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} - tr46@6.0.0: - resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} - engines: {node: '>=20'} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -9163,9 +8993,9 @@ packages: jest-util: optional: true - ts-json-schema-generator@2.4.0: - resolution: {integrity: sha512-HbmNsgs58CfdJq0gpteRTxPXG26zumezOs+SB9tgky6MpqiFgQwieCn2MW70+sxpHouZ/w9LW0V6L4ZQO4y1Ug==} - engines: {node: '>=18.0.0'} + ts-json-schema-generator@2.9.0: + resolution: {integrity: sha512-NR5ZE108uiPtBHBJNGnhwoUaUx5vWTDJzDFG9YlRoqxPU76n+5FClRh92dcGgysbe1smRmYalM9Saj97GW1J4Q==} + engines: {node: '>=22.0.0'} hasBin: true ts-node@10.9.2: @@ -9313,11 +9143,11 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.54.0: - resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} + typescript-eslint@8.57.0: + resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' typescript@5.8.3: @@ -9346,23 +9176,16 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + underscore@1.13.8: + resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@6.23.0: resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} engines: {node: '>=18.17'} - undici@7.21.0: - resolution: {integrity: sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==} - engines: {node: '>=20.18.1'} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -9383,10 +9206,6 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -9511,8 +9330,8 @@ packages: react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - vite-bundle-analyzer@1.3.2: - resolution: {integrity: sha512-Od4ILUKRvBV3LuO/E+S+c1XULlxdkRZPSf6Vzzu+UAXG0D3hZYUu9imZIkSj/PU4e1FB14yB+av8g3KiljH8zQ==} + vite-bundle-analyzer@1.3.6: + resolution: {integrity: sha512-elFXkF9oGy4CJEeOdP1DSEHRDKWfmaEDfT9/GuF4jmyfmUF6nC//iN+ythqMEVvrtchOEHGKLumZwnu1NjoI0w==} hasBin: true vite-plugin-node-polyfills@0.25.0: @@ -9600,10 +9419,6 @@ packages: vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -9647,10 +9462,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webidl-conversions@8.0.1: - resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} - engines: {node: '>=20'} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -9661,10 +9472,6 @@ packages: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@5.0.0: - resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} - engines: {node: '>=20'} - whatwg-url-without-unicode@8.0.0-3: resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==} engines: {node: '>=10'} @@ -9673,10 +9480,6 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} - whatwg-url@16.0.0: - resolution: {integrity: sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -9701,8 +9504,8 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} which@1.2.4: @@ -9822,10 +9625,6 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - xml2js@0.6.0: resolution: {integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==} engines: {node: '>=4.0.0'} @@ -9842,9 +9641,6 @@ packages: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -9867,8 +9663,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -9950,34 +9746,10 @@ snapshots: '@0no-co/graphql.web@1.2.0': {} - '@acemir/cssom@0.9.31': - optional: true - '@adobe/css-tools@4.4.4': {} '@anthropic-ai/sdk@0.52.0': {} - '@asamuzakjp/css-color@4.1.2': - dependencies: - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.5 - optional: true - - '@asamuzakjp/dom-selector@6.7.8': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.1.0 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.5 - optional: true - - '@asamuzakjp/nwsapi@2.3.9': - optional: true - '@babel/code-frame@7.10.4': dependencies: '@babel/highlight': 7.25.9 @@ -9990,12 +9762,12 @@ snapshots: '@babel/compat-data@7.29.0': {} - '@babel/core@7.28.6': + '@babel/core@7.29.0': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 '@babel/parser': 7.29.0 '@babel/template': 7.28.6 @@ -10010,35 +9782,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.6': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/generator@7.29.1': + '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.0 '@babel/types': 7.29.0 @@ -10058,19 +9802,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10091,7 +9822,7 @@ snapshots: regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 @@ -10118,15 +9849,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10151,15 +9873,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10202,23 +9915,10 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.28.6': - dependencies: - '@babel/types': 7.29.0 - '@babel/parser@7.29.0': dependencies: '@babel/types': 7.29.0 - '@babel/plugin-proposal-decorators@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10253,11 +9953,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10293,11 +9988,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10343,11 +10033,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10415,14 +10100,6 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10431,11 +10108,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -10477,14 +10154,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10604,9 +10273,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -10634,17 +10303,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10674,17 +10332,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': - dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) - transitivePeerDependencies: - - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -10733,9 +10380,9 @@ snapshots: '@biomejs/wasm-nodejs@2.2.6': {} - '@changesets/apply-release-plan@7.0.14': + '@changesets/apply-release-plan@7.1.0': dependencies: - '@changesets/config': 3.1.2 + '@changesets/config': 3.1.3 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.4 '@changesets/should-skip-package': 0.1.2 @@ -10747,7 +10394,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 '@changesets/assemble-release-plan@6.0.9': dependencies: @@ -10756,50 +10403,49 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.3 + semver: 7.7.4 '@changesets/changelog-git@0.2.1': dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.29.8(@types/node@24.10.13)': + '@changesets/cli@2.30.0(@types/node@22.19.15)': dependencies: - '@changesets/apply-release-plan': 7.0.14 + '@changesets/apply-release-plan': 7.1.0 '@changesets/assemble-release-plan': 6.0.9 '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.2 + '@changesets/config': 3.1.3 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.14 + '@changesets/get-release-plan': 4.0.15 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.6 + '@changesets/read': 0.6.7 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@24.10.13) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.15) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 - ci-info: 3.9.0 enquirer: 2.4.1 fs-extra: 7.0.1 mri: 1.2.0 - p-limit: 2.3.0 package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 spawndamnit: 3.0.1 term-size: 2.2.1 transitivePeerDependencies: - '@types/node' - '@changesets/config@3.1.2': + '@changesets/config@3.1.3': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 '@changesets/logger': 0.1.1 + '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 @@ -10814,14 +10460,14 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.3 + semver: 7.7.4 - '@changesets/get-release-plan@4.0.14': + '@changesets/get-release-plan@4.0.15': dependencies: '@changesets/assemble-release-plan': 6.0.9 - '@changesets/config': 3.1.2 + '@changesets/config': 3.1.3 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.6 + '@changesets/read': 0.6.7 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 @@ -10839,7 +10485,7 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.2': + '@changesets/parse@0.4.3': dependencies: '@changesets/types': 6.1.0 js-yaml: 4.1.1 @@ -10851,11 +10497,11 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.6': + '@changesets/read@0.6.7': dependencies: '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.2 + '@changesets/parse': 0.4.3 '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 @@ -10874,7 +10520,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 4.1.1 + human-id: 4.1.3 prettier: 2.8.8 '@craftzdog/react-native-buffer@6.1.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': @@ -10889,34 +10535,6 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/color-helpers@6.0.1': - optional: true - - '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/color-helpers': 6.0.1 - '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-syntax-patches-for-csstree@1.0.27': - optional: true - - '@csstools/css-tokenizer@4.0.0': - optional: true - '@devicefarmer/adbkit-logcat@2.1.3': {} '@devicefarmer/adbkit-monkey@1.2.1': {} @@ -11033,18 +10651,18 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.21.2': dependencies: '@eslint/object-schema': 2.1.7 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -11056,21 +10674,21 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.12.6 + ajv: 6.14.0 debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.2 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.39.2': {} + '@eslint/js@9.39.4': {} '@eslint/object-schema@2.1.7': {} @@ -11079,11 +10697,6 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.14.1(@noble/hashes@2.0.1)': - optionalDependencies: - '@noble/hashes': 2.0.1 - optional: true - '@exodus/schemasafe@1.3.0': {} '@expo-google-fonts/inter@0.4.2': {} @@ -11095,19 +10708,19 @@ snapshots: '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 '@expo/devcert': 1.2.1 - '@expo/env': 2.0.8 - '@expo/image-utils': 0.8.8 - '@expo/json-file': 10.0.8 + '@expo/env': 2.0.11 + '@expo/image-utils': 0.8.12 + '@expo/json-file': 10.0.12 '@expo/metro': 54.2.0 '@expo/metro-config': 54.0.14(expo@54.0.32) - '@expo/osascript': 2.3.8 - '@expo/package-manager': 1.9.10 + '@expo/osascript': 2.4.2 + '@expo/package-manager': 1.10.3 '@expo/plist': 0.4.8 '@expo/prebuild-config': 54.0.8(expo@54.0.32) '@expo/schema-utils': 0.1.8 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 - '@expo/xcpretty': 4.4.0 + '@expo/xcpretty': 4.4.1 '@react-native/dev-middleware': 0.81.5 '@urql/core': 5.2.0 '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0) @@ -11126,9 +10739,9 @@ snapshots: expo-server: 1.0.5 freeport-async: 2.0.0 getenv: 2.0.0 - glob: 13.0.2 + glob: 13.0.6 lan-network: 0.1.7 - minimatch: 9.0.5 + minimatch: 9.0.9 node-forge: 1.3.3 npm-package-arg: 11.0.3 ora: 3.4.0 @@ -11143,19 +10756,19 @@ snapshots: resolve: 1.22.11 resolve-from: 5.0.0 resolve.exports: 2.0.3 - semver: 7.7.3 + semver: 7.7.4 send: 0.19.2 slugify: 1.6.6 source-map-support: 0.5.21 stacktrace-parser: 0.1.11 structured-headers: 0.4.1 - tar: 7.5.7 + tar: 7.5.11 terminal-link: 2.1.1 undici: 6.23.0 wrap-ansi: 7.0.0 ws: 8.19.0 optionalDependencies: - expo-router: 6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-router: 6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - bufferutil @@ -11170,15 +10783,15 @@ snapshots: '@expo/config-plugins@54.0.4': dependencies: '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.8 + '@expo/json-file': 10.0.12 '@expo/plist': 0.4.8 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.3 getenv: 2.0.0 - glob: 13.0.2 + glob: 13.0.6 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -11193,14 +10806,14 @@ snapshots: '@babel/code-frame': 7.10.4 '@expo/config-plugins': 54.0.4 '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.8 + '@expo/json-file': 10.0.12 deepmerge: 4.3.1 getenv: 2.0.0 - glob: 13.0.2 + glob: 13.0.6 require-from-string: 2.0.2 resolve-from: 5.0.0 resolve-workspace-root: 2.0.1 - semver: 7.7.3 + semver: 7.7.4 slugify: 1.6.6 sucrase: 3.35.1 transitivePeerDependencies: @@ -11220,7 +10833,7 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - '@expo/env@2.0.8': + '@expo/env@2.0.11': dependencies: chalk: 4.1.2 debug: 4.4.3 @@ -11237,16 +10850,16 @@ snapshots: chalk: 4.1.2 debug: 4.4.3 getenv: 2.0.0 - glob: 13.0.2 + glob: 13.0.6 ignore: 5.3.2 - minimatch: 9.0.5 + minimatch: 9.0.9 p-limit: 3.1.0 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color - '@expo/image-utils@0.8.8': + '@expo/image-utils@0.8.12': dependencies: '@expo/spawn-async': 1.7.2 chalk: 4.1.2 @@ -11254,14 +10867,11 @@ snapshots: jimp-compact: 0.16.1 parse-png: 2.1.0 resolve-from: 5.0.0 - resolve-global: 1.0.0 - semver: 7.7.3 - temp-dir: 2.0.0 - unique-string: 2.0.0 + semver: 7.7.4 - '@expo/json-file@10.0.8': + '@expo/json-file@10.0.12': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.29.0 json5: 2.2.3 '@expo/metro-config@54.0.14(expo@54.0.32)': @@ -11270,8 +10880,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 '@expo/config': 12.0.13 - '@expo/env': 2.0.8 - '@expo/json-file': 10.0.8 + '@expo/env': 2.0.11 + '@expo/json-file': 10.0.12 '@expo/metro': 54.2.0 '@expo/spawn-async': 1.7.2 browserslist: 4.28.1 @@ -11280,11 +10890,11 @@ snapshots: dotenv: 16.4.7 dotenv-expand: 11.0.7 getenv: 2.0.0 - glob: 13.0.2 + glob: 13.0.6 hermes-parser: 0.29.1 jsc-safe-url: 0.2.4 - lightningcss: 1.31.1 - minimatch: 9.0.5 + lightningcss: 1.32.0 + minimatch: 9.0.9 postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: @@ -11294,7 +10904,7 @@ snapshots: - supports-color - utf-8-validate - '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: anser: 1.4.10 expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -11304,7 +10914,7 @@ snapshots: stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) '@expo/metro@54.2.0': dependencies: @@ -11327,14 +10937,13 @@ snapshots: - supports-color - utf-8-validate - '@expo/osascript@2.3.8': + '@expo/osascript@2.4.2': dependencies: '@expo/spawn-async': 1.7.2 - exec-async: 2.2.0 - '@expo/package-manager@1.9.10': + '@expo/package-manager@1.10.3': dependencies: - '@expo/json-file': 10.0.8 + '@expo/json-file': 10.0.12 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 npm-package-arg: 11.0.3 @@ -11352,13 +10961,13 @@ snapshots: '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 '@expo/config-types': 54.0.10 - '@expo/image-utils': 0.8.8 - '@expo/json-file': 10.0.8 + '@expo/image-utils': 0.8.12 + '@expo/json-file': 10.0.12 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3 expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 xml2js: 0.6.0 transitivePeerDependencies: - supports-color @@ -11381,28 +10990,28 @@ snapshots: '@expo/ws-tunnel@1.0.6': {} - '@expo/xcpretty@4.4.0': + '@expo/xcpretty@4.4.1': dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 js-yaml: 4.1.1 - '@floating-ui/core@1.7.4': + '@floating-ui/core@1.7.5': dependencies: - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.7.5': + '@floating-ui/dom@1.7.6': dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@floating-ui/dom': 1.7.5 + '@floating-ui/dom': 1.7.6 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} '@gorhom/bottom-sheet@5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: @@ -11421,11 +11030,11 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - '@grammyjs/types@3.23.0': {} + '@grammyjs/types@3.25.0': {} - '@hono/node-server@1.19.9(hono@4.11.10)': + '@hono/node-server@1.19.11(hono@4.12.7)': dependencies: - hono: 4.11.10 + hono: 4.12.7 '@humanfs/core@0.19.1': {} @@ -11440,148 +11049,142 @@ snapshots: '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@5.0.4(@types/node@24.10.13)': + '@inquirer/checkbox@5.1.0(@types/node@22.19.15)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.1(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/confirm@6.0.4(@types/node@24.10.13)': + '@inquirer/confirm@6.0.8(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/core@11.1.1(@types/node@24.10.13)': + '@inquirer/core@11.1.5(@types/node@22.19.15)': dependencies: '@inquirer/ansi': 2.0.3 '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@22.19.15) cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 9.0.2 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/editor@5.0.4(@types/node@24.10.13)': + '@inquirer/editor@5.0.8(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/external-editor': 2.0.3(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/external-editor': 2.0.3(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/expand@5.0.4(@types/node@24.10.13)': + '@inquirer/expand@5.0.8(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/external-editor@1.0.3(@types/node@24.10.13)': + '@inquirer/external-editor@1.0.3(@types/node@22.19.15)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/external-editor@2.0.3(@types/node@24.10.13)': + '@inquirer/external-editor@2.0.3(@types/node@22.19.15)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 '@inquirer/figures@2.0.3': {} - '@inquirer/input@5.0.4(@types/node@24.10.13)': + '@inquirer/input@5.0.8(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/number@4.0.4(@types/node@24.10.13)': + '@inquirer/number@4.0.8(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/password@5.0.4(@types/node@24.10.13)': + '@inquirer/password@5.0.8(@types/node@22.19.15)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 - - '@inquirer/prompts@8.2.0(@types/node@24.10.13)': - dependencies: - '@inquirer/checkbox': 5.0.4(@types/node@24.10.13) - '@inquirer/confirm': 6.0.4(@types/node@24.10.13) - '@inquirer/editor': 5.0.4(@types/node@24.10.13) - '@inquirer/expand': 5.0.4(@types/node@24.10.13) - '@inquirer/input': 5.0.4(@types/node@24.10.13) - '@inquirer/number': 4.0.4(@types/node@24.10.13) - '@inquirer/password': 5.0.4(@types/node@24.10.13) - '@inquirer/rawlist': 5.2.0(@types/node@24.10.13) - '@inquirer/search': 4.1.0(@types/node@24.10.13) - '@inquirer/select': 5.0.4(@types/node@24.10.13) + '@types/node': 22.19.15 + + '@inquirer/prompts@8.3.0(@types/node@22.19.15)': + dependencies: + '@inquirer/checkbox': 5.1.0(@types/node@22.19.15) + '@inquirer/confirm': 6.0.8(@types/node@22.19.15) + '@inquirer/editor': 5.0.8(@types/node@22.19.15) + '@inquirer/expand': 5.0.8(@types/node@22.19.15) + '@inquirer/input': 5.0.8(@types/node@22.19.15) + '@inquirer/number': 4.0.8(@types/node@22.19.15) + '@inquirer/password': 5.0.8(@types/node@22.19.15) + '@inquirer/rawlist': 5.2.4(@types/node@22.19.15) + '@inquirer/search': 4.1.4(@types/node@22.19.15) + '@inquirer/select': 5.1.0(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/rawlist@5.2.0(@types/node@24.10.13)': + '@inquirer/rawlist@5.2.4(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/search@4.1.0(@types/node@24.10.13)': + '@inquirer/search@4.1.4(@types/node@22.19.15)': dependencies: - '@inquirer/core': 11.1.1(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/select@5.0.4(@types/node@24.10.13)': + '@inquirer/select@5.1.0(@types/node@22.19.15)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.1(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@22.19.15) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@22.19.15) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 - '@inquirer/type@4.0.3(@types/node@24.10.13)': + '@inquirer/type@4.0.3(@types/node@22.19.15)': optionalDependencies: - '@types/node': 24.10.13 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 + '@types/node': 22.19.15 '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@isaacs/ttlcache@1.4.1': {} @@ -11590,49 +11193,48 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} - '@jest/console@30.2.0': + '@jest/console@30.3.0': dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 chalk: 4.1.2 - jest-message-util: 30.2.0 - jest-util: 30.2.0 + jest-message-util: 30.3.0 + jest-util: 30.3.0 slash: 3.0.0 - '@jest/core@30.2.0(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3))': + '@jest/core@30.3.0(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3))': dependencies: - '@jest/console': 30.2.0 + '@jest/console': 30.3.0 '@jest/pattern': 30.0.1 - '@jest/reporters': 30.2.0(node-notifier@10.0.1) - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/reporters': 30.3.0(node-notifier@10.0.1) + '@jest/test-result': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11 - jest-changed-files: 30.2.0 - jest-config: 30.2.0(@types/node@22.19.11)(esbuild-register@3.6.0(esbuild@0.27.3))(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 + jest-changed-files: 30.3.0 + jest-config: 30.3.0(@types/node@22.19.15)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) + jest-haste-map: 30.3.0 + jest-message-util: 30.3.0 jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-resolve-dependencies: 30.2.0 - jest-runner: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - jest-watcher: 30.2.0 - micromatch: 4.0.8 - pretty-format: 30.2.0 + jest-resolve: 30.3.0 + jest-resolve-dependencies: 30.3.0 + jest-runner: 30.3.0 + jest-runtime: 30.3.0 + jest-snapshot: 30.3.0 + jest-util: 30.3.0 + jest-validate: 30.3.0 + jest-watcher: 30.3.0 + pretty-format: 30.3.0 slash: 3.0.0 optionalDependencies: node-notifier: 10.0.1 @@ -11646,30 +11248,30 @@ snapshots: dependencies: '@jest/types': 29.6.3 - '@jest/diff-sequences@30.0.1': {} + '@jest/diff-sequences@30.3.0': {} '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-mock: 29.7.0 - '@jest/environment@30.2.0': + '@jest/environment@30.3.0': dependencies: - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 - jest-mock: 30.2.0 + '@jest/fake-timers': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 + jest-mock: 30.3.0 - '@jest/expect-utils@30.2.0': + '@jest/expect-utils@30.3.0': dependencies: '@jest/get-type': 30.1.0 - '@jest/expect@30.2.0': + '@jest/expect@30.3.0': dependencies: - expect: 30.2.0 - jest-snapshot: 30.2.0 + expect: 30.3.0 + jest-snapshot: 30.3.0 transitivePeerDependencies: - supports-color @@ -11677,45 +11279,45 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - '@jest/fake-timers@30.2.0': + '@jest/fake-timers@30.3.0': dependencies: - '@jest/types': 30.2.0 - '@sinonjs/fake-timers': 13.0.5 - '@types/node': 22.19.11 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 + '@jest/types': 30.3.0 + '@sinonjs/fake-timers': 15.1.1 + '@types/node': 22.19.15 + jest-message-util: 30.3.0 + jest-mock: 30.3.0 + jest-util: 30.3.0 '@jest/get-type@30.1.0': {} - '@jest/globals@30.2.0': + '@jest/globals@30.3.0': dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/types': 30.2.0 - jest-mock: 30.2.0 + '@jest/environment': 30.3.0 + '@jest/expect': 30.3.0 + '@jest/types': 30.3.0 + jest-mock: 30.3.0 transitivePeerDependencies: - supports-color '@jest/pattern@30.0.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-regex-util: 30.0.1 - '@jest/reporters@30.2.0(node-notifier@10.0.1)': + '@jest/reporters@30.3.0(node-notifier@10.0.1)': dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 + '@jest/console': 30.3.0 + '@jest/test-result': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.19.11 + '@types/node': 22.19.15 chalk: 4.1.2 collect-v8-coverage: 1.0.3 exit-x: 0.2.2 @@ -11726,9 +11328,9 @@ snapshots: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - jest-worker: 30.2.0 + jest-message-util: 30.3.0 + jest-util: 30.3.0 + jest-worker: 30.3.0 slash: 3.0.0 string-length: 4.0.2 v8-to-istanbul: 9.3.0 @@ -11739,15 +11341,15 @@ snapshots: '@jest/schemas@29.6.3': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.27.10 '@jest/schemas@30.0.5': dependencies: - '@sinclair/typebox': 0.34.41 + '@sinclair/typebox': 0.34.48 - '@jest/snapshot-utils@30.2.0': + '@jest/snapshot-utils@30.3.0': dependencies: - '@jest/types': 30.2.0 + '@jest/types': 30.3.0 chalk: 4.1.2 graceful-fs: 4.2.11 natural-compare: 1.4.0 @@ -11758,18 +11360,18 @@ snapshots: callsites: 3.1.0 graceful-fs: 4.2.11 - '@jest/test-result@30.2.0': + '@jest/test-result@30.3.0': dependencies: - '@jest/console': 30.2.0 - '@jest/types': 30.2.0 + '@jest/console': 30.3.0 + '@jest/types': 30.3.0 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.3 - '@jest/test-sequencer@30.2.0': + '@jest/test-sequencer@30.3.0': dependencies: - '@jest/test-result': 30.2.0 + '@jest/test-result': 30.3.0 graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 + jest-haste-map: 30.3.0 slash: 3.0.0 '@jest/transform@29.7.0': @@ -11792,20 +11394,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/transform@30.2.0': + '@jest/transform@30.3.0': dependencies: '@babel/core': 7.29.0 - '@jest/types': 30.2.0 + '@jest/types': 30.3.0 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 7.0.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 + jest-haste-map: 30.3.0 jest-regex-util: 30.0.1 - jest-util: 30.2.0 - micromatch: 4.0.8 + jest-util: 30.3.0 pirates: 4.0.7 slash: 3.0.0 write-file-atomic: 5.0.1 @@ -11817,25 +11418,25 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.11 - '@types/yargs': 17.0.34 + '@types/node': 22.19.15 + '@types/yargs': 17.0.35 chalk: 4.1.2 - '@jest/types@30.2.0': + '@jest/types@30.3.0': dependencies: '@jest/pattern': 30.0.1 '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.11 - '@types/yargs': 17.0.34 + '@types/node': 22.19.15 + '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - glob: 13.0.2 + glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@5.9.3) - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: typescript: 5.9.3 @@ -11899,7 +11500,7 @@ snapshots: '@ledgerhq/hw-transport': 6.32.0 '@ledgerhq/hw-transport-node-hid-noevents': 6.31.0 '@ledgerhq/logs': 6.14.0 - lodash: 4.17.21 + lodash: 4.17.23 node-hid: 2.1.2 usb: 2.9.0 @@ -11974,20 +11575,20 @@ snapshots: '@types/react': 19.2.8 react: 19.2.3 - '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.9(hono@4.11.10) - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + '@hono/node-server': 1.19.11(hono@4.12.7) + ajv: 8.18.0 + ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.11.10 - jose: 6.1.3 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.7 + jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -12028,7 +11629,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@oxc-project/types@0.111.0': {} @@ -12047,7 +11648,7 @@ snapshots: dependencies: graceful-fs: 4.2.10 - '@pnpm/npm-conf@2.3.1': + '@pnpm/npm-conf@3.0.2': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 @@ -12162,14 +11763,14 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12224,23 +11825,23 @@ snapshots: optionalDependencies: '@types/react': 19.2.8 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) react-remove-scroll: 2.7.2(@types/react@19.1.17)(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 @@ -12280,15 +11881,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.8 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12333,13 +11934,13 @@ snapshots: optionalDependencies: '@types/react': 19.2.8 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12536,7 +12137,7 @@ snapshots: '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@floating-ui/react-dom': 2.1.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.8))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.8)(react@19.2.3) '@radix-ui/react-context': 1.1.2(@types/react@19.2.8)(react@19.2.3) @@ -12552,12 +12153,12 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12572,12 +12173,12 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12592,11 +12193,11 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12638,19 +12239,19 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -12782,18 +12383,18 @@ snapshots: '@types/react': 19.2.8 '@types/react-dom': 19.2.3(@types/react@19.2.8) - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 '@types/react-dom': 19.2.3(@types/react@19.1.17) @@ -13081,10 +12682,10 @@ snapshots: '@react-native/dev-middleware': 0.81.5 debug: 4.4.3 invariant: 2.2.4 - metro: 0.83.3 - metro-config: 0.83.3 - metro-core: 0.83.3 - semver: 7.7.3 + metro: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + semver: 7.7.4 transitivePeerDependencies: - bufferutil - supports-color @@ -13125,10 +12726,10 @@ snapshots: optionalDependencies: '@types/react': 19.1.17 - '@react-navigation/bottom-tabs@7.10.1(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/bottom-tabs@7.15.5(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/elements': 2.9.5(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) color: 4.2.3 react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) @@ -13138,7 +12739,7 @@ snapshots: transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/core@7.14.0(react@19.1.0)': + '@react-navigation/core@7.16.1(react@19.1.0)': dependencies: '@react-navigation/routers': 7.5.3 escape-string-regexp: 4.0.0 @@ -13150,9 +12751,9 @@ snapshots: use-latest-callback: 0.2.6(react@19.1.0) use-sync-external-store: 1.6.0(react@19.1.0) - '@react-navigation/elements@2.9.5(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/elements@2.9.10(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) color: 4.2.3 react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) @@ -13160,10 +12761,10 @@ snapshots: use-latest-callback: 0.2.6(react@19.1.0) use-sync-external-store: 1.6.0(react@19.1.0) - '@react-navigation/native-stack@7.11.0(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/native-stack@7.14.4(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/elements': 2.9.5(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) color: 4.2.3 react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) @@ -13174,9 +12775,9 @@ snapshots: transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/core': 7.14.0(react@19.1.0) + '@react-navigation/core': 7.16.1(react@19.1.0) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 @@ -13233,95 +12834,95 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rollup/plugin-inject@5.0.5(rollup@4.57.1)': + '@rollup/plugin-inject@5.0.5(rollup@4.59.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@rtsao/scc@1.1.0': {} @@ -13335,9 +12936,9 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.27.10': {} - '@sinclair/typebox@0.34.41': {} + '@sinclair/typebox@0.34.48': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -13349,11 +12950,11 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers@13.0.5': + '@sinonjs/fake-timers@15.1.1': dependencies: '@sinonjs/commons': 3.0.1 - '@standard-schema/spec@1.0.0': {} + '@standard-schema/spec@1.1.0': {} '@ston-fi/omniston-sdk@0.7.8': dependencies: @@ -13366,15 +12967,15 @@ snapshots: - bufferutil - utf-8-validate - '@storybook/addon-docs@10.2.8(@types/react@19.2.8)(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@storybook/addon-docs@10.2.8(@types/react@19.2.8)(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.2.8)(react@19.2.3) - '@storybook/csf-plugin': 10.2.8(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) - '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.3))(react@19.2.3) - '@storybook/react-dom-shim': 10.2.8(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/csf-plugin': 10.2.8(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/react-dom-shim': 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.3 - react-dom: 19.2.4(react@19.2.3) - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-dom: 19.2.3(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -13383,25 +12984,25 @@ snapshots: - vite - webpack - '@storybook/builder-vite@10.2.8(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@storybook/builder-vite@10.2.8(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@storybook/csf-plugin': 10.2.8(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@storybook/csf-plugin': 10.2.8(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ts-dedent: 2.2.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.2.8(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@storybook/csf-plugin@10.2.8(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.3 - rollup: 4.57.1 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + rollup: 4.59.0 + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@storybook/global@5.0.0': {} @@ -13410,44 +13011,33 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@storybook/icons@2.0.1(react-dom@19.2.4(react@19.2.3))(react@19.2.3)': - dependencies: - react: 19.2.3 - react-dom: 19.2.4(react@19.2.3) - - '@storybook/instrumenter@8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/instrumenter@8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.9 - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-dom-shim@10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/react-dom-shim@10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - - '@storybook/react-dom-shim@10.2.8(react-dom@19.2.4(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': - dependencies: - react: 19.2.3 - react-dom: 19.2.4(react@19.2.3) - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@storybook/react-vite@10.2.8(esbuild@0.27.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@storybook/react-vite@10.2.8(esbuild@0.27.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@storybook/builder-vite': 10.2.8(esbuild@0.27.3)(rollup@4.57.1)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) - '@storybook/react': 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.4(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@storybook/builder-vite': 10.2.8(esbuild@0.27.3)(rollup@4.59.0)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@storybook/react': 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) empathic: 2.0.0 magic-string: 0.30.21 react: 19.2.3 react-docgen: 8.0.2 react-dom: 19.2.3(react@19.2.3) resolve: 1.22.11 - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) tsconfig-paths: 4.2.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - esbuild - rollup @@ -13455,60 +13045,60 @@ snapshots: - typescript - webpack - '@storybook/react@10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': + '@storybook/react@10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/react-dom-shim': 10.2.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) react: 19.2.3 react-docgen: 8.0.2 react-dom: 19.2.3(react@19.2.3) - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@storybook/test@8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + '@storybook/test@8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@storybook/instrumenter': 8.6.15(storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + storybook: 10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@stryker-mutator/api@9.5.1': + '@stryker-mutator/api@9.6.0': dependencies: - mutation-testing-metrics: 3.7.1 - mutation-testing-report-schema: 3.7.1 + mutation-testing-metrics: 3.7.2 + mutation-testing-report-schema: 3.7.2 tslib: 2.8.1 typed-inject: 5.0.0 - '@stryker-mutator/core@9.5.1(@types/node@24.10.13)': + '@stryker-mutator/core@9.6.0(@types/node@22.19.15)': dependencies: - '@inquirer/prompts': 8.2.0(@types/node@24.10.13) - '@stryker-mutator/api': 9.5.1 - '@stryker-mutator/instrumenter': 9.5.1 - '@stryker-mutator/util': 9.5.1 - ajv: 8.17.1 + '@inquirer/prompts': 8.3.0(@types/node@22.19.15) + '@stryker-mutator/api': 9.6.0 + '@stryker-mutator/instrumenter': 9.6.0 + '@stryker-mutator/util': 9.6.0 + ajv: 8.18.0 chalk: 5.6.2 - commander: 14.0.2 + commander: 14.0.3 diff-match-patch: 1.0.5 emoji-regex: 10.6.0 - execa: 9.6.0 + execa: 9.6.1 json-rpc-2.0: 1.7.1 lodash.groupby: 4.6.0 - minimatch: 10.1.1 + minimatch: 10.2.4 mutation-server-protocol: 0.4.1 - mutation-testing-elements: 3.7.1 - mutation-testing-metrics: 3.7.1 - mutation-testing-report-schema: 3.7.1 + mutation-testing-elements: 3.7.2 + mutation-testing-metrics: 3.7.2 + mutation-testing-report-schema: 3.7.2 npm-run-path: 6.0.0 progress: 2.0.3 rxjs: 7.8.2 - semver: 7.7.3 + semver: 7.7.4 source-map: 0.7.6 tree-kill: 1.2.2 tslib: 2.8.1 @@ -13518,92 +13108,92 @@ snapshots: - '@types/node' - supports-color - '@stryker-mutator/instrumenter@9.5.1': + '@stryker-mutator/instrumenter@9.6.0': dependencies: - '@babel/core': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/plugin-proposal-decorators': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.6) - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) - '@stryker-mutator/api': 9.5.1 - '@stryker-mutator/util': 9.5.1 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@stryker-mutator/api': 9.6.0 + '@stryker-mutator/util': 9.6.0 angular-html-parser: 10.4.0 - semver: 7.7.3 + semver: 7.7.4 tslib: 2.8.1 weapon-regex: 1.3.6 transitivePeerDependencies: - supports-color - '@stryker-mutator/util@9.5.1': {} + '@stryker-mutator/util@9.6.0': {} - '@tailwindcss/node@4.1.18': + '@tailwindcss/node@4.2.1': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.20.0 jiti: 2.6.1 - lightningcss: 1.30.2 + lightningcss: 1.31.1 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.18 + tailwindcss: 4.2.1 - '@tailwindcss/oxide-android-arm64@4.1.18': + '@tailwindcss/oxide-android-arm64@4.2.1': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.18': + '@tailwindcss/oxide-darwin-arm64@4.2.1': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.18': + '@tailwindcss/oxide-darwin-x64@4.2.1': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.18': + '@tailwindcss/oxide-freebsd-x64@4.2.1': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + '@tailwindcss/oxide-linux-arm64-musl@4.2.1': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + '@tailwindcss/oxide-linux-x64-gnu@4.2.1': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.18': + '@tailwindcss/oxide-linux-x64-musl@4.2.1': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.18': + '@tailwindcss/oxide-wasm32-wasi@4.2.1': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + '@tailwindcss/oxide-win32-x64-msvc@4.2.1': optional: true - '@tailwindcss/oxide@4.1.18': + '@tailwindcss/oxide@4.2.1': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-x64': 4.1.18 - '@tailwindcss/oxide-freebsd-x64': 4.1.18 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-x64-musl': 4.1.18 - '@tailwindcss/oxide-wasm32-wasi': 4.1.18 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - - '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': - dependencies: - '@tailwindcss/node': 4.1.18 - '@tailwindcss/oxide': 4.1.18 - tailwindcss: 4.1.18 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + '@tailwindcss/oxide-android-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-arm64': 4.2.1 + '@tailwindcss/oxide-darwin-x64': 4.2.1 + '@tailwindcss/oxide-freebsd-x64': 4.2.1 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 + '@tailwindcss/oxide-linux-x64-musl': 4.2.1 + '@tailwindcss/oxide-wasm32-wasi': 4.2.1 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 + + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@tailwindcss/node': 4.2.1 + '@tailwindcss/oxide': 4.2.1 + tailwindcss: 4.2.1 + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@tanstack/query-core@5.90.20': {} @@ -13641,7 +13231,7 @@ snapshots: chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - lodash: 4.17.21 + lodash: 4.17.23 redent: 3.0.0 '@testing-library/jest-dom@6.9.1': @@ -13671,14 +13261,14 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@ton-community/ton-ledger@7.3.0(@ton/core@0.63.0(@ton/crypto@3.3.0))': + '@ton-community/ton-ledger@7.3.0(@ton/core@0.63.1(@ton/crypto@3.3.0))': dependencies: '@ledgerhq/hw-transport': 6.32.0 - '@ton/core': 0.63.0(@ton/crypto@3.3.0) + '@ton/core': 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 teslabot: 1.5.0 - '@ton/core@0.63.0(@ton/crypto@3.3.0)': + '@ton/core@0.63.1(@ton/crypto@3.3.0)': dependencies: '@ton/crypto': 3.3.0 @@ -13692,9 +13282,9 @@ snapshots: jssha: 3.2.0 tweetnacl: 1.0.3 - '@ton/ton@16.1.0(@ton/core@0.63.0(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)': + '@ton/ton@16.1.0(@ton/core@0.63.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)': dependencies: - '@ton/core': 0.63.0(@ton/crypto@3.3.0) + '@ton/core': 0.63.1(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 axios: 1.13.2 dataloader: 2.2.3 @@ -13704,17 +13294,17 @@ snapshots: transitivePeerDependencies: - debug - '@ton/toolchain@https://codeload.github.com/the-ton-tech/toolchain/tar.gz/31376da778155bd0984d68abf2a46dce417bacb8(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1))(jiti@2.6.1)(typescript@5.9.3)': + '@ton/toolchain@https://codeload.github.com/the-ton-tech/toolchain/tar.gz/31376da778155bd0984d68abf2a46dce417bacb8(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1))(jiti@2.6.1)(typescript@5.9.3)': dependencies: - '@eslint/js': 9.39.2 - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.4(eslint@9.39.2(jiti@2.6.1))(prettier@3.6.2) + '@eslint/js': 9.39.4 + '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1))(typescript@5.9.3) + eslint-plugin-prettier: 5.5.5(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1) globals: 16.5.0 - prettier: 3.6.2 + prettier: 3.8.1 transitivePeerDependencies: - '@types/eslint' - eslint-config-prettier @@ -13784,9 +13374,19 @@ snapshots: transitivePeerDependencies: - encoding - '@truecarry/vite-plugin-web-extension@4.5.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)': + '@tonconnect/ui@2.4.2': + dependencies: + '@tonconnect/sdk': 3.4.1 + classnames: 2.5.1 + csstype: 3.2.3 + deepmerge: 4.3.1 + ua-parser-js: 1.0.41 + transitivePeerDependencies: + - encoding + + '@truecarry/vite-plugin-web-extension@4.5.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)': dependencies: - ajv: 8.17.1 + ajv: 8.18.0 async-lock: 1.4.1 fs-extra: 10.1.0 json5: 2.2.3 @@ -13794,11 +13394,11 @@ snapshots: lodash.uniq: 4.5.0 lodash.uniqby: 4.7.0 md5: 2.3.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) web-ext-option-types: 8.3.1 web-ext-run: 0.2.4 webextension-polyfill: 0.10.0 - yaml: 2.8.1 + yaml: 2.8.2 transitivePeerDependencies: - '@types/node' - jiti @@ -13820,7 +13420,7 @@ snapshots: tiny-uid: 1.1.2 webextension-polyfill: 0.9.0 - '@tsconfig/node10@1.0.11': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -13858,14 +13458,14 @@ snapshots: '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 - '@types/chrome@0.1.36': + '@types/chrome@0.1.37': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 @@ -13884,7 +13484,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@types/hammerjs@2.0.46': {} @@ -13902,14 +13502,14 @@ snapshots: '@types/jest@30.0.0': dependencies: - expect: 30.2.0 - pretty-format: 30.2.0 + expect: 30.3.0 + pretty-format: 30.3.0 '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/lodash@4.17.23': {} + '@types/lodash@4.17.24': {} '@types/mdx@2.0.13': {} @@ -13917,14 +13517,10 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.19.11': + '@types/node@22.19.15': dependencies: undici-types: 6.21.0 - '@types/node@24.10.13': - dependencies: - undici-types: 7.16.0 - '@types/react-dom@19.2.3(@types/react@19.1.17)': dependencies: '@types/react': 19.1.17 @@ -13948,9 +13544,9 @@ snapshots: '@types/swagger-schema-official@2.0.25': {} - '@types/w3c-web-usb@1.0.12': {} + '@types/w3c-web-usb@1.0.13': {} - '@types/webextension-polyfill@0.12.4': {} + '@types/webextension-polyfill@0.12.5': {} '@types/webextension-polyfill@0.8.3': {} @@ -13964,40 +13560,23 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.34': + '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/type-utils': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.40.0 - eslint: 9.39.2(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/type-utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.0 + eslint: 9.39.4(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -14005,156 +13584,80 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.40.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.40.0(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3 + eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.40.0': - dependencies: - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/visitor-keys': 8.40.0 - - '@typescript-eslint/scope-manager@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - - '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': + '@typescript-eslint/scope-manager@8.57.0': dependencies: - typescript: 5.9.3 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 - '@typescript-eslint/type-utils@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.40.0': {} - - '@typescript-eslint/types@8.54.0': {} - - '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.40.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.3) - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/visitor-keys': 8.40.0 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.57.0': {} - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 + minimatch: 10.2.4 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.40.0': - dependencies: - '@typescript-eslint/types': 8.40.0 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.54.0': + '@typescript-eslint/visitor-keys@8.57.0': dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.57.0 + eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.0': {} @@ -14229,7 +13732,7 @@ snapshots: '@urql/core': 5.2.0 wonka: 6.3.5 - '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -14237,7 +13740,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -14245,15 +13748,15 @@ snapshots: dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.17 - ast-v8-to-istanbul: 0.3.11 + ast-v8-to-istanbul: 0.3.12 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.1 + magicast: 0.5.2 obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@2.0.5': dependencies: @@ -14272,28 +13775,20 @@ snapshots: '@vitest/expect@4.0.18': dependencies: - '@standard-schema/spec': 1.0.0 + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 '@vitest/spy': 4.0.18 '@vitest/utils': 4.0.18 chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': - dependencies: - '@vitest/spy': 4.0.18 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) - - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@2.0.5': dependencies: @@ -14340,12 +13835,12 @@ snapshots: dependencies: '@vitest/utils': 4.0.18 fflate: 0.8.2 - flatted: 3.3.3 + flatted: 3.4.1 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@2.0.5': dependencies: @@ -14392,48 +13887,48 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn-walk@8.3.4: + acorn-walk@8.3.5: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} adm-zip@0.5.16: {} agent-base@7.1.4: {} - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.18.0 - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - allure-js-commons@3.4.5(allure-playwright@3.4.5(@playwright/test@1.58.2)): + allure-js-commons@3.6.0(allure-playwright@3.6.0(@playwright/test@1.58.2)): dependencies: md5: 2.3.0 optionalDependencies: - allure-playwright: 3.4.5(@playwright/test@1.58.2) + allure-playwright: 3.6.0(@playwright/test@1.58.2) - allure-playwright@3.4.5(@playwright/test@1.58.2): + allure-playwright@3.6.0(@playwright/test@1.58.2): dependencies: '@playwright/test': 1.58.2 - allure-js-commons: 3.4.5(allure-playwright@3.4.5(@playwright/test@1.58.2)) + allure-js-commons: 3.6.0(allure-playwright@3.6.0(@playwright/test@1.58.2)) angular-html-parser@10.4.0: {} @@ -14453,7 +13948,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.0: {} + ansi-regex@6.2.2: {} ansi-styles@3.2.1: dependencies: @@ -14506,7 +14001,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -14521,7 +14016,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -14530,14 +14025,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: @@ -14545,7 +14040,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -14554,7 +14049,7 @@ snapshots: asn1.js@4.10.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -14572,7 +14067,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.11: + ast-v8-to-istanbul@0.3.12: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -14590,7 +14085,7 @@ snapshots: atomic-sleep@1.0.0: {} - atomically@2.1.0: + atomically@2.1.1: dependencies: stubborn-fs: 2.0.0 when-exit: 2.1.5 @@ -14602,7 +14097,7 @@ snapshots: axios@1.13.2: dependencies: follow-redirects: 1.15.11 - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -14620,13 +14115,13 @@ snapshots: transitivePeerDependencies: - supports-color - babel-jest@30.2.0(@babel/core@7.29.0): + babel-jest@30.3.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@jest/transform': 30.2.0 + '@jest/transform': 30.3.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 7.0.1 - babel-preset-jest: 30.2.0(@babel/core@7.29.0) + babel-preset-jest: 30.3.0(@babel/core@7.29.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -14660,15 +14155,15 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 - babel-plugin-jest-hoist@30.2.0: + babel-plugin-jest-hoist@30.3.0: dependencies: '@types/babel__core': 7.20.5 - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -14676,15 +14171,15 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -14761,17 +14256,19 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - babel-preset-jest@30.2.0(@babel/core@7.29.0): + babel-preset-jest@30.3.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - babel-plugin-jest-hoist: 30.2.0 + babel-plugin-jest-hoist: 30.3.0 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.0: {} better-opn@3.0.2: dependencies: @@ -14786,11 +14283,6 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - optional: true - big-integer@1.6.52: {} bignumber.js@9.3.1: {} @@ -14813,9 +14305,9 @@ snapshots: bluebird@3.7.2: {} - bn.js@4.12.2: {} + bn.js@4.12.3: {} - bn.js@5.2.2: {} + bn.js@5.2.3: {} body-parser@2.2.2: dependencies: @@ -14825,7 +14317,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.14.1 + qs: 6.15.0 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: @@ -14865,6 +14357,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -14899,13 +14395,13 @@ snapshots: browserify-rsa@4.1.1: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 randombytes: 2.1.0 safe-buffer: 5.2.1 browserify-sign@4.2.5: dependencies: - bn.js: 5.2.2 + bn.js: 5.2.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 @@ -14921,10 +14417,10 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 - electron-to-chromium: 1.5.283 - node-releases: 2.0.27 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) bs-logger@0.2.6: @@ -14957,12 +14453,12 @@ snapshots: bytes@3.1.2: {} - c12@3.3.3(magicast@0.5.1): + c12@3.3.3(magicast@0.5.2): dependencies: chokidar: 5.0.0 confbox: 0.2.4 defu: 6.1.4 - dotenv: 17.2.3 + dotenv: 17.3.1 exsolve: 1.0.8 giget: 2.0.0 jiti: 2.6.1 @@ -14972,7 +14468,7 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 optionalDependencies: - magicast: 0.5.1 + magicast: 0.5.2 call-bind-apply-helpers@1.0.2: dependencies: @@ -15001,7 +14497,7 @@ snapshots: camelcase@8.0.0: {} - caniuse-lite@1.0.30001767: {} + caniuse-lite@1.0.30001777: {} chai@5.3.3: dependencies: @@ -15049,7 +14545,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -15058,7 +14554,7 @@ snapshots: chrome-launcher@1.2.0: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 2.0.2 @@ -15067,7 +14563,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -15080,7 +14576,7 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.3.1: {} + ci-info@4.4.0: {} cipher-base@1.0.7: dependencies: @@ -15092,9 +14588,9 @@ snapshots: dependencies: consola: 3.4.2 - citty@0.2.0: {} + citty@0.2.1: {} - cjs-module-lexer@2.1.1: {} + cjs-module-lexer@2.2.0: {} class-variance-authority@0.7.1: dependencies: @@ -15168,9 +14664,7 @@ snapshots: commander@12.1.0: {} - commander@13.1.0: {} - - commander@14.0.2: {} + commander@14.0.3: {} commander@2.20.3: {} @@ -15218,7 +14712,7 @@ snapshots: configstore@7.1.0: dependencies: - atomically: 2.1.0 + atomically: 2.1.1 dot-prop: 9.0.0 graceful-fs: 4.2.11 xdg-basedir: 5.1.0 @@ -15248,12 +14742,12 @@ snapshots: cookie@0.7.2: {} - cookie@1.0.2: {} + cookie@1.1.1: {} copyfiles@2.4.1: dependencies: glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 mkdirp: 1.0.4 noms: 0.0.0 through2: 2.0.5 @@ -15273,7 +14767,7 @@ snapshots: create-ecdh@4.0.4: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 elliptic: 6.6.1 create-hash@1.2.0: @@ -15323,8 +14817,6 @@ snapshots: randombytes: 2.1.0 randomfill: 1.0.4 - crypto-random-string@2.0.0: {} - css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -15338,36 +14830,14 @@ snapshots: mdn-data: 2.0.14 source-map: 0.6.1 - css-tree@3.1.0: - dependencies: - mdn-data: 2.12.2 - source-map-js: 1.2.1 - optional: true - css-what@6.2.2: {} css.escape@1.5.1: {} cssom@0.5.0: {} - cssstyle@5.3.7: - dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.27 - css-tree: 3.1.0 - lru-cache: 11.2.5 - optional: true - csstype@3.2.3: {} - data-urls@7.0.0(@noble/hashes@2.0.1): - dependencies: - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@2.0.1) - transitivePeerDependencies: - - '@noble/hashes' - optional: true - data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -15410,16 +14880,13 @@ snapshots: decamelize@1.2.0: {} - decimal.js@10.6.0: - optional: true - decode-uri-component@0.2.2: {} decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dedent@1.7.0: {} + dedent@1.7.2: {} deep-eql@5.0.2: {} @@ -15483,11 +14950,11 @@ snapshots: diff-match-patch@1.0.5: {} - diff@4.0.2: {} + diff@4.0.4: {} diffie-hellman@5.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 miller-rabin: 4.0.1 randombytes: 2.1.0 @@ -15537,13 +15004,11 @@ snapshots: dotenv-expand@11.0.7: dependencies: - dotenv: 16.6.1 + dotenv: 16.4.7 dotenv@16.4.7: {} - dotenv@16.6.1: {} - - dotenv@17.2.3: {} + dotenv@17.3.1: {} dunder-proto@1.0.1: dependencies: @@ -15555,11 +15020,11 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.283: {} + electron-to-chromium@1.5.307: {} elliptic@6.6.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 hash.js: 1.1.7 hmac-drbg: 1.0.1 @@ -15587,7 +15052,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.18.3: + enhanced-resolve@5.20.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -15599,11 +15064,11 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} + entities@7.0.1: {} env-editor@0.4.2: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -15611,7 +15076,7 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.24.0: + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -15666,7 +15131,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 es-define-property@1.0.1: {} @@ -15699,14 +15164,6 @@ snapshots: es6-promise@3.3.1: {} - esbuild-register@3.6.0(esbuild@0.27.3): - dependencies: - debug: 4.4.3 - esbuild: 0.27.3 - transitivePeerDependencies: - - supports-color - optional: true - esbuild@0.27.3: optionalDependencies: '@esbuild/aix-ppc64': 0.27.3 @@ -15752,21 +15209,21 @@ snapshots: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15775,13 +15232,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.4(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -15789,19 +15246,19 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1))(typescript@5.9.3): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - jest: 30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) + '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + jest: 30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) transitivePeerDependencies: - supports-color - typescript @@ -15810,31 +15267,31 @@ snapshots: dependencies: requireindex: 1.2.0 - eslint-plugin-prettier@5.5.4(eslint@9.39.2(jiti@2.6.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.5(eslint@9.39.4(jiti@2.6.1))(prettier@3.8.1): dependencies: - eslint: 9.39.2(jiti@2.6.1) - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 + eslint: 9.39.4(jiti@2.6.1) + prettier: 3.8.1 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.12 - eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.4(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) hermes-parser: 0.25.1 - zod: 3.25.76 - zod-validation-error: 4.0.2(zod@3.25.76) + zod: 4.3.5 + zod-validation-error: 4.0.2(zod@4.3.5) transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-refresh@0.4.26(eslint@9.39.4(jiti@2.6.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.4(jiti@2.6.1) eslint-scope@8.4.0: dependencies: @@ -15845,21 +15302,23 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.2(jiti@2.6.1): + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.4(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 + '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 + ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3 @@ -15867,7 +15326,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -15878,7 +15337,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -15888,13 +15347,13 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -15933,8 +15392,6 @@ snapshots: md5.js: 1.3.5 safe-buffer: 5.2.1 - exec-async@2.2.0: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -15947,7 +15404,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@9.6.0: + execa@9.6.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -15966,20 +15423,20 @@ snapshots: expand-template@2.0.3: {} - expect-type@1.2.2: {} + expect-type@1.3.0: {} - expect@30.2.0: + expect@30.3.0: dependencies: - '@jest/expect-utils': 30.2.0 + '@jest/expect-utils': 30.3.0 '@jest/get-type': 30.1.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 - jest-util: 30.2.0 + jest-matcher-utils: 30.3.0 + jest-message-util: 30.3.0 + jest-mock: 30.3.0 + jest-util: 30.3.0 expo-asset@12.0.12(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - '@expo/image-utils': 0.8.8 + '@expo/image-utils': 0.8.12 expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)) react: 19.1.0 @@ -15989,9 +15446,9 @@ snapshots: expo-build-properties@1.0.10(expo@54.0.32): dependencies: - ajv: 8.17.1 + ajv: 8.18.0 expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - semver: 7.7.3 + semver: 7.7.4 expo-camera@17.0.10(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: @@ -16009,7 +15466,7 @@ snapshots: expo-constants@18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)): dependencies: '@expo/config': 12.0.13 - '@expo/env': 2.0.8 + '@expo/env': 2.0.11 expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: @@ -16073,19 +15530,19 @@ snapshots: expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - supports-color - expo-router@6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-router@6.0.22(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@expo/schema-utils': 0.1.8 '@radix-ui/react-slot': 1.2.0(@types/react@19.1.17)(react@19.1.0) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) - '@react-navigation/bottom-tabs': 7.10.1(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native-stack': 7.11.0(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) + '@react-navigation/bottom-tabs': 7.15.5(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native-stack': 7.14.4(@react-navigation/native@7.1.33(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) client-only: 0.0.1 debug: 4.4.3 escape-string-regexp: 4.0.0 @@ -16100,7 +15557,7 @@ snapshots: react: 19.1.0 react-fast-compare: 3.2.2 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-screens: 4.16.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) semver: 7.6.3 @@ -16108,9 +15565,9 @@ snapshots: sf-symbols-typescript: 2.2.0 shallowequal: 1.1.0 use-latest-callback: 0.2.6(react@19.1.0) - vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) optionalDependencies: - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-reanimated: 4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: @@ -16136,7 +15593,7 @@ snapshots: dependencies: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-system-ui@6.0.9(expo@54.0.32)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)): dependencies: @@ -16173,7 +15630,7 @@ snapshots: react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.3(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -16184,10 +15641,10 @@ snapshots: exponential-backoff@3.1.3: {} - express-rate-limit@8.2.1(express@5.2.1): + express-rate-limit@8.3.1(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.0.1 + ip-address: 10.1.0 express@5.2.1: dependencies: @@ -16211,7 +15668,7 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.1 + qs: 6.15.0 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 @@ -16246,9 +15703,19 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.0: {} - fastq@1.19.1: + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -16314,17 +15781,17 @@ snapshots: firefox-profile@4.7.0: dependencies: adm-zip: 0.5.16 - fs-extra: 11.3.2 + fs-extra: 11.3.4 ini: 4.1.3 minimist: 1.2.8 xml2js: 0.6.2 flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.1 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.1: {} flow-enums-runtime@0.0.6: {} @@ -16341,7 +15808,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -16365,7 +15832,7 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.2: + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -16413,11 +15880,13 @@ snapshots: which: 1.2.4 winreg: 0.0.12 + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: dependencies: @@ -16454,7 +15923,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: + get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -16466,7 +15935,7 @@ snapshots: consola: 3.4.2 defu: 6.1.4 node-fetch-native: 1.6.7 - nypm: 0.6.4 + nypm: 0.6.5 pathe: 2.0.3 github-from-package@0.0.0: {} @@ -16485,38 +15954,23 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.9 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.3: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.1.2 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - - glob@13.0.0: + glob@13.0.6: dependencies: - minimatch: 10.1.2 - minipass: 7.1.2 - path-scurry: 2.0.0 - - glob@13.0.2: - dependencies: - minimatch: 10.1.2 - minipass: 7.1.2 - path-scurry: 2.0.0 + minimatch: 10.2.4 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -16524,15 +15978,11 @@ snapshots: dependencies: ini: 4.1.1 - global-dirs@0.1.1: - dependencies: - ini: 1.3.8 - globals@14.0.0: {} globals@16.5.0: {} - globals@17.3.0: {} + globals@17.4.0: {} globalthis@1.0.4: dependencies: @@ -16556,9 +16006,9 @@ snapshots: graceful-readlink@1.0.1: {} - grammy@1.39.3: + grammy@1.41.1: dependencies: - '@grammyjs/types': 3.23.0 + '@grammyjs/types': 3.25.0 abort-controller: 3.0.0 debug: 4.4.3 node-fetch: 2.7.0 @@ -16566,8 +16016,6 @@ snapshots: - encoding - supports-color - graphemer@1.4.0: {} - growly@1.3.0: {} handlebars@4.7.8: @@ -16579,12 +16027,12 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.6.1: + happy-dom@20.8.3: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 - entities: 6.0.1 + entities: 7.0.1 whatwg-mimetype: 3.0.0 ws: 8.19.0 transitivePeerDependencies: @@ -16638,6 +16086,8 @@ snapshots: hermes-estree@0.32.0: {} + hermes-estree@0.33.3: {} + hermes-parser@0.25.1: dependencies: hermes-estree: 0.25.1 @@ -16650,6 +16100,10 @@ snapshots: dependencies: hermes-estree: 0.32.0 + hermes-parser@0.33.3: + dependencies: + hermes-estree: 0.33.3 + hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 @@ -16660,19 +16114,12 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.11.10: {} + hono@4.12.7: {} hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 - html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): - dependencies: - '@exodus/bytes': 1.14.1(@noble/hashes@2.0.1) - transitivePeerDependencies: - - '@noble/hashes' - optional: true - html-escaper@2.0.2: {} html-escaper@3.0.3: {} @@ -16692,14 +16139,6 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - optional: true - http2-client@1.3.5: {} https-browserify@1.0.0: {} @@ -16711,7 +16150,7 @@ snapshots: transitivePeerDependencies: - supports-color - human-id@4.1.1: {} + human-id@4.1.3: {} human-signals@2.1.0: {} @@ -16772,7 +16211,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - ip-address@10.0.1: {} + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -16845,9 +16284,10 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -16895,9 +16335,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-potential-custom-element-name@1.0.1: - optional: true - is-primitive@3.0.1: {} is-promise@4.0.0: {} @@ -16938,7 +16375,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 is-unicode-supported@2.1.0: {} @@ -16959,7 +16396,7 @@ snapshots: dependencies: is-docker: 2.2.1 - is-wsl@3.1.0: + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -16999,7 +16436,7 @@ snapshots: '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -17028,35 +16465,31 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - - jest-changed-files@30.2.0: + jest-changed-files@30.3.0: dependencies: execa: 5.1.1 - jest-util: 30.2.0 + jest-util: 30.3.0 p-limit: 3.1.0 - jest-circus@30.2.0: + jest-circus@30.3.0: dependencies: - '@jest/environment': 30.2.0 - '@jest/expect': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/environment': 30.3.0 + '@jest/expect': 30.3.0 + '@jest/test-result': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 chalk: 4.1.2 co: 4.6.0 - dedent: 1.7.0 + dedent: 1.7.2 is-generator-fn: 2.1.0 - jest-each: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-runtime: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 + jest-each: 30.3.0 + jest-matcher-utils: 30.3.0 + jest-message-util: 30.3.0 + jest-runtime: 30.3.0 + jest-snapshot: 30.3.0 + jest-util: 30.3.0 p-limit: 3.1.0 - pretty-format: 30.2.0 + pretty-format: 30.3.0 pure-rand: 7.0.1 slash: 3.0.0 stack-utils: 2.0.6 @@ -17064,17 +16497,17 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): + jest-cli@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)): dependencies: - '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 + '@jest/core': 30.3.0(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) + '@jest/test-result': 30.3.0 + '@jest/types': 30.3.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) - jest-util: 30.2.0 - jest-validate: 30.2.0 + jest-config: 30.3.0(@types/node@22.19.15)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) + jest-util: 30.3.0 + jest-validate: 30.3.0 yargs: 17.7.2 optionalDependencies: node-notifier: 10.0.1 @@ -17085,111 +16518,75 @@ snapshots: - supports-color - ts-node - jest-config@30.2.0(@types/node@22.19.11)(esbuild-register@3.6.0(esbuild@0.27.3))(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): - dependencies: - '@babel/core': 7.29.0 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.29.0) - chalk: 4.1.2 - ci-info: 4.3.1 - deepmerge: 4.3.1 - glob: 10.5.0 - graceful-fs: 4.2.11 - jest-circus: 30.2.0 - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.2.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.19.11 - esbuild-register: 3.6.0(esbuild@0.27.3) - ts-node: 10.9.2(@types/node@24.10.13)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): + jest-config@30.3.0(@types/node@22.19.15)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.29.0) + '@jest/test-sequencer': 30.3.0 + '@jest/types': 30.3.0 + babel-jest: 30.3.0(@babel/core@7.29.0) chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 deepmerge: 4.3.1 glob: 10.5.0 graceful-fs: 4.2.11 - jest-circus: 30.2.0 + jest-circus: 30.3.0 jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 + jest-environment-node: 30.3.0 jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 + jest-resolve: 30.3.0 + jest-runner: 30.3.0 + jest-util: 30.3.0 + jest-validate: 30.3.0 parse-json: 5.2.0 - pretty-format: 30.2.0 + pretty-format: 30.3.0 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.10.13 - esbuild-register: 3.6.0(esbuild@0.27.3) - ts-node: 10.9.2(@types/node@24.10.13)(typescript@5.9.3) + '@types/node': 22.19.15 + ts-node: 10.9.2(@types/node@22.19.15)(typescript@5.9.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-diff@30.2.0: + jest-diff@30.3.0: dependencies: - '@jest/diff-sequences': 30.0.1 + '@jest/diff-sequences': 30.3.0 '@jest/get-type': 30.1.0 chalk: 4.1.2 - pretty-format: 30.2.0 + pretty-format: 30.3.0 jest-docblock@30.2.0: dependencies: detect-newline: 3.1.0 - jest-each@30.2.0: + jest-each@30.3.0: dependencies: '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 + '@jest/types': 30.3.0 chalk: 4.1.2 - jest-util: 30.2.0 - pretty-format: 30.2.0 + jest-util: 30.3.0 + pretty-format: 30.3.0 jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-environment-node@30.2.0: + jest-environment-node@30.3.0: dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 - jest-mock: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 + '@jest/environment': 30.3.0 + '@jest/fake-timers': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 + jest-mock: 30.3.0 + jest-util: 30.3.0 + jest-validate: 30.3.0 jest-get-type@29.6.3: {} @@ -17197,7 +16594,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.11 + '@types/node': 22.19.15 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17209,32 +16606,32 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-haste-map@30.2.0: + jest-haste-map@30.3.0: dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 30.0.1 - jest-util: 30.2.0 - jest-worker: 30.2.0 - micromatch: 4.0.8 + jest-util: 30.3.0 + jest-worker: 30.3.0 + picomatch: 4.0.3 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - jest-leak-detector@30.2.0: + jest-leak-detector@30.3.0: dependencies: '@jest/get-type': 30.1.0 - pretty-format: 30.2.0 + pretty-format: 30.3.0 - jest-matcher-utils@30.2.0: + jest-matcher-utils@30.3.0: dependencies: '@jest/get-type': 30.1.0 chalk: 4.1.2 - jest-diff: 30.2.0 - pretty-format: 30.2.0 + jest-diff: 30.3.0 + pretty-format: 30.3.0 jest-message-util@29.7.0: dependencies: @@ -17248,151 +16645,151 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-message-util@30.2.0: + jest-message-util@30.3.0: dependencies: '@babel/code-frame': 7.29.0 - '@jest/types': 30.2.0 + '@jest/types': 30.3.0 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 30.2.0 + picomatch: 4.0.3 + pretty-format: 30.3.0 slash: 3.0.0 stack-utils: 2.0.6 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-util: 29.7.0 - jest-mock@30.2.0: + jest-mock@30.3.0: dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.19.11 - jest-util: 30.2.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 + jest-util: 30.3.0 - jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): + jest-pnp-resolver@1.2.3(jest-resolve@30.3.0): optionalDependencies: - jest-resolve: 30.2.0 + jest-resolve: 30.3.0 jest-regex-util@29.6.3: {} jest-regex-util@30.0.1: {} - jest-resolve-dependencies@30.2.0: + jest-resolve-dependencies@30.3.0: dependencies: jest-regex-util: 30.0.1 - jest-snapshot: 30.2.0 + jest-snapshot: 30.3.0 transitivePeerDependencies: - supports-color - jest-resolve@30.2.0: + jest-resolve@30.3.0: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0) - jest-util: 30.2.0 - jest-validate: 30.2.0 + jest-haste-map: 30.3.0 + jest-pnp-resolver: 1.2.3(jest-resolve@30.3.0) + jest-util: 30.3.0 + jest-validate: 30.3.0 slash: 3.0.0 unrs-resolver: 1.11.1 - jest-runner@30.2.0: + jest-runner@30.3.0: dependencies: - '@jest/console': 30.2.0 - '@jest/environment': 30.2.0 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/console': 30.3.0 + '@jest/environment': 30.3.0 + '@jest/test-result': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-haste-map: 30.2.0 - jest-leak-detector: 30.2.0 - jest-message-util: 30.2.0 - jest-resolve: 30.2.0 - jest-runtime: 30.2.0 - jest-util: 30.2.0 - jest-watcher: 30.2.0 - jest-worker: 30.2.0 + jest-environment-node: 30.3.0 + jest-haste-map: 30.3.0 + jest-leak-detector: 30.3.0 + jest-message-util: 30.3.0 + jest-resolve: 30.3.0 + jest-runtime: 30.3.0 + jest-util: 30.3.0 + jest-watcher: 30.3.0 + jest-worker: 30.3.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - jest-runtime@30.2.0: + jest-runtime@30.3.0: dependencies: - '@jest/environment': 30.2.0 - '@jest/fake-timers': 30.2.0 - '@jest/globals': 30.2.0 + '@jest/environment': 30.3.0 + '@jest/fake-timers': 30.3.0 + '@jest/globals': 30.3.0 '@jest/source-map': 30.0.1 - '@jest/test-result': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/test-result': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 chalk: 4.1.2 - cjs-module-lexer: 2.1.1 + cjs-module-lexer: 2.2.0 collect-v8-coverage: 1.0.3 glob: 10.5.0 graceful-fs: 4.2.11 - jest-haste-map: 30.2.0 - jest-message-util: 30.2.0 - jest-mock: 30.2.0 + jest-haste-map: 30.3.0 + jest-message-util: 30.3.0 + jest-mock: 30.3.0 jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-snapshot: 30.2.0 - jest-util: 30.2.0 + jest-resolve: 30.3.0 + jest-snapshot: 30.3.0 + jest-util: 30.3.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - jest-snapshot@30.2.0: + jest-snapshot@30.3.0: dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/types': 7.29.0 - '@jest/expect-utils': 30.2.0 + '@jest/expect-utils': 30.3.0 '@jest/get-type': 30.1.0 - '@jest/snapshot-utils': 30.2.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 + '@jest/snapshot-utils': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) chalk: 4.1.2 - expect: 30.2.0 + expect: 30.3.0 graceful-fs: 4.2.11 - jest-diff: 30.2.0 - jest-matcher-utils: 30.2.0 - jest-message-util: 30.2.0 - jest-util: 30.2.0 - pretty-format: 30.2.0 - semver: 7.7.3 - synckit: 0.11.11 + jest-diff: 30.3.0 + jest-matcher-utils: 30.3.0 + jest-message-util: 30.3.0 + jest-util: 30.3.0 + pretty-format: 30.3.0 + semver: 7.7.4 + synckit: 0.11.12 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.11 + '@types/node': 22.19.15 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-util@30.2.0: + jest-util@30.3.0: dependencies: - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 chalk: 4.1.2 - ci-info: 4.3.1 + ci-info: 4.4.0 graceful-fs: 4.2.11 picomatch: 4.0.3 @@ -17405,47 +16802,47 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-validate@30.2.0: + jest-validate@30.3.0: dependencies: '@jest/get-type': 30.1.0 - '@jest/types': 30.2.0 + '@jest/types': 30.3.0 camelcase: 6.3.0 chalk: 4.1.2 leven: 3.1.0 - pretty-format: 30.2.0 + pretty-format: 30.3.0 - jest-watcher@30.2.0: + jest-watcher@30.3.0: dependencies: - '@jest/test-result': 30.2.0 - '@jest/types': 30.2.0 - '@types/node': 22.19.11 + '@jest/test-result': 30.3.0 + '@jest/types': 30.3.0 + '@types/node': 22.19.15 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 30.2.0 + jest-util: 30.3.0 string-length: 4.0.2 jest-worker@29.7.0: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@30.2.0: + jest-worker@30.3.0: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@ungap/structured-clone': 1.3.0 - jest-util: 30.2.0 + jest-util: 30.3.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): + jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)): dependencies: - '@jest/core': 30.2.0(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) - '@jest/types': 30.2.0 + '@jest/core': 30.3.0(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) + '@jest/types': 30.3.0 import-local: 3.2.0 - jest-cli: 30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) + jest-cli: 30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) optionalDependencies: node-notifier: 10.0.1 transitivePeerDependencies: @@ -17459,7 +16856,7 @@ snapshots: jiti@2.6.1: {} - jose@6.1.3: {} + jose@6.2.1: {} js-md4@0.3.2: {} @@ -17467,7 +16864,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -17478,33 +16875,6 @@ snapshots: jsc-safe-url@0.2.4: {} - jsdom@28.0.0(@noble/hashes@2.0.1): - dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.7.8 - '@exodus/bytes': 1.14.1(@noble/hashes@2.0.1) - cssstyle: 5.3.7 - data-urls: 7.0.0(@noble/hashes@2.0.1) - decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0(@noble/hashes@2.0.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 8.0.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - undici: 7.21.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0(@noble/hashes@2.0.1) - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - '@noble/hashes' - - supports-color - optional: true - jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -17556,7 +16926,7 @@ snapshots: kleur@3.0.3: {} - ky@1.14.0: {} + ky@1.14.3: {} lan-network@0.1.7: {} @@ -17589,87 +16959,71 @@ snapshots: transitivePeerDependencies: - supports-color - lightningcss-android-arm64@1.30.2: - optional: true - lightningcss-android-arm64@1.31.1: optional: true - lightningcss-darwin-arm64@1.30.2: + lightningcss-android-arm64@1.32.0: optional: true lightningcss-darwin-arm64@1.31.1: optional: true - lightningcss-darwin-x64@1.30.2: + lightningcss-darwin-arm64@1.32.0: optional: true lightningcss-darwin-x64@1.31.1: optional: true - lightningcss-freebsd-x64@1.30.2: + lightningcss-darwin-x64@1.32.0: optional: true lightningcss-freebsd-x64@1.31.1: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-freebsd-x64@1.32.0: optional: true lightningcss-linux-arm-gnueabihf@1.31.1: optional: true - lightningcss-linux-arm64-gnu@1.30.2: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true lightningcss-linux-arm64-gnu@1.31.1: optional: true - lightningcss-linux-arm64-musl@1.30.2: + lightningcss-linux-arm64-gnu@1.32.0: optional: true lightningcss-linux-arm64-musl@1.31.1: optional: true - lightningcss-linux-x64-gnu@1.30.2: + lightningcss-linux-arm64-musl@1.32.0: optional: true lightningcss-linux-x64-gnu@1.31.1: optional: true - lightningcss-linux-x64-musl@1.30.2: + lightningcss-linux-x64-gnu@1.32.0: optional: true lightningcss-linux-x64-musl@1.31.1: optional: true - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-linux-x64-musl@1.32.0: optional: true lightningcss-win32-arm64-msvc@1.31.1: optional: true - lightningcss-win32-x64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.32.0: optional: true lightningcss-win32-x64-msvc@1.31.1: optional: true - lightningcss@1.30.2: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 + lightningcss-win32-x64-msvc@1.32.0: + optional: true lightningcss@1.31.1: dependencies: @@ -17687,6 +17041,22 @@ snapshots: lightningcss-win32-arm64-msvc: 1.31.1 lightningcss-win32-x64-msvc: 1.31.1 + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lines-and-columns@1.2.4: {} lines-and-columns@2.0.4: {} @@ -17723,7 +17093,7 @@ snapshots: lodash.uniqby@4.7.0: {} - lodash@4.17.21: {} + lodash@4.17.23: {} log-symbols@2.2.0: dependencies: @@ -17737,7 +17107,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.5: {} + lru-cache@11.2.6: {} lru-cache@5.1.1: dependencies: @@ -17753,7 +17123,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.1: + magicast@0.5.2: dependencies: '@babel/parser': 7.29.0 '@babel/types': 7.29.0 @@ -17761,7 +17131,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 make-error@1.3.6: {} @@ -17787,9 +17157,6 @@ snapshots: mdn-data@2.0.14: {} - mdn-data@2.12.2: - optional: true - media-typer@1.1.0: {} memoize-one@5.2.1: {} @@ -17813,10 +17180,23 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.83.5: + dependencies: + '@babel/core': 7.29.0 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.33.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.83.3: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.83.3: dependencies: exponential-backoff: 3.1.3 @@ -17826,6 +17206,15 @@ snapshots: transitivePeerDependencies: - supports-color + metro-cache@0.83.5: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.83.5 + transitivePeerDependencies: + - supports-color + metro-config@0.83.3: dependencies: connect: 3.7.0 @@ -17835,7 +17224,22 @@ snapshots: metro-cache: 0.83.3 metro-core: 0.83.3 metro-runtime: 0.83.3 - yaml: 2.8.1 + yaml: 2.8.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro-config@0.83.5: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.83.5 + metro-cache: 0.83.5 + metro-core: 0.83.5 + metro-runtime: 0.83.5 + yaml: 2.8.2 transitivePeerDependencies: - bufferutil - supports-color @@ -17847,6 +17251,12 @@ snapshots: lodash.throttle: 4.1.1 metro-resolver: 0.83.3 + metro-core@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.83.5 + metro-file-map@0.83.3: dependencies: debug: 4.4.3 @@ -17861,20 +17271,48 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.83.5: + dependencies: + debug: 4.4.3 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + metro-minify-terser@0.83.3: dependencies: flow-enums-runtime: 0.0.6 terser: 5.46.0 + metro-minify-terser@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.46.0 + metro-resolver@0.83.3: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.83.3: dependencies: '@babel/runtime': 7.28.6 flow-enums-runtime: 0.0.6 + metro-runtime@0.83.5: + dependencies: + '@babel/runtime': 7.28.6 + flow-enums-runtime: 0.0.6 + metro-source-map@0.83.3: dependencies: '@babel/traverse': 7.29.0 @@ -17890,6 +17328,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.83.5: + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.83.5 + nullthrows: 1.1.1 + ob1: 0.83.5 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.83.3: dependencies: flow-enums-runtime: 0.0.6 @@ -17901,6 +17353,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.83.5 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.83.3: dependencies: '@babel/core': 7.29.0 @@ -17912,6 +17375,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.83.5: + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.83.3: dependencies: '@babel/core': 7.29.0 @@ -17932,6 +17406,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.83.5: + dependencies: + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + metro: 0.83.5 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-minify-terser: 0.83.5 + metro-source-map: 0.83.5 + metro-transform-plugins: 0.83.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.83.3: dependencies: '@babel/code-frame': 7.29.0 @@ -17979,6 +17473,53 @@ snapshots: - supports-color - utf-8-validate + metro@0.83.5: + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + accepts: 2.0.0 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.3 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.33.3 + image-size: 1.2.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + metro-file-map: 0.83.5 + metro-resolver: 0.83.5 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 + metro-symbolicate: 0.83.5 + metro-transform-plugins: 0.83.5 + metro-transform-worker: 0.83.5 + mime-types: 3.0.2 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -17986,7 +17527,7 @@ snapshots: miller-rabin@4.0.1: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 brorand: 1.1.0 mime-db@1.52.0: {} @@ -18015,29 +17556,25 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.1 - - minimatch@10.1.2: + minimatch@10.2.4: dependencies: - '@isaacs/brace-expansion': 5.0.1 + brace-expansion: 5.0.4 - minimatch@3.1.2: + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 - minimatch@9.0.5: + minimatch@9.0.9: dependencies: brace-expansion: 2.0.2 minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@3.1.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mkdirp-classic@0.5.3: {} @@ -18056,19 +17593,19 @@ snapshots: '@types/minimatch': 3.0.5 array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 3.1.2 + minimatch: 3.1.5 mutation-server-protocol@0.4.1: dependencies: zod: 4.3.5 - mutation-testing-elements@3.7.1: {} + mutation-testing-elements@3.7.2: {} - mutation-testing-metrics@3.7.1: + mutation-testing-metrics@3.7.2: dependencies: - mutation-testing-report-schema: 3.7.1 + mutation-testing-report-schema: 3.7.2 - mutation-testing-report-schema@3.7.1: {} + mutation-testing-report-schema@3.7.2: {} mute-stream@3.0.0: {} @@ -18105,9 +17642,9 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - node-abi@3.77.0: + node-abi@3.88.0: dependencies: - semver: 7.7.3 + semver: 7.7.4 node-addon-api@3.2.1: {} @@ -18133,7 +17670,7 @@ snapshots: node-addon-api: 3.2.1 prebuild-install: 7.1.3 - node-hid@3.2.0: + node-hid@3.3.0: dependencies: node-addon-api: 3.2.1 pkg-prebuilds: 1.0.0 @@ -18144,7 +17681,7 @@ snapshots: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.7.3 + semver: 7.7.4 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 @@ -18153,7 +17690,7 @@ snapshots: dependencies: es6-promise: 3.3.1 - node-releases@2.0.27: {} + node-releases@2.0.36: {} node-stdlib-browser@1.3.1: dependencies: @@ -18196,7 +17733,7 @@ snapshots: dependencies: hosted-git-info: 7.0.2 proc-log: 4.2.0 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-name: 5.0.1 npm-run-path@4.0.1: @@ -18214,9 +17751,9 @@ snapshots: nullthrows@1.1.1: {} - nypm@0.6.4: + nypm@0.6.5: dependencies: - citty: 0.2.0 + citty: 0.2.1 pathe: 2.0.3 tinyexec: 1.0.2 @@ -18255,6 +17792,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -18279,14 +17820,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 object.values@1.2.1: dependencies: @@ -18406,10 +17947,10 @@ snapshots: package-json@10.0.1: dependencies: - ky: 1.14.0 - registry-auth-token: 5.1.0 + ky: 1.14.3 + registry-auth-token: 5.1.1 registry-url: 6.0.1 - semver: 7.7.3 + semver: 7.7.4 package-manager-detector@0.2.11: dependencies: @@ -18432,14 +17973,14 @@ snapshots: parse-json@5.2.0: dependencies: '@babel/code-frame': 7.29.0 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@7.1.1: dependencies: '@babel/code-frame': 7.29.0 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 3.0.2 lines-and-columns: 2.0.4 type-fest: 3.13.1 @@ -18450,11 +17991,6 @@ snapshots: dependencies: pngjs: 3.4.0 - parse5@8.0.0: - dependencies: - entities: 6.0.1 - optional: true - parseurl@1.3.3: {} path-browserify@1.0.1: {} @@ -18472,12 +18008,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.0: + path-scurry@2.0.2: dependencies: - lru-cache: 11.2.5 - minipass: 7.1.2 + lru-cache: 11.2.6 + minipass: 7.1.3 path-to-regexp@8.3.0: {} @@ -18512,7 +18048,7 @@ snapshots: dependencies: split2: 4.2.0 - pino-std-serializers@7.0.0: {} + pino-std-serializers@7.1.0: {} pino@9.7.0: dependencies: @@ -18520,7 +18056,7 @@ snapshots: fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.0.0 + pino-std-serializers: 7.1.0 process-warning: 5.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 @@ -18576,7 +18112,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.6: + postcss@8.5.8: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -18590,8 +18126,8 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.77.0 - pump: 3.0.3 + node-abi: 3.88.0 + pump: 3.0.4 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 2.1.4 @@ -18599,13 +18135,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 prettier@2.8.8: {} - prettier@3.6.2: {} + prettier@3.8.1: {} pretty-bytes@5.6.0: {} @@ -18621,7 +18157,7 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-format@30.2.0: + pretty-format@30.3.0: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 @@ -18671,14 +18207,14 @@ snapshots: public-encrypt@4.0.3: dependencies: - bn.js: 4.12.2 + bn.js: 4.12.3 browserify-rsa: 4.1.1 create-hash: 1.2.0 parse-asn1: 5.1.9 randombytes: 2.1.0 safe-buffer: 5.2.1 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -18701,7 +18237,7 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 - qs@6.14.1: + qs@6.15.0: dependencies: side-channel: 1.1.0 @@ -18819,7 +18355,7 @@ snapshots: react-devtools-core@6.1.5: dependencies: - shell-quote: 1.7.3 + shell-quote: 1.8.3 ws: 7.5.10 transitivePeerDependencies: - bufferutil @@ -18844,17 +18380,12 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@19.2.3(react@19.2.3): - dependencies: - react: 19.2.3 - scheduler: 0.27.0 - - react-dom@19.2.4(react@19.1.0): + react-dom@19.2.3(react@19.1.0): dependencies: react: 19.1.0 scheduler: 0.27.0 - react-dom@19.2.4(react@19.2.3): + react-dom@19.2.3(react@19.2.3): dependencies: react: 19.2.3 scheduler: 0.27.0 @@ -18896,7 +18427,7 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge@1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-is-edge-to-edge@1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) @@ -18905,7 +18436,7 @@ snapshots: dependencies: react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-reanimated: 4.1.3(@babel/core@7.29.0)(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-mmkv@4.0.0(react-native-nitro-modules@0.31.4(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): @@ -18949,7 +18480,7 @@ snapshots: '@babel/core': 7.29.0 react: 19.1.0 react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-worklets: 0.5.1(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) semver: 7.7.2 @@ -18963,7 +18494,7 @@ snapshots: react: 19.1.0 react-freeze: 1.0.4(react@19.1.0) react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) warn-once: 0.1.1 react-native-sse@1.2.1: {} @@ -19037,8 +18568,8 @@ snapshots: invariant: 2.2.4 jest-environment-node: 29.7.0 memoize-one: 5.2.1 - metro-runtime: 0.83.3 - metro-source-map: 0.83.3 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 nullthrows: 1.1.1 pretty-format: 29.7.0 promise: 8.3.0 @@ -19047,7 +18578,7 @@ snapshots: react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.26.0 - semver: 7.7.3 + semver: 7.7.4 stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 ws: 6.2.3 @@ -19104,15 +18635,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.8 - react-router-dom@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-router-dom@7.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - react-router: 7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react-router: 7.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-router@7.13.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-router@7.13.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - cookie: 1.0.2 + cookie: 1.1.1 react: 19.2.3 set-cookie-parser: 2.7.2 optionalDependencies: @@ -19141,7 +18672,7 @@ snapshots: read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 - js-yaml: 3.14.1 + js-yaml: 3.14.2 pify: 4.0.1 strip-bom: 3.0.0 @@ -19197,7 +18728,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -19232,9 +18763,9 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 - registry-auth-token@5.1.0: + registry-auth-token@5.1.1: dependencies: - '@pnpm/npm-conf': 2.3.1 + '@pnpm/npm-conf': 3.0.2 registry-url@6.0.1: dependencies: @@ -19268,22 +18799,12 @@ snapshots: resolve-from@5.0.0: {} - resolve-global@1.0.0: - dependencies: - global-dirs: 0.1.1 - resolve-pkg-maps@1.0.0: {} resolve-workspace-root@2.0.1: {} resolve.exports@2.0.3: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.11: dependencies: is-core-module: 2.16.1 @@ -19305,9 +18826,9 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.1.2: + rimraf@6.1.3: dependencies: - glob: 13.0.0 + glob: 13.0.6 package-json-from-dist: 1.0.1 ripemd160@2.0.3: @@ -19334,35 +18855,35 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.2 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.2 - rollup@4.57.1: + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 rosetta@1.1.0: @@ -19421,12 +18942,7 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.4.3: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - optional: true + sax@1.5.0: {} scheduler@0.26.0: {} @@ -19440,6 +18956,8 @@ snapshots: semver@7.7.3: {} + semver@7.7.4: {} + send@0.19.2: dependencies: debug: 2.6.9 @@ -19553,6 +19071,8 @@ snapshots: shell-quote@1.7.3: {} + shell-quote@1.8.3: {} + shellwords@0.1.1: {} should-equal@2.0.0: @@ -19715,7 +19235,7 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + storybook@10.2.8(@testing-library/dom@10.4.1)(prettier@3.8.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@storybook/global': 5.0.0 '@storybook/icons': 2.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -19726,11 +19246,11 @@ snapshots: esbuild: 0.27.3 open: 10.2.0 recast: 0.23.11 - semver: 7.7.3 + semver: 7.7.4 use-sync-external-store: 1.6.0(react@19.2.3) ws: 8.19.0 optionalDependencies: - prettier: 3.6.2 + prettier: 3.8.1 transitivePeerDependencies: - '@testing-library/dom' - bufferutil @@ -19769,13 +19289,13 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 string.prototype.codepointat@0.2.1: {} @@ -19785,7 +19305,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -19820,9 +19340,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.2.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} @@ -19885,23 +19405,23 @@ snapshots: swagger-schema-official@2.0.0-bab6bed: {} - swagger-typescript-api@13.2.16(magicast@0.5.1): + swagger-typescript-api@13.2.16(magicast@0.5.2): dependencies: '@biomejs/js-api': 3.0.0(@biomejs/wasm-nodejs@2.2.6) '@biomejs/wasm-nodejs': 2.2.6 - '@types/lodash': 4.17.23 + '@types/lodash': 4.17.24 '@types/swagger-schema-official': 2.0.25 - c12: 3.3.3(magicast@0.5.1) + c12: 3.3.3(magicast@0.5.2) citty: 0.1.6 consola: 3.4.2 eta: 3.5.0 - lodash: 4.17.21 + lodash: 4.17.23 nanoid: 5.1.6 openapi-types: 12.1.3 swagger-schema-official: 2.0.0-bab6bed swagger2openapi: 7.0.8 typescript: 5.9.3 - yaml: 2.8.1 + yaml: 2.8.2 transitivePeerDependencies: - '@biomejs/wasm-bundler' - '@biomejs/wasm-web' @@ -19924,24 +19444,21 @@ snapshots: transitivePeerDependencies: - encoding - symbol-tree@3.2.4: - optional: true - symbol.inspect@1.0.1: {} - synckit@0.11.11: + synckit@0.11.12: dependencies: '@pkgr/core': 0.2.9 tagged-tag@1.0.0: {} - tailwind-merge@3.4.0: {} + tailwind-merge@3.5.0: {} - tailwindcss-animate@1.0.7(tailwindcss@4.1.18): + tailwindcss-animate@1.0.7(tailwindcss@4.2.1): dependencies: - tailwindcss: 4.1.18 + tailwindcss: 4.2.1 - tailwindcss@4.1.18: {} + tailwindcss@4.2.1: {} tapable@2.3.0: {} @@ -19949,7 +19466,7 @@ snapshots: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.3 + pump: 3.0.4 tar-stream: 2.2.0 tar-stream@2.2.0: @@ -19960,16 +19477,14 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@7.5.7: + tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 - temp-dir@2.0.0: {} - templite@1.2.0: {} term-size@2.2.1: {} @@ -19982,7 +19497,7 @@ snapshots: terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -19992,7 +19507,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 text-encoding@0.7.0: {} @@ -20046,14 +19561,6 @@ snapshots: tinyspy@4.0.4: {} - tldts-core@7.0.23: - optional: true - - tldts@7.0.23: - dependencies: - tldts-core: 7.0.23 - optional: true - tmp@0.2.5: {} tmpl@1.0.5: {} @@ -20072,28 +19579,14 @@ snapshots: totalist@3.0.1: {} - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.23 - optional: true - tr46@0.0.3: {} tr46@5.1.1: dependencies: punycode: 2.3.1 - tr46@6.0.0: - dependencies: - punycode: 2.3.1 - optional: true - tree-kill@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -20102,51 +19595,50 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.6(@babel/core@7.29.0)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0))(esbuild@0.27.3)(jest-util@30.2.0)(jest@30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.6(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@30.3.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 30.2.0(@types/node@24.10.13)(esbuild-register@3.6.0(esbuild@0.27.3))(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) + jest: 30.3.0(@types/node@22.19.15)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.3 + semver: 7.7.4 type-fest: 4.41.0 typescript: 5.9.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.29.0 - '@jest/transform': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.29.0) - esbuild: 0.27.3 - jest-util: 30.2.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 + babel-jest: 30.3.0(@babel/core@7.29.0) + jest-util: 30.3.0 - ts-json-schema-generator@2.4.0: + ts-json-schema-generator@2.9.0: dependencies: '@types/json-schema': 7.0.15 - commander: 13.1.0 - glob: 11.0.3 + commander: 14.0.3 + glob: 13.0.6 json5: 2.2.3 normalize-path: 3.0.0 safe-stable-stringify: 2.5.0 tslib: 2.8.1 typescript: 5.9.3 - ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3): + ts-node@10.9.2(@types/node@22.19.15)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.13 - acorn: 8.15.0 - acorn-walk: 8.3.4 + '@types/node': 22.19.15 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 - diff: 4.0.2 + diff: 4.0.4 make-error: 1.3.6 typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 @@ -20170,7 +19662,7 @@ snapshots: tsx@4.21.0: dependencies: esbuild: 0.27.3 - get-tsconfig: 4.10.1 + get-tsconfig: 4.13.6 optionalDependencies: fsevents: 2.3.3 @@ -20280,19 +19772,19 @@ snapshots: dependencies: des.js: 1.1.0 js-md4: 0.3.2 - qs: 6.14.1 + qs: 6.15.0 tunnel: 0.0.6 - underscore: 1.13.7 + underscore: 1.13.8 typedarray@0.0.6: {} - typescript-eslint@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -20315,17 +19807,12 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - underscore@1.13.7: {} + underscore@1.13.8: {} undici-types@6.21.0: {} - undici-types@7.16.0: {} - undici@6.23.0: {} - undici@7.21.0: - optional: true - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -20339,10 +19826,6 @@ snapshots: unicorn-magic@0.3.0: {} - unique-string@2.0.0: - dependencies: - crypto-random-string: 2.0.0 - universalify@0.1.2: {} universalify@2.0.1: {} @@ -20352,7 +19835,7 @@ snapshots: unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 + acorn: 8.16.0 picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 @@ -20398,7 +19881,7 @@ snapshots: is-npm: 6.1.0 latest-version: 9.0.0 pupa: 3.3.0 - semver: 7.7.3 + semver: 7.7.4 xdg-basedir: 5.1.0 uri-js@4.4.1: @@ -20410,11 +19893,11 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.14.1 + qs: 6.15.0 usb@2.9.0: dependencies: - '@types/w3c-web-usb': 1.0.12 + '@types/w3c-web-usb': 1.0.13 node-addon-api: 6.1.0 node-gyp-build: 4.8.4 @@ -20466,9 +19949,9 @@ snapshots: dependencies: inherits: 2.0.4 is-arguments: 1.2.0 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-typed-array: 1.1.15 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 utils-merge@1.0.1: {} @@ -20492,70 +19975,53 @@ snapshots: vary@1.1.2: {} - vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0): + vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0): dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.4(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.3(react@19.1.0))(react@19.1.0) react: 19.1.0 - react-dom: 19.2.4(react@19.1.0) + react-dom: 19.2.3(react@19.1.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - vite-bundle-analyzer@1.3.2: {} + vite-bundle-analyzer@1.3.6: {} - vite-plugin-node-polyfills@0.25.0(rollup@4.57.1)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-node-polyfills@0.25.0(rollup@4.59.0)(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.57.1) + '@rollup/plugin-inject': 5.0.5(rollup@4.59.0) node-stdlib-browser: 1.3.1 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - rollup - vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1): - dependencies: - esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.19.11 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.31.1 - terser: 5.46.0 - tsx: 4.21.0 - yaml: 2.8.1 - - vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1): + vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 + postcss: 8.5.8 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 22.19.15 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.31.1 + lightningcss: 1.32.0 terser: 5.46.0 tsx: 4.21.0 - yaml: 2.8.1 + yaml: 2.8.2 - vitest@4.0.18(@types/node@22.19.11)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.18(@types/node@22.19.15)(@vitest/ui@4.0.18)(happy-dom@20.8.3)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 '@vitest/spy': 4.0.18 '@vitest/utils': 4.0.18 es-module-lexer: 1.7.0 - expect-type: 1.2.2 + expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 @@ -20565,53 +20031,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@22.19.11)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.15 '@vitest/ui': 4.0.18(vitest@4.0.18) - happy-dom: 20.6.1 - jsdom: 28.0.0(@noble/hashes@2.0.1) - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - - vitest@4.0.18(@types/node@24.10.13)(@vitest/ui@4.0.18)(happy-dom@20.6.1)(jiti@2.6.1)(jsdom@28.0.0(@noble/hashes@2.0.1))(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1): - dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 24.10.13 - '@vitest/ui': 4.0.18(vitest@4.0.18) - happy-dom: 20.6.1 - jsdom: 28.0.0(@noble/hashes@2.0.1) + happy-dom: 20.8.3 transitivePeerDependencies: - jiti - less @@ -20629,11 +20054,6 @@ snapshots: vm-browserify@1.1.2: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - optional: true - walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -20690,18 +20110,12 @@ snapshots: webidl-conversions@7.0.0: {} - webidl-conversions@8.0.1: - optional: true - webpack-virtual-modules@0.6.2: {} whatwg-fetch@3.6.20: {} whatwg-mimetype@3.0.0: {} - whatwg-mimetype@5.0.0: - optional: true - whatwg-url-without-unicode@8.0.0-3: dependencies: buffer: 5.7.1 @@ -20713,15 +20127,6 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 - whatwg-url@16.0.0(@noble/hashes@2.0.1): - dependencies: - '@exodus/bytes': 1.14.1(@noble/hashes@2.0.1) - tr46: 6.0.0 - webidl-conversions: 8.0.1 - transitivePeerDependencies: - - '@noble/hashes' - optional: true - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -20747,13 +20152,13 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 which-collection@1.0.2: dependencies: @@ -20764,7 +20169,7 @@ snapshots: which-module@2.0.1: {} - which-typed-array@1.1.19: + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 @@ -20816,13 +20221,13 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 wrappy@1.0.2: {} @@ -20848,7 +20253,7 @@ snapshots: wsl-utils@0.1.0: dependencies: - is-wsl: 3.1.0 + is-wsl: 3.1.1 xcode@3.0.1: dependencies: @@ -20857,26 +20262,20 @@ snapshots: xdg-basedir@5.1.0: {} - xml-name-validator@5.0.0: - optional: true - xml2js@0.6.0: dependencies: - sax: 1.4.3 + sax: 1.5.0 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.3 + sax: 1.5.0 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} xmlbuilder@15.1.1: {} - xmlchars@2.2.0: - optional: true - xtend@4.0.2: {} y18n@4.0.3: {} @@ -20889,7 +20288,7 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@18.1.3: dependencies: @@ -20949,9 +20348,9 @@ snapshots: dependencies: zod: 3.25.76 - zod-validation-error@4.0.2(zod@3.25.76): + zod-validation-error@4.0.2(zod@4.3.5): dependencies: - zod: 3.25.76 + zod: 4.3.5 zod@3.25.76: {} diff --git a/template/packages/appkit-react/README.md b/template/packages/appkit-react/README.md index d0f547302..a893e1333 100644 --- a/template/packages/appkit-react/README.md +++ b/template/packages/appkit-react/README.md @@ -124,6 +124,18 @@ Use `useSwapQuote` to get a quote and `useBuildSwapTransaction` to build the tra See [Swap Hooks](./docs/hooks.md#swap) for usage examples. +## Staking + +AppKit supports staking through various providers (e.g., Tonstakers). The staking functionality is integrated into the core action and hook system. + +### Hooks + +Use `useStakingQuote` to get a staking/unstaking quote and `useBuildStakeTransaction` or `useBuildUnstakeTransaction` to build the transaction. + +[Read more about Staking](https://github.com/ton-connect/kit/tree/main/packages/appkit/docs/staking.md) + +%%demo/examples/src/appkit/hooks/staking#USE_STAKING%% + ## Migration from TonConnect UI `AppKitProvider` automatically bridges TonConnect if a `TonConnectConnector` is configured, so `@tonconnect/ui-react` hooks (like `useTonAddress`, `useTonWallet`, etc.) work out of the box inside `AppKitProvider`. diff --git a/template/packages/appkit/docs/actions.md b/template/packages/appkit/docs/actions.md index 7bdb1b26c..01204cd36 100644 --- a/template/packages/appkit/docs/actions.md +++ b/template/packages/appkit/docs/actions.md @@ -122,6 +122,12 @@ Get all configured networks. %%demo/examples/src/appkit/actions/network#GET_NETWORKS%% +### `getApiClient` + +Get the API client for a specific network. + +%%demo/examples/src/appkit/actions/network#GET_API_CLIENT%% + ### `watchNetworks` Watch configured networks. @@ -208,6 +214,38 @@ Build (assemble) a swap transaction based on a quote. After the transaction is b %%demo/examples/src/appkit/actions/swap#BUILD_SWAP_TRANSACTION%% +## Staking + +### `getStakingProviders` + +Get all available staking provider IDs. + +%%demo/examples/src/appkit/actions/staking#GET_STAKING_PROVIDERS%% + +### `getStakingProviderInfo` + +Get information about a specific staking provider. + +%%demo/examples/src/appkit/actions/staking#GET_STAKING_PROVIDER_INFO%% + +### `getStakingQuote` + +Get a staking or unstaking quote. + +%%demo/examples/src/appkit/actions/staking#GET_STAKING_QUOTE%% + +### `buildStakeTransaction` + +Build a stake transaction based on a quote. + +%%demo/examples/src/appkit/actions/staking#BUILD_STAKE_TRANSACTION%% + +### `getStakedBalance` + +Get the user's staked balance. + +%%demo/examples/src/appkit/actions/staking#GET_STAKED_BALANCE%% + ## Transaction ### `createTransferTonTransaction` diff --git a/template/packages/appkit/docs/staking.md b/template/packages/appkit/docs/staking.md new file mode 100644 index 000000000..57869c018 --- /dev/null +++ b/template/packages/appkit/docs/staking.md @@ -0,0 +1,29 @@ +--- +target: packages/appkit/docs/staking.md +--- + +# Staking + +AppKit supports staking through various providers. Available providers: + +- **TonStakersStakingProvider** – [Tonstakers](https://tonstakers.com) liquid staking protocol + +## Installation + +Staking providers are included in the `@ton/appkit` package. No extra dependencies are required. + +## Setup + +You can set up staking providers by passing them to the `AppKit` constructor. + +%%demo/examples/src/appkit/staking#STAKING_PROVIDER_INIT%% + +### Register Dynamically + +Alternatively, you can register providers dynamically using `registerProvider`: + +%%demo/examples/src/appkit/staking#STAKING_PROVIDER_REGISTER%% + +## Configuration + +- **Tonstakers**: [Tonstakers documentation](https://docs.tonstakers.com) and [provider README](https://github.com/ton-connect/kit/blob/main/packages/walletkit/src/defi/staking/tonstakers/README.md)