diff --git a/packages/adapters/ethers/package.json b/packages/adapters/ethers/package.json index b66bea896c..1a96dbb86b 100644 --- a/packages/adapters/ethers/package.json +++ b/packages/adapters/ethers/package.json @@ -13,7 +13,8 @@ "build": "tsc --build tsconfig.build.json", "watch": "tsc --watch", "typecheck": "tsc --noEmit", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx" + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "test": "vitest run --coverage.enabled=true --coverage.reporter=json --coverage.reporter=json-summary --coverage.reportOnFailure=true" }, "dependencies": { "@walletconnect/utils": "2.14.0", diff --git a/packages/adapters/ethers/src/client.ts b/packages/adapters/ethers/src/client.ts index 9a464be5bd..f015310ae1 100644 --- a/packages/adapters/ethers/src/client.ts +++ b/packages/adapters/ethers/src/client.ts @@ -70,7 +70,7 @@ interface Info { rdns: string } -interface EIP6963ProviderDetail { +export interface EIP6963ProviderDetail { info: Info provider: Provider } @@ -80,8 +80,6 @@ export class EVMEthersClient { private EIP6963Providers: EIP6963ProviderDetail[] = [] - private caipNetworks: CaipNetwork[] = [] - private ethersConfig?: AdapterOptions['ethersConfig'] private authProvider?: W3mFrameProvider @@ -89,6 +87,8 @@ export class EVMEthersClient { // -- Public variables -------------------------------------------------------- public options: AppKitOptions | undefined = undefined + public caipNetworks: CaipNetwork[] = [] + public chainNamespace: ChainNamespace = CommonConstantsUtil.CHAIN.EVM public networkControllerClient?: NetworkControllerClient @@ -193,7 +193,7 @@ export class EVMEthersClient { this.appKit = appKit this.options = options this.caipNetworks = options.caipNetworks - this.defaultCaipNetwork = options.defaultCaipNetwork + this.defaultCaipNetwork = options.defaultCaipNetwork || options.caipNetworks[0] this.tokens = HelpersUtil.getCaipTokens(options.tokens) this.ethersConfig = this.createEthersConfig(options) @@ -1077,8 +1077,8 @@ export class EVMEthersClient { this.appKit?.setConnectors(w3mConnectors) } - private async syncAuthConnector(projectId: string) { - if (typeof window !== 'undefined') { + private async syncAuthConnector(projectId: string, bypassWindowCheck = false) { + if (bypassWindowCheck || typeof window !== 'undefined') { this.authProvider = new W3mFrameProvider(projectId) this.appKit?.addConnector({ diff --git a/packages/adapters/ethers/src/tests/client.test.ts b/packages/adapters/ethers/src/tests/client.test.ts new file mode 100644 index 0000000000..cf7a2f4c7a --- /dev/null +++ b/packages/adapters/ethers/src/tests/client.test.ts @@ -0,0 +1,894 @@ +import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest' +import { EVMEthersClient } from '../client' +import type { EIP6963ProviderDetail } from '../client' +import { mockOptions } from './mocks/Options' +import { mockCreateEthersConfig } from './mocks/EthersConfig' +import mockAppKit from './mocks/AppKit' +import { mockAuthConnector } from './mocks/AuthConnector' +import { + EthersHelpersUtil, + type ProviderId, + type ProviderType +} from '@web3modal/scaffold-utils/ethers' +import { ConstantsUtil } from '@web3modal/scaffold-utils' +import { arbitrum, mainnet, polygon } from '@web3modal/base/chains' +import { ProviderUtil } from '@web3modal/base/store' +import { SafeLocalStorage } from '@web3modal/common' +import { WcConstantsUtil, type BlockchainApiLookupEnsName } from '@web3modal/base' +import { InfuraProvider, JsonRpcProvider } from 'ethers' + +import type { CaipNetwork, ChainNamespace } from '@web3modal/common' + +vi.mock('@web3modal/wallet', () => ({ + W3mFrameProvider: vi.fn().mockImplementation(() => mockAuthConnector), + W3mFrameHelpers: { + checkIfRequestExists: vi.fn(), + checkIfRequestIsAllowed: vi.fn() + }, + W3mFrameRpcConstants: { + RPC_METHOD_NOT_ALLOWED_UI_MESSAGE: 'RPC method not allowed' + } +})) + +vi.mock('@web3modal/scaffold-utils', () => { + const INJECTED_CONNECTOR_ID = 'injected' + const COINBASE_SDK_CONNECTOR_ID = 'coinbaseWallet' + const EIP6963_CONNECTOR_ID = 'eip6963' + const WALLET_CONNECT_CONNECTOR_ID = 'walletConnect' + const AUTH_CONNECTOR_ID = 'w3mAuth' + return { + PresetsUtil: { + ConnectorTypesMap: { + [INJECTED_CONNECTOR_ID]: 'INJECTED', + [COINBASE_SDK_CONNECTOR_ID]: 'EXTERNAL', + [EIP6963_CONNECTOR_ID]: 'INJECTED' + }, + ConnectorExplorerIds: { + [INJECTED_CONNECTOR_ID]: 'injected-explorer', + [COINBASE_SDK_CONNECTOR_ID]: 'coinbase-explorer', + [EIP6963_CONNECTOR_ID]: 'eip6963-explorer' + }, + ConnectorImageIds: { + [INJECTED_CONNECTOR_ID]: 'injected-image', + [COINBASE_SDK_CONNECTOR_ID]: 'coinbase-image', + [EIP6963_CONNECTOR_ID]: 'eip6963-image' + }, + ConnectorNamesMap: { + [INJECTED_CONNECTOR_ID]: 'Injected', + [COINBASE_SDK_CONNECTOR_ID]: 'Coinbase', + [EIP6963_CONNECTOR_ID]: 'EIP6963' + }, + WalletConnectRpcChainIds: [1, 137, 10, 42161, 56, 43114, 250, 25, 1313161554, 1284] + }, + ConstantsUtil: { + INJECTED_CONNECTOR_ID, + COINBASE_SDK_CONNECTOR_ID, + EIP6963_CONNECTOR_ID, + WALLET_CONNECT_CONNECTOR_ID, + AUTH_CONNECTOR_ID, + EIP155: 'eip155' + }, + HelpersUtil: { + getCaipTokens: vi.fn().mockReturnValue([]) + } + } +}) + +vi.mock('@web3modal/base/store', () => ({ + ProviderUtil: { + setProvider: vi.fn(), + setProviderId: vi.fn(), + state: { + providerIds: {} + }, + getProvider: vi.fn() + } +})) + +vi.mock('ethers', async () => { + return { + InfuraProvider: vi.fn(), + JsonRpcProvider: vi.fn(), + formatEther: vi.fn().mockReturnValue('1.0'), + parseUnits: vi.fn(), + formatUnits: vi.fn() + } +}) + +describe('EVMEthersClient', () => { + let client: EVMEthersClient + + beforeEach(() => { + vi.clearAllMocks() + client = new EVMEthersClient() + const optionsWithEthersConfig = { + ...mockOptions, + ethersConfig: mockCreateEthersConfig() + } + client.construct(mockAppKit, optionsWithEthersConfig) + }) + + afterEach(() => { + vi.clearAllMocks() + }) + + describe('EthersClient - Initialization', () => { + it('should initialize with default values', () => { + expect(client.chainNamespace).toBe('eip155') + expect(client.adapterType).toBe('ethers') + }) + + it('should set caipNetworks to provided caipNetworks options', () => { + expect(client.caipNetworks).toEqual(mockOptions.caipNetworks) + }) + + it('should set defaultNetwork to first caipNetwork option', () => { + expect(client.defaultCaipNetwork).toEqual(mockOptions.caipNetworks[0]) + }) + + it('should create ethers config', () => { + expect(client['ethersConfig']).toBeDefined() + }) + }) + + describe('EthersClient - Networks', () => { + const mockProvider = { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + } + + beforeEach(() => { + vi.spyOn(ProviderUtil, 'getProvider').mockReturnValue(mockProvider) + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'injected', + solana: undefined + }) + }) + + it('should switch network for injected provider', async () => { + const newNetwork = { + id: 'eip155:137', + name: 'Polygon', + chainId: '137', + rpcUrl: 'https://polygon-rpc.com' + } as unknown as CaipNetwork + + mockProvider.request.mockResolvedValueOnce(null) + + await client.switchNetwork(newNetwork) + + expect(mockProvider.request).toHaveBeenCalledWith( + expect.objectContaining({ + method: 'wallet_switchEthereumChain', + params: expect.arrayContaining([ + expect.objectContaining({ + chainId: expect.stringMatching(/^0x/) + }) + ]) + }) + ) + expect(mockAppKit.setCaipNetwork).toHaveBeenCalledWith(newNetwork) + }) + + it('should add network if not recognized by wallet', async () => { + const newNetwork = { + id: 'eip155:42161', + name: 'Arbitrum One', + chainId: '42161', + rpcUrl: 'https://arb1.arbitrum.io/rpc' + } as unknown as CaipNetwork + + const switchError = { code: 4902 } + mockProvider.request.mockRejectedValueOnce(switchError) + mockProvider.request.mockResolvedValueOnce(null) + + await client.switchNetwork(newNetwork) + + expect(mockProvider.request).toHaveBeenCalledWith( + expect.objectContaining({ + method: 'wallet_addEthereumChain', + params: expect.arrayContaining([ + expect.objectContaining({ + chainId: expect.stringMatching(/^0x/) + }) + ]) + }) + ) + }) + + it('should throw error if switching fails', async () => { + const newNetwork = { + id: 'eip155:56', + name: 'Binance Smart Chain', + chainId: '56', + rpcUrl: 'https://bsc-dataseed.binance.org' + } as unknown as CaipNetwork + + const switchError = new Error('User rejected the request') + mockProvider.request.mockRejectedValueOnce(switchError) + + await expect(client.switchNetwork(newNetwork)).rejects.toThrow('Chain is not supported') + }) + + it('should use universal adapter for WalletConnect', async () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'walletConnect', + solana: undefined + }) + + const newNetwork = { + id: 'eip155:10', + name: 'Optimism', + chainId: '10', + rpcUrl: 'https://mainnet.optimism.io' + } as unknown as CaipNetwork + + await client.switchNetwork(newNetwork) + + expect( + mockAppKit.universalAdapter?.networkControllerClient.switchCaipNetwork + ).toHaveBeenCalledWith(newNetwork) + }) + + it('should set requested CAIP networks for each unique chain namespace', () => { + const caipNetworks = [mainnet, arbitrum, polygon] + + client['syncRequestedNetworks'](caipNetworks) + + expect(mockAppKit.setRequestedCaipNetworks).toHaveBeenCalledWith( + [mainnet, arbitrum, polygon], + 'eip155' + ) + }) + }) + + describe('EthersClient - Auth Connector', () => { + it('should sync auth connector', async () => { + const projectId = 'test-project-id' + + await client['syncAuthConnector'](projectId, true) + + expect(mockAppKit.addConnector).toHaveBeenCalledWith({ + id: ConstantsUtil.AUTH_CONNECTOR_ID, + type: 'AUTH', + name: 'Auth', + provider: expect.any(Object), + chain: 'eip155' + }) + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + }) + + describe('Auth Connector Handle Requests', () => { + beforeEach(() => { + client['appKit'] = mockAppKit + }) + + it('should handle RPC request correctly when modal is closed', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(false) + client['handleAuthRpcRequest']() + expect(mockAppKit.open).toHaveBeenCalledWith({ view: 'ApproveTransaction' }) + }) + + it('should handle RPC request correctly when modal is open and transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + vi.spyOn(mockAppKit, 'isTransactionShouldReplaceView').mockReturnValue(true) + client['handleAuthRpcRequest']() + expect(mockAppKit.replace).toHaveBeenCalledWith('ApproveTransaction') + }) + + it('should handle invalid auth request', () => { + vi.useFakeTimers() + client['handleInvalidAuthRequest']() + expect(mockAppKit.open).toHaveBeenCalled() + vi.advanceTimersByTime(300) + expect(mockAppKit.showErrorMessage).toHaveBeenCalledWith('RPC method not allowed') + vi.useRealTimers() + }) + + it('should handle auth RPC error when modal is open and transaction stack is empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(true) + client['handleAuthRpcError']() + expect(mockAppKit.close).toHaveBeenCalled() + }) + + it('should handle auth RPC error when modal is open and transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + client['handleAuthRpcError']() + expect(mockAppKit.popTransactionStack).toHaveBeenCalledWith(true) + }) + + it('should handle auth RPC success when transaction stack is empty', () => { + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(true) + client['handleAuthRpcSuccess']() + expect(mockAppKit.close).toHaveBeenCalled() + }) + + it('should handle auth RPC success when transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + client['handleAuthRpcSuccess']() + expect(mockAppKit.popTransactionStack).toHaveBeenCalledWith(true) + }) + + it('should handle auth not connected', () => { + client['handleAuthNotConnected']() + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(false, 'eip155') + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + }) + + it('should handle auth is connected', () => { + const preferredAccountType = 'eoa' + client['handleAuthIsConnected'](preferredAccountType) + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith( + preferredAccountType, + 'eip155' + ) + }) + + it('should handle auth set preferred account', async () => { + const address = '0x1234567890123456789012345678901234567890' + const type = 'eoa' + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + client['caipNetworks'] = [mainnet] + + vi.spyOn(client as any, 'syncAccount').mockResolvedValue(undefined) + + await client['handleAuthSetPreferredAccount'](address, type) + + expect(mockAppKit.setLoading).toHaveBeenCalledWith(true) + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith(address, 'eip155') + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith(type, 'eip155') + + await new Promise(resolve => setImmediate(resolve)) + + expect(mockAppKit.setLoading).toHaveBeenLastCalledWith(false) + }, 300) + }) + + describe('setAuthConnector', () => { + beforeEach(() => { + client['appKit'] = mockAppKit + client['authProvider'] = mockAuthConnector as any + + vi.mocked(ProviderUtil.setProvider).mockClear() + vi.mocked(ProviderUtil.setProviderId).mockClear() + }) + + it('should set auth provider and update appKit state', async () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + const mockChainId = 1 + const mockSmartAccountDeployed = true + const mockPreferredAccountType = 'eoa' + + mockAuthConnector.connect.mockResolvedValueOnce({ + address: mockAddress, + chainId: mockChainId, + smartAccountDeployed: mockSmartAccountDeployed, + preferredAccountType: mockPreferredAccountType, + accounts: [] + }) + + mockAuthConnector.getSmartAccountEnabledNetworks.mockResolvedValueOnce({ + smartAccountEnabledNetworks: [1, 137] + }) + + await client['setAuthProvider']() + + expect(mockAppKit.setSmartAccountEnabledNetworks).toHaveBeenCalledWith([1, 137], 'eip155') + expect(mockAppKit.setAllAccounts).toHaveBeenCalledWith( + [{ address: mockAddress, type: mockPreferredAccountType }], + 'eip155' + ) + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith( + `eip155:${mockChainId}:${mockAddress}`, + 'eip155' + ) + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith( + mockPreferredAccountType, + 'eip155' + ) + expect(mockAppKit.setSmartAccountDeployed).toHaveBeenCalledWith( + mockSmartAccountDeployed, + 'eip155' + ) + expect(ProviderUtil.setProvider).toHaveBeenCalledWith('eip155', expect.any(Object)) + expect(ProviderUtil.setProviderId).toHaveBeenCalledWith( + 'eip155', + ConstantsUtil.AUTH_CONNECTOR_ID + ) + }) + }) + }) + + describe('EthersClient - Sync Connectors', () => { + it('should handle sync EIP-6963 connector', () => { + const mockEIP6963Event: CustomEventInit = { + detail: { + info: { + uuid: 'mock-uuid', + name: 'MockWallet', + icon: 'mock-icon-url', + rdns: 'com.mockwallet' + }, + provider: { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn(), + emit: function (event: string): void { + throw new Error(event) + } + } + } + } + + client['eip6963EventHandler'](mockEIP6963Event) + + expect(mockAppKit.addConnector).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'eip6963', + name: 'MockWallet' + }) + ) + }) + it('should sync injected connector when config.injected is true', () => { + const config = { injected: true, coinbase: false, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'injected', + name: 'Injected', + type: 'INJECTED', + chain: 'eip155' + }) + ]) + }) + + it('should sync coinbase connector when config.coinbase is true', () => { + const config = { injected: false, coinbase: true, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'coinbaseWallet', + name: 'Coinbase', + type: 'EXTERNAL', + chain: 'eip155' + }) + ]) + }) + + it('should sync both connectors when both are true in config', () => { + const config = { injected: true, coinbase: true, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'injected', + name: 'Injected', + type: 'INJECTED', + chain: 'eip155' + }), + expect.objectContaining({ + id: 'coinbaseWallet', + name: 'Coinbase', + type: 'EXTERNAL', + chain: 'eip155' + }) + ]) + }) + + it('should not sync any connectors when both are false in config', () => { + const config = { injected: false, coinbase: false, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([]) + }) + }) + + describe('EthersClient - State Subscription', () => { + it('should subscribe to state changes', () => { + const mockCallback = vi.fn() + client.subscribeState(mockCallback) + + expect(mockAppKit.subscribeState).toHaveBeenCalled() + }) + }) + + describe('EthersClient - setProvider', () => { + beforeEach(() => { + vi.spyOn(SafeLocalStorage, 'setItem') + vi.spyOn(EthersHelpersUtil, 'getUserInfo').mockResolvedValue({ + addresses: ['0x1234567890123456789012345678901234567890'], + chainId: 1 + }) + }) + + it('should set provider for non-auth providers', async () => { + const mockProvider = { request: vi.fn() } + await client['setProvider'](mockProvider as any, 'injected', 'MetaMask') + + expect(SafeLocalStorage.setItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID, 'injected') + expect(SafeLocalStorage.setItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_NAME, 'MetaMask') + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setCaipAddress).toHaveBeenCalled() + expect(ProviderUtil.setProviderId).toHaveBeenCalledWith('eip155', 'injected') + expect(ProviderUtil.setProvider).toHaveBeenCalledWith('eip155', mockProvider) + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setAllAccounts).toHaveBeenCalled() + }) + }) + + describe('EthersClient - setupProviderListeners', () => { + let mockProvider: any + + beforeEach(() => { + mockProvider = { + on: vi.fn(), + removeListener: vi.fn() + } + }) + + it('should set up listeners for non-auth providers', () => { + client['setupProviderListeners'](mockProvider, 'injected') + + expect(mockProvider.on).toHaveBeenCalledWith('disconnect', expect.any(Function)) + expect(mockProvider.on).toHaveBeenCalledWith('accountsChanged', expect.any(Function)) + expect(mockProvider.on).toHaveBeenCalledWith('chainChanged', expect.any(Function)) + }) + + it('should handle disconnect event', async () => { + vi.spyOn(SafeLocalStorage, 'removeItem') + client['setupProviderListeners'](mockProvider, 'injected') + + const disconnectHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'disconnect' + )[1] + await disconnectHandler() + + expect(SafeLocalStorage.removeItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(mockProvider.removeListener).toHaveBeenCalledTimes(3) + }) + + it('should handle accountsChanged event', async () => { + client['setupProviderListeners'](mockProvider, 'injected') + + const accountsChangedHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'accountsChanged' + )[1] + await accountsChangedHandler(['0x1234567890123456789012345678901234567890']) + + expect(mockAppKit.setCaipAddress).toHaveBeenCalled() + }) + + it('should handle chainChanged event', async () => { + client['setupProviderListeners'](mockProvider, 'injected') + + const chainChangedHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'chainChanged' + )[1] + await chainChangedHandler('0x1') + + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + }) + }) + + describe('EthersClient - checkActiveProviders', () => { + let mockInjectedProvider: any + + beforeEach(() => { + mockInjectedProvider = { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + } + + vi.spyOn(SafeLocalStorage, 'getItem').mockImplementation(key => { + if (key === WcConstantsUtil.WALLET_ID) return ConstantsUtil.INJECTED_CONNECTOR_ID + if (key === WcConstantsUtil.WALLET_NAME) return 'MetaMask' + return null + }) + + vi.spyOn(client as any, 'setProvider').mockImplementation(() => Promise.resolve()) + vi.spyOn(client as any, 'setupProviderListeners').mockImplementation(() => {}) + }) + + it('should check and set active provider for injected wallet', () => { + const mockConfig = { + injected: mockInjectedProvider, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).toHaveBeenCalledWith( + mockInjectedProvider, + ConstantsUtil.INJECTED_CONNECTOR_ID + ) + expect(client['setupProviderListeners']).toHaveBeenCalledWith( + mockInjectedProvider, + ConstantsUtil.INJECTED_CONNECTOR_ID + ) + }) + + it('should not set provider when wallet ID is not found', () => { + vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue(null) + + const mockConfig = { + injected: mockInjectedProvider, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).not.toHaveBeenCalled() + expect(client['setupProviderListeners']).not.toHaveBeenCalled() + }) + + it('should not set provider when injected provider is not available', () => { + const mockConfig = { + injected: undefined, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).not.toHaveBeenCalled() + expect(client['setupProviderListeners']).not.toHaveBeenCalled() + }) + }) + + describe('EthersClient - syncAccount', () => { + beforeEach(() => { + vi.spyOn(client as any, 'syncConnectedWalletInfo').mockImplementation(() => {}) + vi.spyOn(client as any, 'syncProfile').mockImplementation(() => Promise.resolve()) + vi.spyOn(client as any, 'syncBalance').mockImplementation(() => Promise.resolve()) + }) + + it('should sync account when connected and address is provided', async () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + const mockCaipNetwork = mainnet + + vi.spyOn(mockAppKit, 'getIsConnectedState').mockReturnValue(true) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mockCaipNetwork) + vi.spyOn(mockAppKit, 'getPreferredAccountType').mockReturnValue('eoa') + + await client['syncAccount']({ address: mockAddress }) + + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith(`eip155:1:${mockAddress}`, 'eip155') + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith('eoa', 'eip155') + expect(mockAppKit.setAddressExplorerUrl).toHaveBeenCalledWith( + `https://etherscan.io/address/${mockAddress}`, + 'eip155' + ) + expect(client['syncConnectedWalletInfo']).toHaveBeenCalled() + expect(client['syncProfile']).toHaveBeenCalledWith(mockAddress) + expect(client['syncBalance']).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setApprovedCaipNetworksData).toHaveBeenCalledWith('eip155') + }) + + it('should reset connection when not connected', async () => { + vi.spyOn(mockAppKit, 'getIsConnectedState').mockReturnValue(false) + + await client['syncAccount']({}) + + expect(mockAppKit.resetWcConnection).toHaveBeenCalled() + expect(mockAppKit.resetNetwork).toHaveBeenCalled() + expect(mockAppKit.setAllAccounts).toHaveBeenCalledWith([], 'eip155') + }) + }) + + describe('EthersClient - syncProfile', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + beforeEach(() => { + vi.spyOn(client as any, 'syncWalletConnectName').mockImplementation(() => Promise.resolve()) + }) + + it('should set profile from fetchIdentity when successful', async () => { + const mockIdentity = { name: 'Test Name', avatar: 'https://example.com/avatar.png' } + vi.spyOn(mockAppKit, 'fetchIdentity').mockResolvedValue(mockIdentity) + + await client['syncProfile'](mockAddress) + + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('Test Name', 'eip155') + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith( + 'https://example.com/avatar.png', + 'eip155' + ) + }) + + it('should use ENS for mainnet when fetchIdentity fails', async () => { + vi.spyOn(mockAppKit, 'fetchIdentity').mockRejectedValue(new Error('Fetch failed')) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + + const mockEnsProvider = { + lookupAddress: vi.fn().mockResolvedValue('test.eth'), + getAvatar: vi.fn().mockResolvedValue('https://example.com/ens-avatar.png') + } + vi.mocked(InfuraProvider).mockImplementation(() => mockEnsProvider as any) + + await client['syncProfile'](mockAddress) + + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('test.eth', 'eip155') + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith( + 'https://example.com/ens-avatar.png', + 'eip155' + ) + }) + + it('should fallback to syncWalletConnectName for non-mainnet chains', async () => { + vi.spyOn(mockAppKit, 'fetchIdentity').mockRejectedValue(new Error('Fetch failed')) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(polygon) // Polygon + + await client['syncProfile'](mockAddress) + + expect(client['syncWalletConnectName']).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith(null, 'eip155') + }) + }) + + describe('EthersClient - syncBalance', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + it('should set balance when caipNetwork is available', async () => { + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + + const mockJsonRpcProvider = { + getBalance: vi.fn().mockResolvedValue(BigInt(1000000000000000000)) // 1 ETH in wei + } + vi.mocked(JsonRpcProvider).mockImplementation(() => mockJsonRpcProvider as any) + + await client['syncBalance'](mockAddress) + + expect(JsonRpcProvider).toHaveBeenCalledWith(mainnet.rpcUrl, { + chainId: 1, + name: 'Ethereum' + }) + expect(mockJsonRpcProvider.getBalance).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setBalance).toHaveBeenCalledWith('1.0', 'ETH', 'eip155') + }) + + it('should not set balance when caipNetwork is unavailable', async () => { + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(undefined) + + await client['syncBalance'](mockAddress) + + expect(JsonRpcProvider).not.toHaveBeenCalled() + expect(mockAppKit.setBalance).not.toHaveBeenCalled() + }) + }) + + describe('EthersClient - syncWalletConnectName', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + it('should set profile name when WalletConnect name is available', async () => { + const mockWcNames = [ + { name: 'WC Wallet', registered: 1, updated: 1234567890, addresses: [], attributes: {} } + ] as unknown as BlockchainApiLookupEnsName[] + vi.spyOn(mockAppKit, 'getWalletConnectName').mockResolvedValue(mockWcNames) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('WC Wallet', 'eip155') + }) + + it('should set profile name to null when no WalletConnect name is available', async () => { + vi.spyOn(mockAppKit, 'getWalletConnectName').mockResolvedValue([]) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith(null, 'eip155') + }) + + it('should set profile name to null when getWalletConnectName throws an error', async () => { + vi.spyOn(mockAppKit, 'getWalletConnectName').mockRejectedValue(new Error('API Error')) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith(null, 'eip155') + }) + }) + + describe('EthersClient - syncConnectedWalletInfo', () => { + beforeEach(() => { + vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue('MetaMask') + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'injected', + solana: undefined + }) + }) + it('should set connected wallet info for EIP6963 provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.EIP6963_CONNECTOR_ID, + solana: undefined + } as Record) + client['EIP6963Providers'] = [ + { + info: { name: 'MetaMask', icon: 'icon-url', uuid: 'test-uuid', rdns: 'com.metamask' }, + provider: {} as any + } + ] + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { name: 'MetaMask', icon: 'icon-url', uuid: 'test-uuid', rdns: 'com.metamask' }, + 'eip155' + ) + }) + + it('should set connected wallet info for WalletConnect provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID, + solana: undefined + } as Record) + const mockProvider = { + session: { + peer: { + metadata: { + name: 'WC Wallet', + icons: ['wc-icon-url'] + } + } + } + } + vi.spyOn(ProviderUtil, 'getProvider').mockReturnValue(mockProvider as any) + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { + name: 'WC Wallet', + icon: 'wc-icon-url', + icons: ['wc-icon-url'] + }, + 'eip155' + ) + }) + + it('should set connected wallet info for Coinbase provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.COINBASE_SDK_CONNECTOR_ID, + solana: undefined + } as Record) + vi.spyOn(mockAppKit, 'getConnectors').mockReturnValue([ + { + id: ConstantsUtil.COINBASE_SDK_CONNECTOR_ID, + type: 'INJECTED', + chain: 'eip155' + } + ]) + vi.spyOn(mockAppKit, 'getConnectorImage').mockReturnValue('coinbase-icon-url') + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { name: 'Coinbase Wallet', icon: 'coinbase-icon-url' }, + 'eip155' + ) + }) + }) +}) diff --git a/packages/adapters/ethers/src/tests/mocks/AppKit.ts b/packages/adapters/ethers/src/tests/mocks/AppKit.ts new file mode 100644 index 0000000000..49a12acd41 --- /dev/null +++ b/packages/adapters/ethers/src/tests/mocks/AppKit.ts @@ -0,0 +1,59 @@ +import type { AppKit } from '@web3modal/base' +import { mainnet } from '@web3modal/base/chains' +import { vi } from 'vitest' + +export const mockAppKit = { + setIsConnected: vi.fn(), + getIsConnectedState: vi.fn().mockReturnValue(true), + setCaipAddress: vi.fn(), + getCaipAddress: vi.fn().mockReturnValue('eip155:1:0xE62a3eD41B21447b67a63880607CD2E746A0E35d'), + setRequestedCaipNetworks: vi.fn(), + setConnectors: vi.fn(), + getConnectors: vi.fn().mockReturnValue([]), + setConnectedWalletInfo: vi.fn(), + resetWcConnection: vi.fn(), + resetNetwork: vi.fn(), + resetAccount: vi.fn(), + setPreferredAccountType: vi.fn(), + getPreferredAccountType: vi.fn().mockReturnValue('eoa'), + setEIP6963Enabled: vi.fn(), + getCaipNetwork: vi.fn().mockReturnValue(mainnet), + subscribeState: vi.fn().mockImplementation(callback => vi.fn(() => callback({}))), + setApprovedCaipNetworksData: vi.fn(), + getAddress: vi.fn().mockReturnValue('0xE62a3eD41B21447b67a63880607CD2E746A0E35d'), + addConnector: vi.fn(), + setCaipNetwork: vi.fn(), + setLoading: vi.fn(), + setSmartAccountEnabledNetworks: vi.fn(), + setAllAccounts: vi.fn(), + setStatus: vi.fn(), + setSmartAccountDeployed: vi.fn(), + open: vi.fn(), + isOpen: vi.fn().mockReturnValue(false), + isTransactionStackEmpty: vi.fn().mockReturnValue(true), + isTransactionShouldReplaceView: vi.fn().mockReturnValue(false), + replace: vi.fn(), + redirect: vi.fn(), + showErrorMessage: vi.fn(), + close: vi.fn(), + popTransactionStack: vi.fn(), + setProfileName: vi.fn(), + setProfileImage: vi.fn(), + setAddressExplorerUrl: vi.fn(), + setBalance: vi.fn(), + getWalletConnectName: vi.fn().mockResolvedValue([]), + fetchIdentity: vi.fn().mockResolvedValue(null), + setClientId: vi.fn(), + universalAdapter: { + connectionControllerClient: { + connectWalletConnect: vi.fn(), + disconnect: vi.fn() + }, + networkControllerClient: { + switchCaipNetwork: vi.fn() + } + }, + getConnectorImage: vi.fn() +} as unknown as AppKit + +export default mockAppKit diff --git a/packages/adapters/ethers/src/tests/mocks/AuthConnector.ts b/packages/adapters/ethers/src/tests/mocks/AuthConnector.ts new file mode 100644 index 0000000000..07f99eafaa --- /dev/null +++ b/packages/adapters/ethers/src/tests/mocks/AuthConnector.ts @@ -0,0 +1,28 @@ +import { vi } from 'vitest' + +export const mockAuthConnector = { + onRpcRequest: vi.fn(), + onRpcError: vi.fn(), + onRpcSuccess: vi.fn(), + onNotConnected: vi.fn(), + onIsConnected: vi.fn(), + onSetPreferredAccount: vi.fn(), + connect: vi.fn().mockResolvedValue({ + address: '0x1234567890123456789012345678901234567890', + chainId: 1, + smartAccountDeployed: true, + preferredAccountType: 'eoa', + accounts: [] + }), + getSmartAccountEnabledNetworks: vi.fn().mockResolvedValue({ + smartAccountEnabledNetworks: [1, 137] + }), + on: vi.fn(), + removeListener: vi.fn(), + getLoginEmailUsed: vi.fn().mockReturnValue(false), + isConnected: vi.fn().mockResolvedValue({ isConnected: false }), + disconnect: vi.fn(), + switchNetwork: vi.fn(), + rejectRpcRequests: vi.fn(), + request: vi.fn() +} diff --git a/packages/adapters/ethers/src/tests/mocks/EthersConfig.ts b/packages/adapters/ethers/src/tests/mocks/EthersConfig.ts new file mode 100644 index 0000000000..3f5f1cf999 --- /dev/null +++ b/packages/adapters/ethers/src/tests/mocks/EthersConfig.ts @@ -0,0 +1,34 @@ +import type { ProviderType } from '@web3modal/scaffold-utils/ethers' +import { vi } from 'vitest' + +export const mockEthersConfig = { + metadata: { + name: 'Mock dApp', + description: 'A mock dApp for testing', + url: 'https://mockdapp.com', + icons: ['https://mockdapp.com/icon.png'] + }, + injected: { + // Mock injected provider + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + }, + coinbase: { + // Mock Coinbase provider + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + }, + EIP6963: true +} as unknown as ProviderType + +// Mock function to create ethers config +export function mockCreateEthersConfig(): ProviderType { + return { + ...mockEthersConfig, + metadata: { + ...mockEthersConfig.metadata + } + } +} diff --git a/packages/adapters/ethers/src/tests/mocks/Options.ts b/packages/adapters/ethers/src/tests/mocks/Options.ts new file mode 100644 index 0000000000..a1aa8a60ce --- /dev/null +++ b/packages/adapters/ethers/src/tests/mocks/Options.ts @@ -0,0 +1,14 @@ +import type { AppKitOptions, ChainAdapter } from '@web3modal/base' +import { mainnet, solana } from '@web3modal/base/chains' + +export const mockOptions: AppKitOptions = { + projectId: 'test-project-id', + adapters: [{ chainNamespace: 'eip155' } as unknown as ChainAdapter], + caipNetworks: [mainnet, solana], + metadata: { + name: 'Test App', + description: 'Test App Description', + url: 'https://test-app.com', + icons: ['https://test-app.com/icon.png'] + } +} as unknown as AppKitOptions diff --git a/packages/adapters/ethers5/package.json b/packages/adapters/ethers5/package.json index 064bd43a40..c1f54085bd 100644 --- a/packages/adapters/ethers5/package.json +++ b/packages/adapters/ethers5/package.json @@ -13,7 +13,8 @@ "build": "tsc --build tsconfig.build.json", "watch": "tsc --watch", "typecheck": "tsc --noEmit", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx" + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "test": "vitest run --coverage.enabled=true --coverage.reporter=json --coverage.reporter=json-summary --coverage.reportOnFailure=true" }, "dependencies": { "@walletconnect/utils": "2.14.0", diff --git a/packages/adapters/ethers5/src/client.ts b/packages/adapters/ethers5/src/client.ts index 6e355d9265..c880d5aee4 100644 --- a/packages/adapters/ethers5/src/client.ts +++ b/packages/adapters/ethers5/src/client.ts @@ -70,7 +70,7 @@ interface Info { rdns: string } -interface EIP6963ProviderDetail { +export interface EIP6963ProviderDetail { info: Info provider: Provider } @@ -80,8 +80,6 @@ export class EVMEthers5Client { private EIP6963Providers: EIP6963ProviderDetail[] = [] - private caipNetworks: CaipNetwork[] = [] - private ethersConfig?: AdapterOptions['ethersConfig'] private authProvider?: W3mFrameProvider @@ -89,6 +87,8 @@ export class EVMEthers5Client { // -- Public variables -------------------------------------------------------- public options: AppKitOptions | undefined = undefined + public caipNetworks: CaipNetwork[] = [] + public chainNamespace: ChainNamespace = CommonConstantsUtil.CHAIN.EVM public networkControllerClient?: NetworkControllerClient @@ -193,7 +193,7 @@ export class EVMEthers5Client { this.appKit = appKit this.options = options this.caipNetworks = options.caipNetworks - this.defaultCaipNetwork = options.defaultCaipNetwork + this.defaultCaipNetwork = options.defaultCaipNetwork || this.caipNetworks[0] this.tokens = HelpersUtil.getCaipTokens(options.tokens) this.ethersConfig = this.createEthersConfig(options) @@ -1084,8 +1084,8 @@ export class EVMEthers5Client { this.appKit?.setConnectors(w3mConnectors) } - private async syncAuthConnector(projectId: string) { - if (typeof window !== 'undefined') { + private async syncAuthConnector(projectId: string, bypassWindowCheck = false) { + if (bypassWindowCheck || typeof window !== 'undefined') { this.authProvider = new W3mFrameProvider(projectId) this.appKit?.addConnector({ diff --git a/packages/adapters/ethers5/src/tests/client.test.ts b/packages/adapters/ethers5/src/tests/client.test.ts new file mode 100644 index 0000000000..e56acbafa2 --- /dev/null +++ b/packages/adapters/ethers5/src/tests/client.test.ts @@ -0,0 +1,901 @@ +import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest' +import { EVMEthers5Client } from '../client' +import type { EIP6963ProviderDetail } from '../client' +import { mockOptions } from './mocks/Options' +import { mockCreateEthersConfig } from './mocks/EthersConfig' +import mockAppKit from './mocks/AppKit' +import { mockAuthConnector } from './mocks/AuthConnector' +import { + EthersHelpersUtil, + type ProviderId, + type ProviderType +} from '@web3modal/scaffold-utils/ethers' +import { ConstantsUtil } from '@web3modal/scaffold-utils' +import { arbitrum, mainnet, polygon } from '@web3modal/base/chains' +import { ProviderUtil } from '@web3modal/base/store' +import { SafeLocalStorage } from '@web3modal/common' +import { WcConstantsUtil, type BlockchainApiLookupEnsName } from '@web3modal/base' +import { ethers } from 'ethers5' +import type { CaipNetwork, ChainNamespace } from '@web3modal/common' + +vi.mock('@web3modal/wallet', () => ({ + W3mFrameProvider: vi.fn().mockImplementation(() => mockAuthConnector), + W3mFrameHelpers: { + checkIfRequestExists: vi.fn(), + checkIfRequestIsAllowed: vi.fn() + }, + W3mFrameRpcConstants: { + RPC_METHOD_NOT_ALLOWED_UI_MESSAGE: 'RPC method not allowed' + } +})) + +vi.mock('@web3modal/scaffold-utils', () => { + const INJECTED_CONNECTOR_ID = 'injected' + const COINBASE_SDK_CONNECTOR_ID = 'coinbaseWallet' + const EIP6963_CONNECTOR_ID = 'eip6963' + const WALLET_CONNECT_CONNECTOR_ID = 'walletConnect' + const AUTH_CONNECTOR_ID = 'w3mAuth' + return { + PresetsUtil: { + ConnectorTypesMap: { + [INJECTED_CONNECTOR_ID]: 'INJECTED', + [COINBASE_SDK_CONNECTOR_ID]: 'EXTERNAL', + [EIP6963_CONNECTOR_ID]: 'INJECTED' + }, + ConnectorExplorerIds: { + [INJECTED_CONNECTOR_ID]: 'injected-explorer', + [COINBASE_SDK_CONNECTOR_ID]: 'coinbase-explorer', + [EIP6963_CONNECTOR_ID]: 'eip6963-explorer' + }, + ConnectorImageIds: { + [INJECTED_CONNECTOR_ID]: 'injected-image', + [COINBASE_SDK_CONNECTOR_ID]: 'coinbase-image', + [EIP6963_CONNECTOR_ID]: 'eip6963-image' + }, + ConnectorNamesMap: { + [INJECTED_CONNECTOR_ID]: 'Injected', + [COINBASE_SDK_CONNECTOR_ID]: 'Coinbase', + [EIP6963_CONNECTOR_ID]: 'EIP6963' + }, + WalletConnectRpcChainIds: [1, 137, 10, 42161, 56, 43114, 250, 25, 1313161554, 1284] + }, + ConstantsUtil: { + INJECTED_CONNECTOR_ID, + COINBASE_SDK_CONNECTOR_ID, + EIP6963_CONNECTOR_ID, + WALLET_CONNECT_CONNECTOR_ID, + AUTH_CONNECTOR_ID, + EIP155: 'eip155' + }, + HelpersUtil: { + getCaipTokens: vi.fn().mockReturnValue([]) + } + } +}) + +vi.mock('@web3modal/base/store', () => ({ + ProviderUtil: { + setProvider: vi.fn(), + setProviderId: vi.fn(), + state: { + providerIds: {} + }, + getProvider: vi.fn() + } +})) + +vi.mock('ethers5', async () => { + return { + ethers: { + providers: { + InfuraProvider: vi.fn(), + JsonRpcProvider: vi.fn() + }, + utils: { + formatEther: vi.fn().mockReturnValue('1.0'), + parseUnits: vi.fn(), + formatUnits: vi.fn() + } + } + } +}) + +describe('EVMEthersClient', () => { + let client: EVMEthers5Client + + beforeEach(() => { + vi.clearAllMocks() + client = new EVMEthers5Client() + const optionsWithEthersConfig = { + ...mockOptions, + ethersConfig: mockCreateEthersConfig() + } + client.construct(mockAppKit, optionsWithEthersConfig) + }) + + afterEach(() => { + vi.clearAllMocks() + }) + + describe('EthersClient - Initialization', () => { + it('should initialize with default values', () => { + expect(client.chainNamespace).toBe('eip155') + expect(client.adapterType).toBe('ethers') + }) + + it('should set caipNetworks to provided caipNetworks options', () => { + expect(client.caipNetworks).toEqual(mockOptions.caipNetworks) + }) + + it('should set defaultNetwork to first caipNetwork option', () => { + expect(client.defaultCaipNetwork).toEqual(mockOptions.caipNetworks[0]) + }) + + it('should create ethers config', () => { + expect(client['ethersConfig']).toBeDefined() + }) + }) + + describe('EthersClient - Networks', () => { + const mockProvider = { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + } + + beforeEach(() => { + vi.spyOn(ProviderUtil, 'getProvider').mockReturnValue(mockProvider) + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'injected', + solana: undefined + }) + }) + + it('should switch network for injected provider', async () => { + const newNetwork = { + id: 'eip155:137', + name: 'Polygon', + chainId: '137', + rpcUrl: 'https://polygon-rpc.com' + } as unknown as CaipNetwork + + mockProvider.request.mockResolvedValueOnce(null) + + await client.switchNetwork(newNetwork) + + expect(mockProvider.request).toHaveBeenCalledWith( + expect.objectContaining({ + method: 'wallet_switchEthereumChain', + params: expect.arrayContaining([ + expect.objectContaining({ + chainId: expect.stringMatching(/^0x/) + }) + ]) + }) + ) + expect(mockAppKit.setCaipNetwork).toHaveBeenCalledWith(newNetwork) + }) + + it('should add network if not recognized by wallet', async () => { + const newNetwork = { + id: 'eip155:42161', + name: 'Arbitrum One', + chainId: '42161', + rpcUrl: 'https://arb1.arbitrum.io/rpc' + } as unknown as CaipNetwork + + const switchError = { code: 4902 } + mockProvider.request.mockRejectedValueOnce(switchError) + mockProvider.request.mockResolvedValueOnce(null) + + await client.switchNetwork(newNetwork) + + expect(mockProvider.request).toHaveBeenCalledWith( + expect.objectContaining({ + method: 'wallet_addEthereumChain', + params: expect.arrayContaining([ + expect.objectContaining({ + chainId: expect.stringMatching(/^0x/) + }) + ]) + }) + ) + }) + + it('should throw error if switching fails', async () => { + const newNetwork = { + id: 'eip155:56', + name: 'Binance Smart Chain', + chainId: '56', + rpcUrl: 'https://bsc-dataseed.binance.org' + } as unknown as CaipNetwork + + const switchError = new Error('User rejected the request') + mockProvider.request.mockRejectedValueOnce(switchError) + + await expect(client.switchNetwork(newNetwork)).rejects.toThrow('Chain is not supported') + }) + + it('should use universal adapter for WalletConnect', async () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'walletConnect', + solana: undefined + }) + + const newNetwork = { + id: 'eip155:10', + name: 'Optimism', + chainId: '10', + rpcUrl: 'https://mainnet.optimism.io' + } as unknown as CaipNetwork + + await client.switchNetwork(newNetwork) + + expect( + mockAppKit.universalAdapter?.networkControllerClient.switchCaipNetwork + ).toHaveBeenCalledWith(newNetwork) + }) + + it('should set requested CAIP networks for each unique chain namespace', () => { + const caipNetworks = [mainnet, arbitrum, polygon] + + client['syncRequestedNetworks'](caipNetworks) + + expect(mockAppKit.setRequestedCaipNetworks).toHaveBeenCalledWith( + [mainnet, arbitrum, polygon], + 'eip155' + ) + }) + }) + + describe('EthersClient - Auth Connector', () => { + it('should sync auth connector', async () => { + const projectId = 'test-project-id' + + await client['syncAuthConnector'](projectId, true) + + expect(mockAppKit.addConnector).toHaveBeenCalledWith({ + id: ConstantsUtil.AUTH_CONNECTOR_ID, + type: 'AUTH', + name: 'Auth', + provider: expect.any(Object), + chain: 'eip155' + }) + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + }) + + describe('Auth Connector Handle Requests', () => { + beforeEach(() => { + client['appKit'] = mockAppKit + }) + + it('should handle RPC request correctly when modal is closed', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(false) + client['handleAuthRpcRequest']() + expect(mockAppKit.open).toHaveBeenCalledWith({ view: 'ApproveTransaction' }) + }) + + it('should handle RPC request correctly when modal is open and transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + vi.spyOn(mockAppKit, 'isTransactionShouldReplaceView').mockReturnValue(true) + client['handleAuthRpcRequest']() + expect(mockAppKit.replace).toHaveBeenCalledWith('ApproveTransaction') + }) + + it('should handle invalid auth request', () => { + vi.useFakeTimers() + client['handleInvalidAuthRequest']() + expect(mockAppKit.open).toHaveBeenCalled() + vi.advanceTimersByTime(300) + expect(mockAppKit.showErrorMessage).toHaveBeenCalledWith('RPC method not allowed') + vi.useRealTimers() + }) + + it('should handle auth RPC error when modal is open and transaction stack is empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(true) + client['handleAuthRpcError']() + expect(mockAppKit.close).toHaveBeenCalled() + }) + + it('should handle auth RPC error when modal is open and transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isOpen').mockReturnValue(true) + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + client['handleAuthRpcError']() + expect(mockAppKit.popTransactionStack).toHaveBeenCalledWith(true) + }) + + it('should handle auth RPC success when transaction stack is empty', () => { + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(true) + client['handleAuthRpcSuccess']() + expect(mockAppKit.close).toHaveBeenCalled() + }) + + it('should handle auth RPC success when transaction stack is not empty', () => { + vi.spyOn(mockAppKit, 'isTransactionStackEmpty').mockReturnValue(false) + client['handleAuthRpcSuccess']() + expect(mockAppKit.popTransactionStack).toHaveBeenCalledWith(true) + }) + + it('should handle auth not connected', () => { + client['handleAuthNotConnected']() + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(false, 'eip155') + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + }) + + it('should handle auth is connected', () => { + const preferredAccountType = 'eoa' + client['handleAuthIsConnected'](preferredAccountType) + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setLoading).toHaveBeenCalledWith(false) + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith( + preferredAccountType, + 'eip155' + ) + }) + + it('should handle auth set preferred account', async () => { + const address = '0x1234567890123456789012345678901234567890' + const type = 'eoa' + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + client['caipNetworks'] = [mainnet] + + vi.spyOn(client as any, 'syncAccount').mockResolvedValue(undefined) + + await client['handleAuthSetPreferredAccount'](address, type) + + expect(mockAppKit.setLoading).toHaveBeenCalledWith(true) + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith(address, 'eip155') + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith(type, 'eip155') + + await new Promise(resolve => setImmediate(resolve)) + + expect(mockAppKit.setLoading).toHaveBeenLastCalledWith(false) + }, 300) + }) + + describe('setAuthConnector', () => { + beforeEach(() => { + client['appKit'] = mockAppKit + client['authProvider'] = mockAuthConnector as any + + vi.mocked(ProviderUtil.setProvider).mockClear() + vi.mocked(ProviderUtil.setProviderId).mockClear() + }) + + it('should set auth provider and update appKit state', async () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + const mockChainId = 1 + const mockSmartAccountDeployed = true + const mockPreferredAccountType = 'eoa' + + mockAuthConnector.connect.mockResolvedValueOnce({ + address: mockAddress, + chainId: mockChainId, + smartAccountDeployed: mockSmartAccountDeployed, + preferredAccountType: mockPreferredAccountType, + accounts: [] + }) + + mockAuthConnector.getSmartAccountEnabledNetworks.mockResolvedValueOnce({ + smartAccountEnabledNetworks: [1, 137] + }) + + await client['setAuthProvider']() + + expect(mockAppKit.setSmartAccountEnabledNetworks).toHaveBeenCalledWith([1, 137], 'eip155') + expect(mockAppKit.setAllAccounts).toHaveBeenCalledWith( + [{ address: mockAddress, type: mockPreferredAccountType }], + 'eip155' + ) + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith( + `eip155:${mockChainId}:${mockAddress}`, + 'eip155' + ) + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith( + mockPreferredAccountType, + 'eip155' + ) + expect(mockAppKit.setSmartAccountDeployed).toHaveBeenCalledWith( + mockSmartAccountDeployed, + 'eip155' + ) + expect(ProviderUtil.setProvider).toHaveBeenCalledWith('eip155', expect.any(Object)) + expect(ProviderUtil.setProviderId).toHaveBeenCalledWith( + 'eip155', + ConstantsUtil.AUTH_CONNECTOR_ID + ) + }) + }) + }) + + describe('EthersClient - Sync Connectors', () => { + it('should handle sync EIP-6963 connector', () => { + const mockEIP6963Event: CustomEventInit = { + detail: { + info: { + uuid: 'mock-uuid', + name: 'MockWallet', + icon: 'mock-icon-url', + rdns: 'com.mockwallet' + }, + provider: { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn(), + emit: function (event: string): void { + throw new Error(event) + } + } + } + } + + client['eip6963EventHandler'](mockEIP6963Event) + + expect(mockAppKit.addConnector).toHaveBeenCalledWith( + expect.objectContaining({ + id: 'eip6963', + name: 'MockWallet' + }) + ) + }) + it('should sync injected connector when config.injected is true', () => { + const config = { injected: true, coinbase: false, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'injected', + name: 'Injected', + type: 'INJECTED', + chain: 'eip155' + }) + ]) + }) + + it('should sync coinbase connector when config.coinbase is true', () => { + const config = { injected: false, coinbase: true, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'coinbaseWallet', + name: 'Coinbase', + type: 'EXTERNAL', + chain: 'eip155' + }) + ]) + }) + + it('should sync both connectors when both are true in config', () => { + const config = { injected: true, coinbase: true, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + expect.objectContaining({ + id: 'injected', + name: 'Injected', + type: 'INJECTED', + chain: 'eip155' + }), + expect.objectContaining({ + id: 'coinbaseWallet', + name: 'Coinbase', + type: 'EXTERNAL', + chain: 'eip155' + }) + ]) + }) + + it('should not sync any connectors when both are false in config', () => { + const config = { injected: false, coinbase: false, metadata: {} } + client['syncConnectors'](config as unknown as ProviderType) + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([]) + }) + }) + + describe('EthersClient - State Subscription', () => { + it('should subscribe to state changes', () => { + const mockCallback = vi.fn() + client.subscribeState(mockCallback) + + expect(mockAppKit.subscribeState).toHaveBeenCalled() + }) + }) + + describe('EthersClient - setProvider', () => { + beforeEach(() => { + vi.spyOn(SafeLocalStorage, 'setItem') + vi.spyOn(EthersHelpersUtil, 'getUserInfo').mockResolvedValue({ + addresses: ['0x1234567890123456789012345678901234567890'], + chainId: 1 + }) + }) + + it('should set provider for non-auth providers', async () => { + const mockProvider = { request: vi.fn() } + await client['setProvider'](mockProvider as any, 'injected', 'MetaMask') + + expect(SafeLocalStorage.setItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID, 'injected') + expect(SafeLocalStorage.setItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_NAME, 'MetaMask') + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + expect(mockAppKit.setCaipAddress).toHaveBeenCalled() + expect(ProviderUtil.setProviderId).toHaveBeenCalledWith('eip155', 'injected') + expect(ProviderUtil.setProvider).toHaveBeenCalledWith('eip155', mockProvider) + expect(mockAppKit.setStatus).toHaveBeenCalledWith('connected', 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setAllAccounts).toHaveBeenCalled() + }) + }) + + describe('EthersClient - setupProviderListeners', () => { + let mockProvider: any + + beforeEach(() => { + mockProvider = { + on: vi.fn(), + removeListener: vi.fn() + } + }) + + it('should set up listeners for non-auth providers', () => { + client['setupProviderListeners'](mockProvider, 'injected') + + expect(mockProvider.on).toHaveBeenCalledWith('disconnect', expect.any(Function)) + expect(mockProvider.on).toHaveBeenCalledWith('accountsChanged', expect.any(Function)) + expect(mockProvider.on).toHaveBeenCalledWith('chainChanged', expect.any(Function)) + }) + + it('should handle disconnect event', async () => { + vi.spyOn(SafeLocalStorage, 'removeItem') + client['setupProviderListeners'](mockProvider, 'injected') + + const disconnectHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'disconnect' + )[1] + await disconnectHandler() + + expect(SafeLocalStorage.removeItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(mockProvider.removeListener).toHaveBeenCalledTimes(3) + }) + + it('should handle accountsChanged event', async () => { + client['setupProviderListeners'](mockProvider, 'injected') + + const accountsChangedHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'accountsChanged' + )[1] + await accountsChangedHandler(['0x1234567890123456789012345678901234567890']) + + expect(mockAppKit.setCaipAddress).toHaveBeenCalled() + }) + + it('should handle chainChanged event', async () => { + client['setupProviderListeners'](mockProvider, 'injected') + + const chainChangedHandler = mockProvider.on.mock.calls.find( + (call: string[]) => call[0] === 'chainChanged' + )[1] + await chainChangedHandler('0x1') + + expect(mockAppKit.setCaipNetwork).toHaveBeenCalled() + }) + }) + + describe('EthersClient - checkActiveProviders', () => { + let mockInjectedProvider: any + + beforeEach(() => { + mockInjectedProvider = { + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + } + + vi.spyOn(SafeLocalStorage, 'getItem').mockImplementation(key => { + if (key === WcConstantsUtil.WALLET_ID) return ConstantsUtil.INJECTED_CONNECTOR_ID + if (key === WcConstantsUtil.WALLET_NAME) return 'MetaMask' + return null + }) + + vi.spyOn(client as any, 'setProvider').mockImplementation(() => Promise.resolve()) + vi.spyOn(client as any, 'setupProviderListeners').mockImplementation(() => {}) + }) + + it('should check and set active provider for injected wallet', () => { + const mockConfig = { + injected: mockInjectedProvider, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).toHaveBeenCalledWith( + mockInjectedProvider, + ConstantsUtil.INJECTED_CONNECTOR_ID + ) + expect(client['setupProviderListeners']).toHaveBeenCalledWith( + mockInjectedProvider, + ConstantsUtil.INJECTED_CONNECTOR_ID + ) + }) + + it('should not set provider when wallet ID is not found', () => { + vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue(null) + + const mockConfig = { + injected: mockInjectedProvider, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).not.toHaveBeenCalled() + expect(client['setupProviderListeners']).not.toHaveBeenCalled() + }) + + it('should not set provider when injected provider is not available', () => { + const mockConfig = { + injected: undefined, + coinbase: undefined, + metadata: {} + } + + client['checkActiveProviders'](mockConfig as ProviderType) + + expect(SafeLocalStorage.getItem).toHaveBeenCalledWith(WcConstantsUtil.WALLET_ID) + expect(client['setProvider']).not.toHaveBeenCalled() + expect(client['setupProviderListeners']).not.toHaveBeenCalled() + }) + }) + + describe('EthersClient - syncAccount', () => { + beforeEach(() => { + vi.spyOn(client as any, 'syncConnectedWalletInfo').mockImplementation(() => {}) + vi.spyOn(client as any, 'syncProfile').mockImplementation(() => Promise.resolve()) + vi.spyOn(client as any, 'syncBalance').mockImplementation(() => Promise.resolve()) + }) + + it('should sync account when connected and address is provided', async () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + const mockCaipNetwork = mainnet + + vi.spyOn(mockAppKit, 'getIsConnectedState').mockReturnValue(true) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mockCaipNetwork) + vi.spyOn(mockAppKit, 'getPreferredAccountType').mockReturnValue('eoa') + + await client['syncAccount']({ address: mockAddress }) + + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith(`eip155:1:${mockAddress}`, 'eip155') + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith('eoa', 'eip155') + expect(mockAppKit.setAddressExplorerUrl).toHaveBeenCalledWith( + `https://etherscan.io/address/${mockAddress}`, + 'eip155' + ) + expect(client['syncConnectedWalletInfo']).toHaveBeenCalled() + expect(client['syncProfile']).toHaveBeenCalledWith(mockAddress) + expect(client['syncBalance']).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setApprovedCaipNetworksData).toHaveBeenCalledWith('eip155') + }) + + it('should reset connection when not connected', async () => { + vi.spyOn(mockAppKit, 'getIsConnectedState').mockReturnValue(false) + + await client['syncAccount']({}) + + expect(mockAppKit.resetWcConnection).toHaveBeenCalled() + expect(mockAppKit.resetNetwork).toHaveBeenCalled() + expect(mockAppKit.setAllAccounts).toHaveBeenCalledWith([], 'eip155') + }) + }) + + describe('EthersClient - syncProfile', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + beforeEach(() => { + vi.spyOn(client as any, 'syncWalletConnectName').mockImplementation(() => Promise.resolve()) + }) + + it('should set profile from fetchIdentity when successful', async () => { + const mockIdentity = { name: 'Test Name', avatar: 'https://example.com/avatar.png' } + vi.spyOn(mockAppKit, 'fetchIdentity').mockResolvedValue(mockIdentity) + + await client['syncProfile'](mockAddress) + + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('Test Name', 'eip155') + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith( + 'https://example.com/avatar.png', + 'eip155' + ) + }) + + it('should use ENS for mainnet when fetchIdentity fails', async () => { + vi.spyOn(mockAppKit, 'fetchIdentity').mockRejectedValue(new Error('Fetch failed')) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + + const mockEnsProvider = { + lookupAddress: vi.fn().mockResolvedValue('test.eth'), + getAvatar: vi.fn().mockResolvedValue('https://example.com/ens-avatar.png') + } + vi.mocked(ethers.providers.InfuraProvider).mockImplementation(() => mockEnsProvider as any) + + await client['syncProfile'](mockAddress) + + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('test.eth', 'eip155') + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith( + 'https://example.com/ens-avatar.png', + 'eip155' + ) + }) + + it('should fallback to syncWalletConnectName for non-mainnet chains', async () => { + vi.spyOn(mockAppKit, 'fetchIdentity').mockRejectedValue(new Error('Fetch failed')) + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(polygon) // Polygon + + await client['syncProfile'](mockAddress) + + expect(client['syncWalletConnectName']).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileImage).toHaveBeenCalledWith(null, 'eip155') + }) + }) + + describe('EthersClient - syncBalance', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + it('should set balance when caipNetwork is available', async () => { + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(mainnet) + + const mockJsonRpcProvider = { + getBalance: vi.fn().mockResolvedValue(BigInt(1000000000000000000)) // 1 ETH in wei + } + vi.mocked(ethers.providers.JsonRpcProvider).mockImplementation( + () => mockJsonRpcProvider as any + ) + + await client['syncBalance'](mockAddress) + + expect(ethers.providers.JsonRpcProvider).toHaveBeenCalledWith(mainnet.rpcUrl, { + chainId: 1, + name: 'Ethereum' + }) + expect(mockJsonRpcProvider.getBalance).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setBalance).toHaveBeenCalledWith('1.0', 'ETH', 'eip155') + }) + + it('should not set balance when caipNetwork is unavailable', async () => { + vi.spyOn(mockAppKit, 'getCaipNetwork').mockReturnValue(undefined) + + await client['syncBalance'](mockAddress) + + expect(ethers.providers.JsonRpcProvider).not.toHaveBeenCalled() + expect(mockAppKit.setBalance).not.toHaveBeenCalled() + }) + }) + + describe('EthersClient - syncWalletConnectName', () => { + const mockAddress = '0x1234567890123456789012345678901234567890' + + it('should set profile name when WalletConnect name is available', async () => { + const mockWcNames = [ + { name: 'WC Wallet', registered: 1, updated: 1234567890, addresses: [], attributes: {} } + ] as unknown as BlockchainApiLookupEnsName[] + vi.spyOn(mockAppKit, 'getWalletConnectName').mockResolvedValue(mockWcNames) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith('WC Wallet', 'eip155') + }) + + it('should set profile name to null when no WalletConnect name is available', async () => { + vi.spyOn(mockAppKit, 'getWalletConnectName').mockResolvedValue([]) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith(null, 'eip155') + }) + + it('should set profile name to null when getWalletConnectName throws an error', async () => { + vi.spyOn(mockAppKit, 'getWalletConnectName').mockRejectedValue(new Error('API Error')) + + await client['syncWalletConnectName'](mockAddress) + + expect(mockAppKit.getWalletConnectName).toHaveBeenCalledWith(mockAddress) + expect(mockAppKit.setProfileName).toHaveBeenCalledWith(null, 'eip155') + }) + }) + + describe('EthersClient - syncConnectedWalletInfo', () => { + beforeEach(() => { + vi.spyOn(SafeLocalStorage, 'getItem').mockReturnValue('MetaMask') + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: 'injected', + solana: undefined + }) + }) + it('should set connected wallet info for EIP6963 provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.EIP6963_CONNECTOR_ID, + solana: undefined + } as Record) + client['EIP6963Providers'] = [ + { + info: { name: 'MetaMask', icon: 'icon-url', uuid: 'test-uuid', rdns: 'com.metamask' }, + provider: {} as any + } + ] + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { name: 'MetaMask', icon: 'icon-url', uuid: 'test-uuid', rdns: 'com.metamask' }, + 'eip155' + ) + }) + + it('should set connected wallet info for WalletConnect provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID, + solana: undefined + } as Record) + const mockProvider = { + session: { + peer: { + metadata: { + name: 'WC Wallet', + icons: ['wc-icon-url'] + } + } + } + } + vi.spyOn(ProviderUtil, 'getProvider').mockReturnValue(mockProvider as any) + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { + name: 'WC Wallet', + icon: 'wc-icon-url', + icons: ['wc-icon-url'] + }, + 'eip155' + ) + }) + + it('should set connected wallet info for Coinbase provider', () => { + vi.spyOn(ProviderUtil.state, 'providerIds', 'get').mockReturnValue({ + eip155: ConstantsUtil.COINBASE_SDK_CONNECTOR_ID, + solana: undefined + } as Record) + vi.spyOn(mockAppKit, 'getConnectors').mockReturnValue([ + { + id: ConstantsUtil.COINBASE_SDK_CONNECTOR_ID, + type: 'INJECTED', + chain: 'eip155' + } + ]) + vi.spyOn(mockAppKit, 'getConnectorImage').mockReturnValue('coinbase-icon-url') + + client['syncConnectedWalletInfo']() + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { name: 'Coinbase Wallet', icon: 'coinbase-icon-url' }, + 'eip155' + ) + }) + }) +}) diff --git a/packages/adapters/ethers5/src/tests/mocks/AppKit.ts b/packages/adapters/ethers5/src/tests/mocks/AppKit.ts new file mode 100644 index 0000000000..49a12acd41 --- /dev/null +++ b/packages/adapters/ethers5/src/tests/mocks/AppKit.ts @@ -0,0 +1,59 @@ +import type { AppKit } from '@web3modal/base' +import { mainnet } from '@web3modal/base/chains' +import { vi } from 'vitest' + +export const mockAppKit = { + setIsConnected: vi.fn(), + getIsConnectedState: vi.fn().mockReturnValue(true), + setCaipAddress: vi.fn(), + getCaipAddress: vi.fn().mockReturnValue('eip155:1:0xE62a3eD41B21447b67a63880607CD2E746A0E35d'), + setRequestedCaipNetworks: vi.fn(), + setConnectors: vi.fn(), + getConnectors: vi.fn().mockReturnValue([]), + setConnectedWalletInfo: vi.fn(), + resetWcConnection: vi.fn(), + resetNetwork: vi.fn(), + resetAccount: vi.fn(), + setPreferredAccountType: vi.fn(), + getPreferredAccountType: vi.fn().mockReturnValue('eoa'), + setEIP6963Enabled: vi.fn(), + getCaipNetwork: vi.fn().mockReturnValue(mainnet), + subscribeState: vi.fn().mockImplementation(callback => vi.fn(() => callback({}))), + setApprovedCaipNetworksData: vi.fn(), + getAddress: vi.fn().mockReturnValue('0xE62a3eD41B21447b67a63880607CD2E746A0E35d'), + addConnector: vi.fn(), + setCaipNetwork: vi.fn(), + setLoading: vi.fn(), + setSmartAccountEnabledNetworks: vi.fn(), + setAllAccounts: vi.fn(), + setStatus: vi.fn(), + setSmartAccountDeployed: vi.fn(), + open: vi.fn(), + isOpen: vi.fn().mockReturnValue(false), + isTransactionStackEmpty: vi.fn().mockReturnValue(true), + isTransactionShouldReplaceView: vi.fn().mockReturnValue(false), + replace: vi.fn(), + redirect: vi.fn(), + showErrorMessage: vi.fn(), + close: vi.fn(), + popTransactionStack: vi.fn(), + setProfileName: vi.fn(), + setProfileImage: vi.fn(), + setAddressExplorerUrl: vi.fn(), + setBalance: vi.fn(), + getWalletConnectName: vi.fn().mockResolvedValue([]), + fetchIdentity: vi.fn().mockResolvedValue(null), + setClientId: vi.fn(), + universalAdapter: { + connectionControllerClient: { + connectWalletConnect: vi.fn(), + disconnect: vi.fn() + }, + networkControllerClient: { + switchCaipNetwork: vi.fn() + } + }, + getConnectorImage: vi.fn() +} as unknown as AppKit + +export default mockAppKit diff --git a/packages/adapters/ethers5/src/tests/mocks/AuthConnector.ts b/packages/adapters/ethers5/src/tests/mocks/AuthConnector.ts new file mode 100644 index 0000000000..07f99eafaa --- /dev/null +++ b/packages/adapters/ethers5/src/tests/mocks/AuthConnector.ts @@ -0,0 +1,28 @@ +import { vi } from 'vitest' + +export const mockAuthConnector = { + onRpcRequest: vi.fn(), + onRpcError: vi.fn(), + onRpcSuccess: vi.fn(), + onNotConnected: vi.fn(), + onIsConnected: vi.fn(), + onSetPreferredAccount: vi.fn(), + connect: vi.fn().mockResolvedValue({ + address: '0x1234567890123456789012345678901234567890', + chainId: 1, + smartAccountDeployed: true, + preferredAccountType: 'eoa', + accounts: [] + }), + getSmartAccountEnabledNetworks: vi.fn().mockResolvedValue({ + smartAccountEnabledNetworks: [1, 137] + }), + on: vi.fn(), + removeListener: vi.fn(), + getLoginEmailUsed: vi.fn().mockReturnValue(false), + isConnected: vi.fn().mockResolvedValue({ isConnected: false }), + disconnect: vi.fn(), + switchNetwork: vi.fn(), + rejectRpcRequests: vi.fn(), + request: vi.fn() +} diff --git a/packages/adapters/ethers5/src/tests/mocks/EthersConfig.ts b/packages/adapters/ethers5/src/tests/mocks/EthersConfig.ts new file mode 100644 index 0000000000..3f5f1cf999 --- /dev/null +++ b/packages/adapters/ethers5/src/tests/mocks/EthersConfig.ts @@ -0,0 +1,34 @@ +import type { ProviderType } from '@web3modal/scaffold-utils/ethers' +import { vi } from 'vitest' + +export const mockEthersConfig = { + metadata: { + name: 'Mock dApp', + description: 'A mock dApp for testing', + url: 'https://mockdapp.com', + icons: ['https://mockdapp.com/icon.png'] + }, + injected: { + // Mock injected provider + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + }, + coinbase: { + // Mock Coinbase provider + request: vi.fn(), + on: vi.fn(), + removeListener: vi.fn() + }, + EIP6963: true +} as unknown as ProviderType + +// Mock function to create ethers config +export function mockCreateEthersConfig(): ProviderType { + return { + ...mockEthersConfig, + metadata: { + ...mockEthersConfig.metadata + } + } +} diff --git a/packages/adapters/ethers5/src/tests/mocks/Options.ts b/packages/adapters/ethers5/src/tests/mocks/Options.ts new file mode 100644 index 0000000000..a1aa8a60ce --- /dev/null +++ b/packages/adapters/ethers5/src/tests/mocks/Options.ts @@ -0,0 +1,14 @@ +import type { AppKitOptions, ChainAdapter } from '@web3modal/base' +import { mainnet, solana } from '@web3modal/base/chains' + +export const mockOptions: AppKitOptions = { + projectId: 'test-project-id', + adapters: [{ chainNamespace: 'eip155' } as unknown as ChainAdapter], + caipNetworks: [mainnet, solana], + metadata: { + name: 'Test App', + description: 'Test App Description', + url: 'https://test-app.com', + icons: ['https://test-app.com/icon.png'] + } +} as unknown as AppKitOptions diff --git a/packages/adapters/ethers5/tsconfig.json b/packages/adapters/ethers5/tsconfig.json index 530149814a..6beb29e243 100644 --- a/packages/adapters/ethers5/tsconfig.json +++ b/packages/adapters/ethers5/tsconfig.json @@ -5,5 +5,5 @@ "declarationDir": "./dist/types" }, "extends": "../../../tsconfig.json", - "include": ["src", "tests"] + "include": ["src", "src/tests"] } diff --git a/packages/base/src/client.ts b/packages/base/src/client.ts index c1dedafb15..897d2dd0e7 100644 --- a/packages/base/src/client.ts +++ b/packages/base/src/client.ts @@ -376,11 +376,21 @@ export class AppKit { this.adapters = options.adapters options.metadata ||= { - name: document?.getElementsByTagName('title')[0]?.textContent || '', + name: + typeof document === 'undefined' + ? '' + : document.getElementsByTagName('title')[0]?.textContent || '', description: - document?.querySelector('meta[property="og:description"]')?.content || '', - url: window.location.origin, - icons: [document.querySelector('link[rel~="icon"]')?.href || ''] + typeof document === 'undefined' + ? '' + : document.querySelector('meta[property="og:description"]')?.content || + '', + url: typeof window === 'undefined' ? '' : window.location.origin, + icons: [ + typeof document === 'undefined' + ? '' + : document.querySelector('link[rel~="icon"]')?.href || '' + ] } this.initializeUniversalAdapter(options) diff --git a/packages/base/src/tests/appkit.test.ts b/packages/base/src/tests/appkit.test.ts new file mode 100644 index 0000000000..d7741944ea --- /dev/null +++ b/packages/base/src/tests/appkit.test.ts @@ -0,0 +1,450 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest' +import { AppKit } from '../client' +import { + AccountController, + NetworkController, + ModalController, + ThemeController, + PublicStateController, + SnackController, + RouterController, + OptionsController, + BlockchainApiController, + ConnectionController, + EnsController, + EventsController, + type AccountType, + type CombinedProvider, + AssetUtil, + ConnectorController, + ChainController, + type Connector +} from '@web3modal/core' +import type { CaipNetwork } from '@web3modal/common' +import { mockOptions } from './mocks/Options' + +// Mock all controllers and UniversalAdapterClient +vi.mock('@web3modal/core') +vi.mock('../universal-adapter/client') + +describe('Base', () => { + let appKit: AppKit + + beforeEach(() => { + vi.resetAllMocks() + appKit = new AppKit(mockOptions) + }) + + describe('Base Initialization', () => { + it('should initialize controllers with required provided options', () => { + expect(OptionsController.setProjectId).toHaveBeenCalledWith(mockOptions.projectId) + expect(OptionsController.setMetadata).toHaveBeenCalled() + }) + + it('should initialize adapters in ChainController', () => { + expect(ChainController.initialize).toHaveBeenCalledWith(mockOptions.adapters) + }) + }) + + describe('Base Public methods', () => { + it('should open modal', async () => { + await appKit.open() + expect(ModalController.open).toHaveBeenCalled() + }) + + it('should close modal', async () => { + await appKit.close() + expect(ModalController.close).toHaveBeenCalled() + }) + + it('should set loading state', () => { + appKit.setLoading(true) + expect(ModalController.setLoading).toHaveBeenCalledWith(true) + }) + + it('should get theme mode', () => { + vi.mocked(ThemeController).state = { themeMode: 'dark' } as any + expect(appKit.getThemeMode()).toBe('dark') + }) + + it('should set theme mode', () => { + appKit.setThemeMode('light') + expect(ThemeController.setThemeMode).toHaveBeenCalledWith('light') + }) + + it('should get theme variables', () => { + vi.mocked(ThemeController).state = { + themeVariables: { '--w3m-accent': '#000' } + } as any + expect(appKit.getThemeVariables()).toEqual({ '--w3m-accent': '#000' }) + }) + + it('should set theme variables', () => { + const themeVariables = { '--w3m-accent': '#fff' } + appKit.setThemeVariables(themeVariables) + expect(ThemeController.setThemeVariables).toHaveBeenCalledWith(themeVariables) + }) + + it('should subscribe to theme changes', () => { + const callback = vi.fn() + appKit.subscribeTheme(callback) + expect(ThemeController.subscribe).toHaveBeenCalledWith(callback) + }) + + it('should get wallet info', () => { + vi.mocked(AccountController).state = { connectedWalletInfo: { name: 'Test Wallet' } } as any + expect(appKit.getWalletInfo()).toEqual({ name: 'Test Wallet' }) + }) + + it('should subscribe to wallet info changes', () => { + const callback = vi.fn() + appKit.subscribeWalletInfo(callback) + expect(AccountController.subscribeKey).toHaveBeenCalledWith('connectedWalletInfo', callback) + }) + + it('should subscribe to address updates', () => { + const callback = vi.fn() + appKit.subscribeShouldUpdateToAddress(callback) + expect(AccountController.subscribeKey).toHaveBeenCalledWith('shouldUpdateToAddress', callback) + }) + + it('should subscribe to CAIP network changes', () => { + const callback = vi.fn() + appKit.subscribeCaipNetworkChange(callback) + expect(NetworkController.subscribeKey).toHaveBeenCalledWith('caipNetwork', callback) + }) + + it('should get state', () => { + vi.mocked(PublicStateController).state = { isConnected: true } as any + expect(appKit.getState()).toEqual({ isConnected: true }) + }) + + it('should subscribe to state changes', () => { + const callback = vi.fn() + appKit.subscribeState(callback) + expect(PublicStateController.subscribe).toHaveBeenCalledWith(callback) + }) + + it('should show error message', () => { + appKit.showErrorMessage('Test error') + expect(SnackController.showError).toHaveBeenCalledWith('Test error') + }) + + it('should show success message', () => { + appKit.showSuccessMessage('Test success') + expect(SnackController.showSuccess).toHaveBeenCalledWith('Test success') + }) + + it('should get event', () => { + vi.mocked(EventsController).state = { name: 'test_event' } as any + expect(appKit.getEvent()).toEqual({ name: 'test_event' }) + }) + + it('should subscribe to events', () => { + const callback = vi.fn() + appKit.subscribeEvents(callback) + expect(EventsController.subscribe).toHaveBeenCalledWith(callback) + }) + + it('should replace route', () => { + appKit.replace('Connect') + expect(RouterController.replace).toHaveBeenCalledWith('Connect') + }) + + it('should redirect to route', () => { + appKit.redirect('Networks') + expect(RouterController.push).toHaveBeenCalledWith('Networks') + }) + + it('should pop transaction stack', () => { + appKit.popTransactionStack(true) + expect(RouterController.popTransactionStack).toHaveBeenCalledWith(true) + }) + + it('should check if modal is open', () => { + vi.mocked(ModalController).state = { open: true } as any + expect(appKit.isOpen()).toBe(true) + }) + + it('should check if transaction stack is empty', () => { + vi.mocked(RouterController).state = { transactionStack: [] } as any + expect(appKit.isTransactionStackEmpty()).toBe(true) + }) + + it('should check if transaction should replace view', () => { + vi.mocked(RouterController).state = { transactionStack: [{ replace: true }] } as any + expect(appKit.isTransactionShouldReplaceView()).toBe(true) + }) + + it('should set is connected', () => { + appKit.setIsConnected(true, 'eip155') + expect(AccountController.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + }) + + it('should set status', () => { + appKit.setStatus('connected', 'eip155') + expect(AccountController.setStatus).toHaveBeenCalledWith('connected', 'eip155') + }) + + it('should get is connected state', () => { + vi.mocked(AccountController).state = { isConnected: true } as any + expect(appKit.getIsConnectedState()).toBe(true) + }) + + it('should set all accounts', () => { + const addresses = ['0x123', '0x456'] as unknown as AccountType[] + appKit.setAllAccounts(addresses, 'eip155') + expect(AccountController.setAllAccounts).toHaveBeenCalledWith(addresses, 'eip155') + expect(OptionsController.setHasMultipleAddresses).toHaveBeenCalledWith(true) + }) + + it('should add address label', () => { + appKit.addAddressLabel('0x123', 'eip155 Address', 'eip155') + expect(AccountController.addAddressLabel).toHaveBeenCalledWith( + '0x123', + 'eip155 Address', + 'eip155' + ) + }) + + it('should remove address label', () => { + appKit.removeAddressLabel('0x123', 'eip155') + expect(AccountController.removeAddressLabel).toHaveBeenCalledWith('0x123', 'eip155') + }) + + it('should get CAIP address', () => { + vi.mocked(AccountController).state = { caipAddress: 'eip155:1:0x123' } as any + expect(appKit.getCaipAddress()).toBe('eip155:1:0x123') + }) + + it('should get address', () => { + vi.mocked(AccountController).state = { address: '0x123' } as any + expect(appKit.getAddress()).toBe('0x123') + }) + + it('should get provider', () => { + const mockProvider = { request: vi.fn() } + vi.mocked(AccountController).state = { provider: mockProvider } as any + expect(appKit.getProvider()).toBe(mockProvider) + }) + + it('should get preferred account type', () => { + vi.mocked(AccountController).state = { preferredAccountType: 'eoa' } as any + expect(appKit.getPreferredAccountType()).toBe('eoa') + }) + + it('should set CAIP address', () => { + appKit.setCaipAddress('eip155:1:0x123', 'eip155') + expect(AccountController.setCaipAddress).toHaveBeenCalledWith('eip155:1:0x123', 'eip155') + }) + + it('should set provider', () => { + const mockProvider = { + request: vi.fn() + } + appKit.setProvider(mockProvider as unknown as CombinedProvider, 'eip155') + expect(AccountController.setProvider).toHaveBeenCalledWith(mockProvider, 'eip155') + }) + + it('should set balance', () => { + appKit.setBalance('1.5', 'ETH', 'eip155') + expect(AccountController.setBalance).toHaveBeenCalledWith('1.5', 'ETH', 'eip155') + }) + + it('should set profile name', () => { + appKit.setProfileName('John Doe', 'eip155') + expect(AccountController.setProfileName).toHaveBeenCalledWith('John Doe', 'eip155') + }) + + it('should set profile image', () => { + appKit.setProfileImage('https://example.com/image.png', 'eip155') + expect(AccountController.setProfileImage).toHaveBeenCalledWith( + 'https://example.com/image.png', + 'eip155' + ) + }) + + it('should reset account', () => { + appKit.resetAccount('eip155') + expect(AccountController.resetAccount).toHaveBeenCalledWith('eip155') + }) + + it('should set CAIP network', () => { + const caipNetwork = { id: 'eip155:1', name: 'Ethereum' } as unknown as CaipNetwork + appKit.setCaipNetwork(caipNetwork) + expect(NetworkController.setActiveCaipNetwork).toHaveBeenCalledWith(caipNetwork) + }) + + it('should get CAIP network', () => { + vi.mocked(NetworkController).state = { + caipNetwork: { id: 'eip155:1', name: 'Ethereum' } + } as any + expect(appKit.getCaipNetwork()).toEqual({ id: 'eip155:1', name: 'Ethereum' }) + }) + + it('should set requested CAIP networks', () => { + const requestedNetworks = [{ id: 'eip155:1', name: 'Ethereum' }] as unknown as CaipNetwork[] + appKit.setRequestedCaipNetworks(requestedNetworks, 'eip155') + expect(NetworkController.setRequestedCaipNetworks).toHaveBeenCalledWith( + requestedNetworks, + 'eip155' + ) + }) + + it('should set connectors', () => { + const existingConnectors = [ + { id: 'phantom', name: 'Phantom', chain: 'eip155', type: 'INJECTED' } + ] as Connector[] + + vi.mocked(ConnectorController.getConnectors).mockReturnValue(existingConnectors) + const connectors = [ + { id: 'metamask', name: 'MetaMask', chain: 'eip155', type: 'INJECTED' } + ] as Connector[] + appKit.setConnectors(connectors) + expect(ConnectorController.setConnectors).toHaveBeenCalledWith([ + ...existingConnectors, + ...connectors + ]) + }) + + it('should add connector', () => { + const connector = { + id: 'metamask', + name: 'MetaMask', + chain: 'eip155', + type: 'INJECTED' + } as Connector + appKit.addConnector(connector) + expect(ConnectorController.addConnector).toHaveBeenCalledWith(connector) + }) + + it('should get connectors', () => { + const mockConnectors = [ + { id: 'metamask', name: 'MetaMask', chain: 'eip155:1', type: 'INJECTED' as const } + ] as any + vi.mocked(ConnectorController.getConnectors).mockReturnValue(mockConnectors) + expect(appKit.getConnectors()).toEqual(mockConnectors) + }) + + it('should get approved CAIP network IDs', () => { + vi.mocked(NetworkController.getApprovedCaipNetworkIds).mockReturnValue(['eip155:1']) + expect(appKit.getApprovedCaipNetworkIds()).toEqual(['eip155:1']) + }) + + it('should set approved CAIP networks data', () => { + appKit.setApprovedCaipNetworksData('eip155') + expect(NetworkController.setApprovedCaipNetworksData).toHaveBeenCalledWith('eip155') + }) + + it('should reset network', () => { + appKit.resetNetwork() + expect(NetworkController.resetNetwork).toHaveBeenCalled() + }) + + it('should reset WC connection', () => { + appKit.resetWcConnection() + expect(ConnectionController.resetWcConnection).toHaveBeenCalled() + }) + + it('should fetch identity', async () => { + const mockRequest = { caipChainId: 'eip155:1', address: '0x123' } + vi.mocked(BlockchainApiController.fetchIdentity).mockResolvedValue({ + name: 'John Doe', + avatar: null + }) + const result = await appKit.fetchIdentity(mockRequest) + expect(BlockchainApiController.fetchIdentity).toHaveBeenCalledWith(mockRequest) + expect(result).toEqual({ name: 'John Doe', avatar: null }) + }) + + it('should set address explorer URL', () => { + appKit.setAddressExplorerUrl('https://etherscan.io/address/0x123', 'eip155') + expect(AccountController.setAddressExplorerUrl).toHaveBeenCalledWith( + 'https://etherscan.io/address/0x123', + 'eip155' + ) + }) + + it('should set smart account deployed', () => { + appKit.setSmartAccountDeployed(true, 'eip155') + expect(AccountController.setSmartAccountDeployed).toHaveBeenCalledWith(true, 'eip155') + }) + + it('should set connected wallet info', () => { + const walletInfo = { name: 'MetaMask', icon: 'icon-url' } + appKit.setConnectedWalletInfo(walletInfo, 'eip155') + expect(AccountController.setConnectedWalletInfo).toHaveBeenCalledWith(walletInfo, 'eip155') + }) + + it('should set smart account enabled networks', () => { + const networks = [1, 137] + appKit.setSmartAccountEnabledNetworks(networks, 'eip155') + expect(NetworkController.setSmartAccountEnabledNetworks).toHaveBeenCalledWith( + networks, + 'eip155' + ) + }) + + it('should set preferred account type', () => { + appKit.setPreferredAccountType('eoa', 'eip155') + expect(AccountController.setPreferredAccountType).toHaveBeenCalledWith('eoa', 'eip155') + }) + + it('should get WalletConnect name', async () => { + vi.mocked(EnsController.getNamesForAddress).mockResolvedValue([ + { + name: 'john.eth', + addresses: { eip155: { address: '0x123', created: '0' } }, + attributes: [], + registered: 0, + updated: 0 + } + ]) + const result = await appKit.getWalletConnectName('john.eth') + expect(EnsController.getNamesForAddress).toHaveBeenCalledWith('john.eth') + expect(result).toEqual([ + { + name: 'john.eth', + addresses: { eip155: { address: '0x123', created: '0' } }, + attributes: [], + registered: 0, + updated: 0 + } + ]) + }) + + it('should resolve WalletConnect name', async () => { + vi.mocked(EnsController.resolveName).mockResolvedValue({ + addresses: { eip155: { address: '0x123', created: '0' } }, + name: 'john.eth', + registered: 0, + updated: 0, + attributes: [] + }) + const result = await appKit.resolveWalletConnectName('john.eth') + expect(EnsController.resolveName).toHaveBeenCalledWith('john.eth') + expect(result).toBe('0x123') + }) + + it('should set EIP6963 enabled', () => { + appKit.setEIP6963Enabled(true) + expect(OptionsController.setEIP6963Enabled).toHaveBeenCalledWith(true) + }) + + it('should set client ID', () => { + appKit.setClientId('client-123') + expect(BlockchainApiController.setClientId).toHaveBeenCalledWith('client-123') + }) + + it('should get connector image', () => { + vi.mocked(AssetUtil.getConnectorImage).mockReturnValue('connector-image-url') + const result = appKit.getConnectorImage({ id: 'metamask', type: 'INJECTED', chain: 'eip155' }) + expect(AssetUtil.getConnectorImage).toHaveBeenCalledWith({ + id: 'metamask', + type: 'INJECTED', + chain: 'eip155' + }) + expect(result).toBe('connector-image-url') + }) + }) +}) diff --git a/packages/base/src/tests/mocks/AppKit.ts b/packages/base/src/tests/mocks/AppKit.ts new file mode 100644 index 0000000000..a490cea858 --- /dev/null +++ b/packages/base/src/tests/mocks/AppKit.ts @@ -0,0 +1,24 @@ +import { vi } from 'vitest' +import type { AppKit } from '../../client.js' +import { mainnet } from '../../chains/index.js' + +export const mockAppKit = { + setIsConnected: vi.fn(), + getIsConnectedState: vi.fn().mockReturnValue(true), + setCaipAddress: vi.fn(), + getCaipAddress: vi.fn().mockReturnValue('eip155:1:0xE62a3eD41B21447b67a63880607CD2E746A0E35d'), + setRequestedCaipNetworks: vi.fn(), + setConnectors: vi.fn(), + getConnectors: vi.fn().mockReturnValue([]), + setConnectedWalletInfo: vi.fn(), + resetWcConnection: vi.fn(), + resetNetwork: vi.fn(), + resetAccount: vi.fn(), + setPreferredAccountType: vi.fn(), + getPreferredAccountType: vi.fn().mockReturnValue('eoa'), + getCaipNetwork: vi.fn().mockReturnValue(mainnet), + setApprovedCaipNetworksData: vi.fn(), + getAddress: vi.fn().mockReturnValue('0xE62a3eD41B21447b67a63880607CD2E746A0E35d') +} as unknown as AppKit + +export default mockAppKit diff --git a/packages/base/src/tests/mocks/Options.ts b/packages/base/src/tests/mocks/Options.ts new file mode 100644 index 0000000000..a30777b39f --- /dev/null +++ b/packages/base/src/tests/mocks/Options.ts @@ -0,0 +1,15 @@ +import type { ChainAdapter } from '@web3modal/core' +import type { AppKitOptions } from '../../utils/index.js' +import { mainnet, solana } from '../../chains/index.js' + +export const mockOptions: AppKitOptions = { + projectId: 'test-project-id', + adapters: [{ chainNamespace: 'eip155' } as unknown as ChainAdapter], + caipNetworks: [mainnet, solana], + metadata: { + name: 'Test App', + description: 'Test App Description', + url: 'https://test-app.com', + icons: ['https://test-app.com/icon.png'] + } +} as unknown as AppKitOptions diff --git a/packages/base/src/tests/mocks/UniversalProvider.ts b/packages/base/src/tests/mocks/UniversalProvider.ts new file mode 100644 index 0000000000..3ef3aea6e5 --- /dev/null +++ b/packages/base/src/tests/mocks/UniversalProvider.ts @@ -0,0 +1,122 @@ +import type UniversalProvider from '@walletconnect/universal-provider' +import { vi } from 'vitest' + +export const mockProvider = { + on: vi.fn(), + off: vi.fn(), + disconnect: vi.fn(), + request: vi.fn(), + setDefaultChain: vi.fn(), + namespaces: { + eip155: { + chains: ['eip155:1'], + events: ['accountsChanged', 'chainChanged'], + methods: [ + 'personal_sign', + 'eth_sign', + 'eth_signTransaction', + 'eth_signTypedData', + 'eth_signTypedData_v3', + 'eth_signTypedData_v4', + 'eth_sendRawTransaction', + 'eth_sendTransaction', + 'wallet_getCapabilities', + 'wallet_sendCalls', + 'wallet_showCallsStatus', + 'wallet_getCallsStatus', + 'wallet_switchEthereumChain' + ], + rpcMap: { + '1': 'https://rpc.walletconnect.org/v1/?chainId=eip155:1&projectId=undefined' + } + }, + solana: { + chains: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], + methods: ['solana_signMessage'], + events: ['accountsChanged', 'chainChanged'], + rpcMap: { + '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'https://rpc.walletconnect.org/v1' + } + } + }, + + session: { + topic: 'mock_session_topic', + namespaces: { + eip155: { + chains: ['eip155:1'], + accounts: ['eip155:1:0xE62a3eD41B21447b67a63880607CD2E746A0E35d'], + methods: ['eth_sendTransaction', 'personal_sign'], + events: ['accountsChanged', 'chainChanged'] + }, + solana: { + chains: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], + accounts: [ + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwGMgmR69MfN5B' + ], + methods: ['solana_signTransaction', 'solana_signMessage'], + events: ['accountChanged'] + } + }, + expiry: 1234567890, + acknowledged: true, + controller: 'mock_controller', + peer: { + publicKey: 'mock_public_key', + metadata: { + name: 'Mock Wallet', + description: 'Mock Wallet Description', + url: 'https://mockwallet.com', + icons: ['https://mockwallet.com/icon.png'] + } + } + }, + client: { + formatAuthMessage: vi.fn().mockReturnValue('Formatted auth message'), + core: { + pairing: { + getPairings: vi.fn().mockReturnValue([]) + }, + crypto: { + keychain: { + has: vi.fn().mockResolvedValue(true), + set: vi.fn() + } + }, + relayer: { + subscriber: { + context: '0x1234' + } + } + } + }, + events: { + emit: vi.fn() + }, + rpcProviders: { + eip155: { + request: vi.fn() + }, + solana: { + request: vi.fn() + } + }, + providerOpts: { + client: { + projectId: 'mock_project_id', + relayUrl: 'wss://relay.walletconnect.com' + }, + qrcode: true + }, + connect: vi.fn().mockResolvedValue({ + uri: 'wc:mock_uri', + approval: Promise.resolve({}) + }), + authenticate: vi.fn().mockResolvedValue({ + uri: 'wc:mock_auth_uri', + approval: Promise.resolve({}) + }), + enable: vi.fn().mockResolvedValue(['0x1234...']) +} as unknown as UniversalProvider + +export default mockProvider diff --git a/packages/base/src/tests/universal-adapter.test.ts b/packages/base/src/tests/universal-adapter.test.ts new file mode 100644 index 0000000000..7875680420 --- /dev/null +++ b/packages/base/src/tests/universal-adapter.test.ts @@ -0,0 +1,205 @@ +import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest' +import { mainnet, solana } from '../chains' +import { UniversalAdapterClient } from '../universal-adapter' +import { mockOptions } from './mocks/Options' +import mockProvider from './mocks/UniversalProvider' +import type UniversalProvider from '@walletconnect/universal-provider' +import { NetworkController } from '@web3modal/core' +import { ProviderUtil } from '@web3modal/base/store' +import { ConstantsUtil, PresetsUtil } from '@web3modal/scaffold-utils' +import mockAppKit from './mocks/AppKit' + +describe('UniversalAdapter', () => { + let universalAdapter: UniversalAdapterClient + + beforeEach(() => { + universalAdapter = new UniversalAdapterClient(mockOptions) + universalAdapter.walletConnectProvider = mockProvider + universalAdapter.construct(mockAppKit, mockOptions) + }) + + afterEach(() => { + vi.clearAllMocks() + }) + + describe('UniversalAdapter - Initialization', () => { + it('should set caipNetworks to provided caipNetworks options', () => { + expect(universalAdapter?.caipNetworks).toEqual(mockOptions.caipNetworks) + }) + + it('should set defaultNetwork to first caipNetwork option', () => { + expect(universalAdapter?.defaultNetwork).toEqual(mockOptions.caipNetworks[0]) + }) + + it('should set metadata to metadata options', () => { + expect((universalAdapter as any).appKit).toEqual(mockAppKit) + }) + }) + + describe('UniversalAdapter - Public Methods', () => { + it('should return walletConnectProvider when getWalletConnectProvider is invoked', async () => { + const switchNetworkSpy = vi.spyOn(universalAdapter, 'switchNetwork') + await universalAdapter.networkControllerClient.switchCaipNetwork(mainnet) + expect(switchNetworkSpy).toHaveBeenCalledWith(mainnet) + }) + }) + + describe('UniversalAdapter - Network', () => { + it('should call switchCaipNetwork when networkControllerClient.switchCaipNetwork is invoked', async () => { + const provider = await universalAdapter.getWalletConnectProvider() + expect(provider).toEqual(mockProvider) + }) + + it('should call return correct approvedCaipNetworksData', async () => { + const approvedCaipNetworksData = + await universalAdapter.networkControllerClient.getApprovedCaipNetworksData() + + expect(approvedCaipNetworksData).toMatchObject({ + supportsAllNetworks: false, + approvedCaipNetworkIds: [ + mockProvider.session?.namespaces['eip155']?.chains?.[0], + mockProvider.session?.namespaces['solana']?.chains?.[0] + ] + }) + }) + + it('should call setDefaultNetwork and set first caipNetwork on setActiveCaipNetwork when there is no active caipNetwork', async () => { + vi.spyOn(NetworkController, 'state', 'get').mockReturnValue({ + caipNetwork: undefined, + requestedCaipNetworks: [mainnet, solana], + approvedCaipNetworkIds: [], + supportsAllNetworks: false, + isDefaultCaipNetwork: false + }) + + const adapterSpy = vi.spyOn(universalAdapter as any, 'setDefaultNetwork') + const networkControllerSpy = vi.spyOn(NetworkController, 'setActiveCaipNetwork') + + const mockOnUri = vi.fn() + await universalAdapter?.connectionControllerClient?.connectWalletConnect?.(mockOnUri) + + expect(adapterSpy).toHaveBeenCalledWith(mockProvider.session?.namespaces) + expect(networkControllerSpy).toHaveBeenCalledWith(mainnet) + }) + + it('should set correct requestedCaipNetworks in AppKit when syncRequestedNetworks has been called', () => { + ;(universalAdapter as any).syncRequestedNetworks(mockOptions.caipNetworks) + expect(mockAppKit.setRequestedCaipNetworks).toHaveBeenCalledWith([mainnet], 'eip155') + expect(mockAppKit.setRequestedCaipNetworks).toHaveBeenCalledWith([solana], 'solana') + }) + }) + + describe('UniversalAdapter - Connection', () => { + it('should connect the walletConnectProvider with the right namespaces when connectionControllerClient.connectWalletConnect is invoked', async () => { + const providerSpy = vi.spyOn( + universalAdapter.walletConnectProvider as UniversalProvider, + 'connect' + ) + const mockOnUri = vi.fn() + await universalAdapter?.connectionControllerClient?.connectWalletConnect?.(mockOnUri) + expect(providerSpy).toHaveBeenCalledWith({ + optionalNamespaces: universalAdapter.walletConnectProvider?.namespaces + }) + }) + + it('should update AppKit state when connectionControllerClient.connectWalletConnect is invoked', async () => { + const mockOnUri = vi.fn() + await universalAdapter?.connectionControllerClient?.connectWalletConnect?.(mockOnUri) + + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'eip155') + expect(mockAppKit.setIsConnected).toHaveBeenCalledWith(true, 'solana') + + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith('eoa', 'eip155') + expect(mockAppKit.setPreferredAccountType).toHaveBeenCalledWith('eoa', 'solana') + + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith( + mockProvider.session?.namespaces['eip155']?.accounts[0], + 'eip155' + ) + expect(mockAppKit.setCaipAddress).toHaveBeenCalledWith( + mockProvider.session?.namespaces['solana']?.accounts[0], + 'solana' + ) + + expect(mockAppKit.setConnectedWalletInfo).toHaveBeenCalledWith( + { + description: 'Mock Wallet Description', + url: 'https://mockwallet.com', + name: 'Mock Wallet', + icon: 'https://mockwallet.com/icon.png', + icons: ['https://mockwallet.com/icon.png'] + }, + 'eip155' + ) + }) + + it('should return correct provider data when getProviderData is invoked', async () => { + const data = (universalAdapter as any).getProviderData() + expect(data).toMatchObject({ + provider: mockProvider, + namespaces: mockProvider.session?.namespaces, + namespaceKeys: Object.keys(mockProvider.session?.namespaces || {}), + isConnected: true, + preferredAccountType: 'eoa' + }) + }) + + it('should disconnect the walletConnectProvider when disconnect is invoked', async () => { + const providerSpy = vi.spyOn( + universalAdapter.walletConnectProvider as UniversalProvider, + 'disconnect' + ) + await universalAdapter?.connectionControllerClient?.disconnect?.() + expect(providerSpy).toHaveBeenCalled() + expect(mockAppKit.resetAccount).toHaveBeenCalledWith('eip155') + expect(mockAppKit.resetAccount).toHaveBeenCalledWith('solana') + }) + }) + + describe('UniversalAdapter - ProviderUtil', () => { + it('should set the provider in ProviderUtil when setWalletConnectProvider is called', async () => { + const mockSetProvider = vi.spyOn(ProviderUtil, 'setProvider') + const mockSetProviderId = vi.spyOn(ProviderUtil, 'setProviderId') + + await (universalAdapter as any).setWalletConnectProvider() + + expect(mockSetProvider).toHaveBeenCalledWith('eip155', universalAdapter.walletConnectProvider) + + expect(mockSetProviderId).toHaveBeenCalledWith('eip155', 'walletConnect') + + expect(mockSetProvider).toHaveBeenCalledWith('solana', universalAdapter.walletConnectProvider) + + expect(mockSetProviderId).toHaveBeenCalledWith('solana', 'walletConnect') + }) + }) + + describe('UniversalAdapter - Provider', () => { + it('should set up event listeners when watchWalletConnect is called', async () => { + const provider = await universalAdapter.getWalletConnectProvider() + const providerOnSpy = vi.spyOn(provider as UniversalProvider, 'on') + + await (universalAdapter as any).watchWalletConnect() + + expect(providerOnSpy).toHaveBeenCalledWith('disconnect', expect.any(Function)) + expect(providerOnSpy).toHaveBeenCalledWith('accountsChanged', expect.any(Function)) + expect(providerOnSpy).toHaveBeenCalledWith('chainChanged', expect.any(Function)) + }) + }) + + describe('UniversalAdapter - Connectors', () => { + it('should sync connectors correctly', () => { + ;(universalAdapter as any).syncConnectors() + + expect(mockAppKit.setConnectors).toHaveBeenCalledWith([ + { + id: ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID, + explorerId: PresetsUtil.ConnectorExplorerIds[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID], + imageId: PresetsUtil.ConnectorImageIds[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID], + name: PresetsUtil.ConnectorNamesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID], + type: 'WALLET_CONNECT', + chain: universalAdapter.chainNamespace + } + ]) + }) + }) +}) diff --git a/packages/base/src/universal-adapter/client.ts b/packages/base/src/universal-adapter/client.ts index ba54ff4817..b85cfdfd5d 100644 --- a/packages/base/src/universal-adapter/client.ts +++ b/packages/base/src/universal-adapter/client.ts @@ -34,13 +34,15 @@ type Metadata = { // -- Client -------------------------------------------------------------------- export class UniversalAdapterClient { - public caipNetworks: CaipNetwork[] + private walletConnectProviderInitPromise?: Promise - private walletConnectProvider?: UniversalProvider + private appKit: AppKit | undefined = undefined - private walletConnectProviderInitPromise?: Promise + public caipNetworks: CaipNetwork[] + + public walletConnectProvider?: UniversalProvider - private metadata?: Metadata + public metadata?: Metadata public isUniversalAdapterClient = true @@ -52,8 +54,6 @@ export class UniversalAdapterClient { public connectionControllerClient: ConnectionControllerClient - private appKit: AppKit | undefined = undefined - public options: AppKitOptions | undefined = undefined public adapterType: AdapterType = 'universal' @@ -256,6 +256,14 @@ export class UniversalAdapterClient { this.syncConnectors() } + public switchNetwork(caipNetwork: CaipNetwork) { + if (caipNetwork) { + if (this.walletConnectProvider) { + this.walletConnectProvider.setDefaultChain(caipNetwork.id) + } + } + } + public async disconnect() { if (this.walletConnectProvider) { await (this.walletConnectProvider as unknown as UniversalProvider).disconnect() @@ -264,8 +272,19 @@ export class UniversalAdapterClient { } } - // -- Private ----------------------------------------------------------------- + public async getWalletConnectProvider() { + if (!this.walletConnectProvider) { + try { + await this.createProvider() + } catch (error) { + throw new Error('EthereumAdapter:getWalletConnectProvider - Cannot create provider') + } + } + return this.walletConnectProvider + } + + // -- Private ----------------------------------------------------------------- private createProvider() { if ( !this.walletConnectProviderInitPromise && @@ -296,18 +315,6 @@ export class UniversalAdapterClient { await this.checkActiveWalletConnectProvider() } - public async getWalletConnectProvider() { - if (!this.walletConnectProvider) { - try { - await this.createProvider() - } catch (error) { - throw new Error('EthereumAdapter:getWalletConnectProvider - Cannot create provider') - } - } - - return this.walletConnectProvider - } - private syncRequestedNetworks(caipNetworks: AppKitOptions['caipNetworks']) { const uniqueChainNamespaces = [ ...new Set(caipNetworks.map(caipNetwork => caipNetwork.chainNamespace)) @@ -373,6 +380,7 @@ export class UniversalAdapterClient { SafeLocalStorageKeys.ACTIVE_CAIP_NETWORK, JSON.stringify(this.appKit?.getCaipNetwork()) ) + this.syncAccount() this.watchWalletConnect() } @@ -438,14 +446,6 @@ export class UniversalAdapterClient { } } - public switchNetwork(caipNetwork: CaipNetwork) { - if (caipNetwork) { - if (this.walletConnectProvider) { - this.walletConnectProvider.setDefaultChain(caipNetwork.id) - } - } - } - private getProviderData() { const namespaces = this.walletConnectProvider?.session?.namespaces || {} diff --git a/packages/base/src/utils/ConstantsUtil.ts b/packages/base/src/utils/ConstantsUtil.ts index 96f762918b..39773b1535 100644 --- a/packages/base/src/utils/ConstantsUtil.ts +++ b/packages/base/src/utils/ConstantsUtil.ts @@ -1,7 +1,7 @@ export const WcConstantsUtil = { - WALLET_ID: '@w3m/wallet_id', - WALLET_NAME: '@w3m/wallet_name', - ACTIVE_CAIPNETWORK: '@w3m/active_caipnetwork', + WALLET_ID: '@w3m/wallet_id' as const, + WALLET_NAME: '@w3m/wallet_name' as const, + ACTIVE_CAIPNETWORK: '@w3m/active_caipnetwork' as const, ERROR_CODE_UNRECOGNIZED_CHAIN_ID: 4902, ERROR_CODE_DEFAULT: 5000 } diff --git a/packages/common/src/utils/SafeLocalStorage.ts b/packages/common/src/utils/SafeLocalStorage.ts index f42bde33a9..ef9ce49c5a 100644 --- a/packages/common/src/utils/SafeLocalStorage.ts +++ b/packages/common/src/utils/SafeLocalStorage.ts @@ -1,6 +1,7 @@ export type SafeLocalStorageItems = { '@w3m/wallet_id': string '@w3m/wallet_name': string + '@w3m/active_caipnetwork': string '@w3m/solana_caip_chain': string '@w3m/solana_wallet': string '@w3m/active_caip_network': string diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a167555dd..40abd75a00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,7 +27,7 @@ importers: version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@vitest/coverage-v8': specifier: 1.1.2 - version: 1.1.2(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 1.1.2(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) danger: specifier: 11.3.1 version: 11.3.1 @@ -63,10 +63,10 @@ importers: version: 5.2.11(@types/node@20.11.5)(terser@5.31.6) vite-plugin-node-polyfills: specifier: 0.22.0 - version: 0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) apps/demo: dependencies: @@ -179,7 +179,7 @@ importers: version: 7.6.7(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/web-components-vite': specifier: 7.6.7 - version: 7.6.7(bufferutil@4.0.8)(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 7.6.7(bufferutil@4.0.8)(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10)(vite@5.2.11(@types/node@20.11.5)) file-system-cache: specifier: 2.4.4 version: 2.4.4 @@ -306,7 +306,7 @@ importers: version: 1.44.0 '@synthetixio/synpress': specifier: 4.0.0-alpha.7 - version: 4.0.0-alpha.7(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) + version: 4.0.0-alpha.7(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@types/node': specifier: 20.11.5 version: 20.11.5 @@ -498,7 +498,7 @@ importers: version: 18.2.7 '@vitejs/plugin-react': specifier: 4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 4.2.1(vite@5.2.11(@types/node@20.11.5)) vite: specifier: 5.2.11 version: 5.2.11(@types/node@20.11.5)(terser@5.31.6) @@ -529,7 +529,7 @@ importers: version: 18.2.7 '@vitejs/plugin-react': specifier: 4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 4.2.1(vite@5.2.11(@types/node@20.11.5)) vite: specifier: 5.2.11 version: 5.2.11(@types/node@20.11.5)(terser@5.31.6) @@ -541,7 +541,7 @@ importers: version: 0.1.14(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-wallets': specifier: 0.19.32 - version: 0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0)(tslib@2.7.0)(utf-8-validate@5.0.10) + version: 0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.7.0)(utf-8-validate@5.0.10) '@tanstack/react-query': specifier: 5.24.8 version: 5.24.8(react@18.2.0) @@ -566,7 +566,7 @@ importers: version: 18.2.7 '@vitejs/plugin-react': specifier: 4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 4.2.1(vite@5.2.11(@types/node@20.11.5)) examples/react-wagmi: dependencies: @@ -603,10 +603,10 @@ importers: version: 18.2.7 '@vitejs/plugin-react': specifier: 4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 4.2.1(vite@5.2.11(@types/node@20.11.5)) vite-size: specifier: 0.0.5 - version: 0.0.5(@types/node@20.11.5)(terser@5.31.6)(vue@3.4.3(typescript@5.3.3)) + version: 0.0.5(@types/node@20.11.5)(vue@3.4.3(typescript@5.3.3)) examples/vue-ethers5: dependencies: @@ -637,7 +637,7 @@ importers: version: 0.1.14(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-wallets': specifier: 0.19.32 - version: 0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + version: 0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.7.0)(utf-8-validate@5.0.10) '@web3modal/solana': specifier: workspace:* version: link:../../packages/solana @@ -721,7 +721,7 @@ importers: version: 5.7.0 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@walletconnect/types': specifier: 2.13.3 version: 2.13.3 @@ -733,7 +733,7 @@ importers: version: 6.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/adapters/ethers5: dependencies: @@ -782,7 +782,7 @@ importers: version: 5.7.0 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@walletconnect/types': specifier: 2.13.3 version: 2.13.3 @@ -791,7 +791,7 @@ importers: version: ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/adapters/solana: dependencies: @@ -874,7 +874,7 @@ importers: version: 18.2.0 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@vue/runtime-core': specifier: 3.4.3 version: 3.4.3 @@ -886,7 +886,7 @@ importers: version: 18.2.0(react@18.2.0) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) vue: specifier: 3.4.3 version: 3.4.3(typescript@5.3.3) @@ -941,7 +941,7 @@ importers: version: 18.2.0 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@wagmi/connectors': specifier: 5.1.5 version: 5.1.5(@types/react@18.2.0)(@wagmi/core@2.13.4(@tanstack/query-core@5.24.8)(@types/react@18.2.0)(react@18.2.0)(typescript@5.3.3)(viem@2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4)))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.0)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.2)(typescript@5.3.3)(utf-8-validate@5.0.10)(viem@2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) @@ -956,7 +956,7 @@ importers: version: 2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) wagmi: specifier: 2.12.5 version: 2.12.5(@tanstack/query-core@5.24.8)(@tanstack/react-query@5.24.8(react@18.2.0))(@types/react@18.2.0)(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.0)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0)(rollup@4.21.2)(typescript@5.3.3)(utf-8-validate@5.0.10)(viem@2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) @@ -1008,7 +1008,7 @@ importers: version: 18.2.0 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@vue/runtime-core': specifier: 3.4.3 version: 3.4.3 @@ -1020,7 +1020,7 @@ importers: version: 18.2.0(react@18.2.0) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) vue: specifier: 3.4.3 version: 3.4.3(typescript@5.3.3) @@ -1060,7 +1060,7 @@ importers: version: 5.3.3 vite-plugin-node-polyfills: specifier: 0.22.0 - version: 0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + version: 0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)) packages/common: dependencies: @@ -1073,10 +1073,10 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/core: dependencies: @@ -1095,13 +1095,13 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) viem: specifier: 2.19.6 version: 2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/ethers: dependencies: @@ -1364,13 +1364,13 @@ importers: version: 5.1.5 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@walletconnect/types': specifier: 2.14.0 version: 2.14.0 vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/ui: dependencies: @@ -1386,7 +1386,7 @@ importers: version: 1.5.5 '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) '@web3modal/common': specifier: workspace:* version: link:../common @@ -1404,7 +1404,7 @@ importers: version: 2.0.4(eslint@8.57.0) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) packages/wagmi: dependencies: @@ -1450,7 +1450,7 @@ importers: version: 2.19.6(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) vue: specifier: 3.4.3 version: 3.4.3(typescript@5.3.3) @@ -1475,13 +1475,13 @@ importers: devDependencies: '@vitest/coverage-v8': specifier: 2.0.5 - version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6)) + version: 2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)) jsdom: specifier: 24.1.0 version: 24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) vitest: specifier: 2.0.3 - version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + version: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) services/id-allocation-service: dependencies: @@ -2803,11 +2803,11 @@ packages: '@chakra-ui/system': '>=2.0.0' react: '>=18' - '@changesets/apply-release-plan@7.0.4': - resolution: {integrity: sha512-HLFwhKWayKinWAul0Vj+76jVx1Pc2v55MGPVjZ924Y/ROeSsBMFutv9heHmCUj48lJyRfOTJG5+ar+29FUky/A==} + '@changesets/apply-release-plan@7.0.5': + resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} - '@changesets/assemble-release-plan@6.0.3': - resolution: {integrity: sha512-bLNh9/Lgl1VwkjWZTq8JmRqH+hj7/Yzfz0jsQ/zJJ+FTmVqmqPj3szeKOri8O/hEM8JmHW019vh2gTO9iq5Cuw==} + '@changesets/assemble-release-plan@6.0.4': + resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} @@ -2819,41 +2819,41 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true - '@changesets/config@3.0.2': - resolution: {integrity: sha512-cdEhS4t8woKCX2M8AotcV2BOWnBp09sqICxKapgLHf9m5KdENpWjyrFNMjkLqGJtUys9U+w93OxWT0czorVDfw==} + '@changesets/config@3.0.3': + resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.1.1': - resolution: {integrity: sha512-LRFjjvigBSzfnPU2n/AhFsuWR5DK++1x47aq6qZ8dzYsPtS/I5mNhIGAS68IAxh1xjO9BTtz55FwefhANZ+FCA==} + '@changesets/get-dependents-graph@2.1.2': + resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.3': - resolution: {integrity: sha512-6PLgvOIwTSdJPTtpdcr3sLtGatT+Jr22+cQwEBJBy6wP0rjB4yJ9lv583J9fVpn1bfQlBkDa8JxbS2g/n9lIyA==} + '@changesets/get-release-plan@4.0.4': + resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.0': - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@changesets/git@3.0.1': + resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} - '@changesets/logger@0.1.0': - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} '@changesets/parse@0.4.0': resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} - '@changesets/pre@2.0.0': - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@changesets/pre@2.0.1': + resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.6.0': - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/read@0.6.1': + resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} - '@changesets/should-skip-package@0.1.0': - resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} + '@changesets/should-skip-package@0.1.1': + resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} @@ -2861,8 +2861,8 @@ packages: '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - '@changesets/write@0.3.1': - resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} + '@changesets/write@0.3.2': + resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} '@cloudflare/kv-asset-handler@0.3.2': resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==} @@ -4256,8 +4256,8 @@ packages: resolution: {integrity: sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==} engines: {node: '>=16.0.0'} - '@metamask/utils@9.2.0': - resolution: {integrity: sha512-01riKC6oc6YJVJBL6g6TgCBwcmzwuVSIIMhnwvWanPWs3ZpUabJzy3GR9PlsBPa2pHd1p0Q6WMVRExWWEHzsQA==} + '@metamask/utils@9.2.1': + resolution: {integrity: sha512-/u663aUaB6+Xe75i3Mt/1cCljm41HDYIsna5oBrwGvgkY2zH7/9k9Zjd706cxoAbxN7QgLSVAReUiGnuxCuXrQ==} engines: {node: '>=16.0.0'} '@mobily/ts-belt@3.13.1': @@ -4367,8 +4367,9 @@ packages: '@noble/curves@1.4.2': resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} - '@noble/curves@1.5.0': - resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==} + '@noble/curves@1.6.0': + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} '@noble/hashes@1.3.2': resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} @@ -4378,6 +4379,10 @@ packages: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5298,6 +5303,9 @@ packages: cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} @@ -5311,8 +5319,8 @@ packages: resolution: {integrity: sha512-Y0yAxRaB98LFp2Dm+ACZqBSdAmI3FlpH/LjxOZ94g/ouuDJecSq0iR26XZ5QDuEL8Rf+L4jBJaoDC08CD0KkJw==} engines: {node: '>=16'} - '@scure/base@1.1.7': - resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} + '@scure/base@1.1.8': + resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} '@scure/bip32@1.3.2': resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} @@ -6034,8 +6042,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.12': - resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} @@ -6351,8 +6359,8 @@ packages: '@types/node@18.15.13': resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - '@types/node@18.19.47': - resolution: {integrity: sha512-1f7dB3BL/bpd9tnDJrrHb66Y+cVrhxSOTGorRNdHwYTUlTay3HuTDPKo9a/4vX9pMQkhYBcAbL4jQdNlhCFP9A==} + '@types/node@18.19.49': + resolution: {integrity: sha512-ALCeIR6n0nQ7j0FUF1ycOhrp6+XutJWqEu/vtdEqXFUQwkBfgUA5cEg3ZNmjWGF/ZYA/FcF9QMkL55Ar0O6UrA==} '@types/node@20.11.5': resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} @@ -6642,6 +6650,10 @@ packages: resolution: {integrity: sha512-9MWVt33MFrLiAeK9nqY/B30/y0M4uiq8v9EXenIBQdlgkmXM++RTcOnn7u7EAbthGgzx3WLPRm4ViwIb+rI/Cg==} engines: {node: '>=18'} + '@walletconnect/core@2.15.2': + resolution: {integrity: sha512-u4BGuazSNAQ48QBY7EphanBuBN6EJWyD5MXi83n1wXwfPQWAu0XNvmOjjF+xmMI5TsYH9N6Y78O6HP/VX9EOvg==} + engines: {node: '>=18'} + '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} @@ -6721,6 +6733,9 @@ packages: '@walletconnect/sign-client@2.15.1': resolution: {integrity: sha512-YnLNEmCHgZ8yBpE3hwZnHD/bVznVMguSAlwLBNOoWUH2f4d9mR8bqa6KeVXqZ3e8mVHcxKTJTjTJ3oQMLyKIjw==} + '@walletconnect/sign-client@2.15.2': + resolution: {integrity: sha512-Yp4/z3IdTMngbjr7Zy7Qi1X6EZDH4nxY91X6K2KpA3MjLW0yPTGalEJgJ4p9WH7fmHRlwvfR4hjwM5eQcLo5Zg==} + '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -6737,6 +6752,9 @@ packages: '@walletconnect/types@2.15.1': resolution: {integrity: sha512-4WkMsHD8ioZI5GmxNT0qMlz6msI7ZajBcTyDxfRncaNZVau0C+Btw1U4jWO+gxwJVDJY+Ue/cb1QKJ5BanZsyw==} + '@walletconnect/types@2.15.2': + resolution: {integrity: sha512-TGnQZYWZJJ3I8dqgpMPwhO1IRXDuY8/tWPI0nNWJDyTK7b3E9prDGugnPmDDjpTYVoETnUTgW/jQaHNTq4yV7Q==} + '@walletconnect/universal-provider@2.14.0': resolution: {integrity: sha512-Mr8uoTmD6H0+Hh+3gxBu4l3T2uP/nNPR02sVtwEujNum++F727mMk+ifPRIpkVo21V/bvXFEy8sHTs5hqyq5iA==} @@ -6749,6 +6767,9 @@ packages: '@walletconnect/utils@2.15.1': resolution: {integrity: sha512-i5AR8XpZdcX8ghaCjYV13Er/KAGe56c1mLaG9c2cv9kmnZMZijeMdInjX/flnSM1RFDUiZXvKPMUNwlCL4NsWw==} + '@walletconnect/utils@2.15.2': + resolution: {integrity: sha512-H+fNH9cHDezdaEiEsO7/3URSIzqhumuacwB/+0PX0sSCoktmU9AfTqA8fJGG43zOPixleBqOymzO6owB1Y7jtQ==} + '@walletconnect/window-getters@1.0.0': resolution: {integrity: sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==} @@ -7049,8 +7070,9 @@ packages: axios@1.7.2: resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} - axobject-query@3.1.1: - resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -8170,8 +8192,8 @@ packages: eslint-plugin-import-x: optional: true - eslint-module-utils@2.8.2: - resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} + eslint-module-utils@2.9.0: + resolution: {integrity: sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -8191,8 +8213,8 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -8201,11 +8223,11 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsx-a11y@6.9.0: - resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} engines: {node: '>=4.0'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 eslint-plugin-lit@1.11.0: resolution: {integrity: sha512-jVqy2juQTAtOzj1ILf+ZW5GpDobXlSw0kvpP2zu2r8ZbW7KISt7ikj1Gw9DhNeirEU1UlSJR0VIWpdr4lzjayw==} @@ -8233,8 +8255,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.35.0: - resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} + eslint-plugin-react@7.35.2: + resolution: {integrity: sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -8446,8 +8468,8 @@ packages: resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} hasBin: true - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + fast-xml-parser@4.5.0: + resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} hasBin: true fastq@1.17.1: @@ -8530,16 +8552,16 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.245.0: - resolution: {integrity: sha512-xUBkkpIDfDZHAebnDEX65FCVitJUctab82KFmtP5SY4cGly1vbuYNe6Muyp0NLXrgmBChVdoC2T+3/RUHi4Mww==} + flow-parser@0.245.1: + resolution: {integrity: sha512-KaVIjRdCY+APtxQijfV1c7GN1bofByIlR7E6omQLW0sghkA8hh8uufQOqTf3oAAVTExsSLafmdL/QwyvE/gdEg==} engines: {node: '>=0.4.0'} focus-lock@1.3.5: resolution: {integrity: sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==} engines: {node: '>=10'} - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + follow-redirects@1.15.8: + resolution: {integrity: sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -8855,14 +8877,14 @@ packages: hermes-estree@0.22.0: resolution: {integrity: sha512-FLBt5X9OfA8BERUdc6aZS36Xz3rRuB0Y/mfocSADWEJfomc1xfene33GdyAmtTkKTBXTN/EgAy+rjTKkkZJHlw==} - hermes-estree@0.23.0: - resolution: {integrity: sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag==} + hermes-estree@0.23.1: + resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} hermes-parser@0.22.0: resolution: {integrity: sha512-gn5RfZiEXCsIWsFGsKiykekktUoh0PdFWYocXsUdZIyWSckT6UIyPcyyUIPSR3kpnELWeK3n3ztAse7Mat6PSA==} - hermes-parser@0.23.0: - resolution: {integrity: sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg==} + hermes-parser@0.23.1: + resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} @@ -9821,61 +9843,61 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - metro-babel-transformer@0.80.10: - resolution: {integrity: sha512-GXHueUzgzcazfzORDxDzWS9jVVRV6u+cR6TGvHOfGdfLzJCj7/D0PretLfyq+MwN20twHxLW+BUXkoaB8sCQBg==} + metro-babel-transformer@0.80.11: + resolution: {integrity: sha512-ViWx0rdAIyfX73HiEC1TXW0hs42fKPuPm4VxmbazM8XBIjykGnkk5i2OVm3+uA1YnAC242AzbX6uy7uJh9Pv3w==} engines: {node: '>=18'} - metro-cache-key@0.80.10: - resolution: {integrity: sha512-57qBhO3zQfoU/hP4ZlLW5hVej2jVfBX6B4NcSfMj4LgDPL3YknWg80IJBxzQfjQY/m+fmMLmPy8aUMHzUp/guA==} + metro-cache-key@0.80.11: + resolution: {integrity: sha512-axhhFOUWOvsgEHRAPSWC2gjoDZ8fiTY0ZfPzFHffXWR25arFrcg2Pdr9ONn/dWeg9gw6rCJZLfq0mEQIDU5zQA==} engines: {node: '>=18'} - metro-cache@0.80.10: - resolution: {integrity: sha512-8CBtDJwMguIE5RvV3PU1QtxUG8oSSX54mIuAbRZmcQ0MYiOl9JdrMd4JCBvIyhiZLoSStph425SMyCSnjtJsdA==} + metro-cache@0.80.11: + resolution: {integrity: sha512-Zd5M7W8r1mEGYxiK/+sI5VUn3BhugxQ1fVG6kAak1g8WKbGzM81JUbRvj/yHp3IZfvl2nEjIoxOKg3zJaNtZHg==} engines: {node: '>=18'} - metro-config@0.80.10: - resolution: {integrity: sha512-0GYAw0LkmGbmA81FepKQepL1KU/85Cyv7sAiWm6QWeV6AcVCpsKg6jGLqGHJ0LLPL60rWzA4TV1DQAlzdJAEtA==} + metro-config@0.80.11: + resolution: {integrity: sha512-NnWKDK3ZWyFnxCluTE3L+nbp30CQBjp6QEPmTCx1cFHPLoWqTX6BqHZ82e+xK95VuGjwKhWk4NihuV3WtcADtw==} engines: {node: '>=18'} - metro-core@0.80.10: - resolution: {integrity: sha512-nwBB6HbpGlNsZMuzxVqxqGIOsn5F3JKpsp8PziS7Z4mV8a/jA1d44mVOgYmDa2q5WlH5iJfRIIhdz24XRNDlLA==} + metro-core@0.80.11: + resolution: {integrity: sha512-N3I1jDAlACLzcwiZ7npPbV1ZSKdtcPDvivUaI10oCa13TJ2BeIXKlKetkB9qHjY7oyFquDRKt/P6wLlO6aliDw==} engines: {node: '>=18'} - metro-file-map@0.80.10: - resolution: {integrity: sha512-ytsUq8coneaN7ZCVk1IogojcGhLIbzWyiI2dNmw2nnBgV/0A+M5WaTTgZ6dJEz3dzjObPryDnkqWPvIGLCPtiw==} + metro-file-map@0.80.11: + resolution: {integrity: sha512-uHpAKGUWcq6F4hmapZzFFvwAVu0zF8mzgycXPwgyjgM0dmKAT3py7JTBFR/d7jrv4g3n52pvC0Ks6YiIHpFR1A==} engines: {node: '>=18'} - metro-minify-terser@0.80.10: - resolution: {integrity: sha512-Xyv9pEYpOsAerrld7cSLIcnCCpv8ItwysOmTA+AKf1q4KyE9cxrH2O2SA0FzMCkPzwxzBWmXwHUr+A89BpEM6g==} + metro-minify-terser@0.80.11: + resolution: {integrity: sha512-eBLEv394IVYghCtjSEqvRqCBwpJRc4yAMGO035PdF/tO3n0eWHWlNGj896k26KayiZLa8440/iOBorg5/RcFxg==} engines: {node: '>=18'} - metro-resolver@0.80.10: - resolution: {integrity: sha512-EYC5CL7f+bSzrqdk1bylKqFNGabfiI5PDctxoPx70jFt89Jz+ThcOscENog8Jb4LEQFG6GkOYlwmPpsi7kx3QA==} + metro-resolver@0.80.11: + resolution: {integrity: sha512-g1ntyySE22OCyy7ycdmiexcdfOS/yUrevUFg2+GCGpPWnDC4Lj71/AeKbkPVYjFEHQJhd/EALGo3EzxMhUpR5A==} engines: {node: '>=18'} - metro-runtime@0.80.10: - resolution: {integrity: sha512-Xh0N589ZmSIgJYAM+oYwlzTXEHfASZac9TYPCNbvjNTn0EHKqpoJ/+Im5G3MZT4oZzYv4YnvzRtjqS5k0tK94A==} + metro-runtime@0.80.11: + resolution: {integrity: sha512-EI7idlPKPZntUnht2ipFhIVR4+PyjRxCXi4xcDyJfrGhOJH/EfXjb5jp3sYN/np6m9HOtCniBOmL1twlDtmeaA==} engines: {node: '>=18'} - metro-source-map@0.80.10: - resolution: {integrity: sha512-EyZswqJW8Uukv/HcQr6K19vkMXW1nzHAZPWJSEyJFKIbgp708QfRZ6vnZGmrtFxeJEaFdNup4bGnu8/mIOYlyA==} + metro-source-map@0.80.11: + resolution: {integrity: sha512-s/lxGxUBVYhufYmJBLpxk1m6m73KbcXBS30T1TGPKJWhrO/hu6T0i9fqS6r/z4LdhB/TGQkHoB1VWiQ/J445iQ==} engines: {node: '>=18'} - metro-symbolicate@0.80.10: - resolution: {integrity: sha512-qAoVUoSxpfZ2DwZV7IdnQGXCSsf2cAUExUcZyuCqGlY5kaWBb0mx2BL/xbMFDJ4wBp3sVvSBPtK/rt4J7a0xBA==} + metro-symbolicate@0.80.11: + resolution: {integrity: sha512-xYQYC5dZd9qtK6gxwsnzgw3Byv9juQnJPcnt+fFcNfQBPxiZNuDa8tLq240btVGG3giQfmkNTWe1lHKsFddDBQ==} engines: {node: '>=18'} hasBin: true - metro-transform-plugins@0.80.10: - resolution: {integrity: sha512-leAx9gtA+2MHLsCeWK6XTLBbv2fBnNFu/QiYhWzMq8HsOAP4u1xQAU0tSgPs8+1vYO34Plyn79xTLUtQCRSSUQ==} + metro-transform-plugins@0.80.11: + resolution: {integrity: sha512-UFs1M8OAE6EVeja4qGo7zjmaXietO8DdcoSma4Oz9oCwXom2hVwCFCuR5QboWMOrHodLOSDNFCt5z4qK8A+FZQ==} engines: {node: '>=18'} - metro-transform-worker@0.80.10: - resolution: {integrity: sha512-zNfNLD8Rz99U+JdOTqtF2o7iTjcDMMYdVS90z6+81Tzd2D0lDWVpls7R1hadS6xwM+ymgXFQTjM6V6wFoZaC0g==} + metro-transform-worker@0.80.11: + resolution: {integrity: sha512-HQHp/Ri0GAf3MELlI3u3QJvlk0YpeDofUmvNpas+xIGEE2mOiR6sbTQYs09IncSlCfM6jtu02HMMHjBq4vxiRA==} engines: {node: '>=18'} - metro@0.80.10: - resolution: {integrity: sha512-FDPi0X7wpafmDREXe1lgg3WzETxtXh6Kpq8+IwsG35R2tMyp2kFIqDdshdohuvDt1J/qDARcEPq7V/jElTb1kA==} + metro@0.80.11: + resolution: {integrity: sha512-LQxygnIEB628EFcqCwQCkMAIQ5zf0aUnCuFzxwv9rNEwaQG6xdxoSHT8xpV625sWpOqNvrOiC0rYeQuo3aOUhQ==} engines: {node: '>=18'} hasBin: true @@ -10187,8 +10209,8 @@ packages: oauth@0.9.15: resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} - ob1@0.80.10: - resolution: {integrity: sha512-dJHyB0S6JkMorUSfSGcYGkkg9kmq3qDUu3ygZUKIfkr47XOPuG35r2Sk6tbwtHXbdKIXmcMvM8DF2CwgdyaHfQ==} + ob1@0.80.11: + resolution: {integrity: sha512-1FqQEnd4n3UJ441/eHSKCgiMGf1RbrR/aXN0ybJ27zhbq+cc4mpE4WHLuzgNEnXu/9wf43lnAUL0WN7vcVD8Yg==} engines: {node: '>=18'} obj-multiplex@1.0.0: @@ -10467,8 +10489,8 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -10597,8 +10619,8 @@ packages: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + postcss@8.4.45: + resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.6: @@ -12069,26 +12091,31 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin@1.12.2: - resolution: {integrity: sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==} + unplugin@1.13.1: + resolution: {integrity: sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==} engines: {node: '>=14.0.0'} + peerDependencies: + webpack-sources: ^3 + peerDependenciesMeta: + webpack-sources: + optional: true - unstorage@1.10.2: - resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} + unstorage@1.11.1: + resolution: {integrity: sha512-3NVszU4MGlO21WWnkSq0xnPVMHnMyB5DdJQyGRAg/DUZVeQjWRinLOia89iw5KGpllRtoA5+N+xnq75MAsPAOA==} peerDependencies: - '@azure/app-configuration': ^1.5.0 + '@azure/app-configuration': ^1.6.0 '@azure/cosmos': ^4.0.0 '@azure/data-tables': ^13.2.2 - '@azure/identity': ^4.0.1 + '@azure/identity': ^4.2.0 '@azure/keyvault-secrets': ^4.8.0 - '@azure/storage-blob': ^12.17.0 - '@capacitor/preferences': ^5.0.7 + '@azure/storage-blob': ^12.18.0 + '@capacitor/preferences': ^6.0.0 '@netlify/blobs': ^6.5.0 || ^7.0.0 - '@planetscale/database': ^1.16.0 - '@upstash/redis': ^1.28.4 + '@planetscale/database': ^1.18.0 + '@upstash/redis': ^1.31.3 '@vercel/kv': ^1.0.1 idb-keyval: ^6.2.1 - ioredis: ^5.3.2 + ioredis: ^5.4.1 peerDependenciesMeta: '@azure/app-configuration': optional: true @@ -12411,10 +12438,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -12654,8 +12677,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -13141,7 +13164,7 @@ snapshots: '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/compat-data@7.25.4': {} @@ -13308,7 +13331,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/parser@7.25.6': dependencies: @@ -14739,13 +14762,12 @@ snapshots: '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3(@types/react@18.2.62)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.62)(react@18.2.0))(@types/react@18.2.62)(react@18.2.0))(react@18.2.0) react: 18.2.0 - '@changesets/apply-release-plan@7.0.4': + '@changesets/apply-release-plan@7.0.5': dependencies: - '@babel/runtime': 7.25.6 - '@changesets/config': 3.0.2 + '@changesets/config': 3.0.3 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.0 - '@changesets/should-skip-package': 0.1.0 + '@changesets/git': 3.0.1 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 @@ -14756,12 +14778,11 @@ snapshots: resolve-from: 5.0.0 semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.3': + '@changesets/assemble-release-plan@6.0.4': dependencies: - '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.1 - '@changesets/should-skip-package': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.3 @@ -14781,19 +14802,19 @@ snapshots: '@changesets/cli@2.27.1': dependencies: '@babel/runtime': 7.25.6 - '@changesets/apply-release-plan': 7.0.4 - '@changesets/assemble-release-plan': 6.0.3 + '@changesets/apply-release-plan': 7.0.5 + '@changesets/assemble-release-plan': 6.0.4 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.2 + '@changesets/config': 3.0.3 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.1 - '@changesets/get-release-plan': 4.0.3 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-release-plan': 4.0.4 + '@changesets/git': 3.0.1 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.1 '@changesets/types': 6.0.0 - '@changesets/write': 0.3.1 + '@changesets/write': 0.3.2 '@manypkg/get-packages': 1.1.3 '@types/semver': 7.5.8 ansi-colors: 4.1.3 @@ -14813,11 +14834,11 @@ snapshots: term-size: 2.2.1 tty-table: 4.2.3 - '@changesets/config@3.0.2': + '@changesets/config@3.0.3': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.1 - '@changesets/logger': 0.1.0 + '@changesets/get-dependents-graph': 2.1.2 + '@changesets/logger': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 @@ -14827,12 +14848,11 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.1': + '@changesets/get-dependents-graph@2.1.2': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - chalk: 2.4.2 - fs-extra: 7.0.1 + picocolors: 1.1.0 semver: 7.6.3 '@changesets/get-github-info@0.6.0': @@ -14842,59 +14862,53 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.3': + '@changesets/get-release-plan@4.0.4': dependencies: - '@babel/runtime': 7.25.6 - '@changesets/assemble-release-plan': 6.0.3 - '@changesets/config': 3.0.2 - '@changesets/pre': 2.0.0 - '@changesets/read': 0.6.0 + '@changesets/assemble-release-plan': 6.0.4 + '@changesets/config': 3.0.3 + '@changesets/pre': 2.0.1 + '@changesets/read': 0.6.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.0': + '@changesets/git@3.0.1': dependencies: - '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.8 spawndamnit: 2.0.0 - '@changesets/logger@0.1.0': + '@changesets/logger@0.1.1': dependencies: - chalk: 2.4.2 + picocolors: 1.1.0 '@changesets/parse@0.4.0': dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.0': + '@changesets/pre@2.0.1': dependencies: - '@babel/runtime': 7.25.6 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.0': + '@changesets/read@0.6.1': dependencies: - '@babel/runtime': 7.25.6 - '@changesets/git': 3.0.0 - '@changesets/logger': 0.1.0 + '@changesets/git': 3.0.1 + '@changesets/logger': 0.1.1 '@changesets/parse': 0.4.0 '@changesets/types': 6.0.0 - chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 + picocolors: 1.1.0 - '@changesets/should-skip-package@0.1.0': + '@changesets/should-skip-package@0.1.1': dependencies: - '@babel/runtime': 7.25.6 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -14902,9 +14916,8 @@ snapshots: '@changesets/types@6.0.0': {} - '@changesets/write@0.3.1': + '@changesets/write@0.3.2': dependencies: - '@babel/runtime': 7.25.6 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -15993,7 +16006,7 @@ snapshots: dependencies: '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@walletconnect/qrcode-modal': 1.8.0 - '@walletconnect/sign-client': 2.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@walletconnect/sign-client': 2.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@walletconnect/utils': 2.15.1 bs58: 5.0.0 transitivePeerDependencies: @@ -16211,7 +16224,7 @@ snapshots: '@metamask/rpc-errors@6.3.1': dependencies: - '@metamask/utils': 9.2.0 + '@metamask/utils': 9.2.1 fast-safe-stringify: 2.1.1 transitivePeerDependencies: - supports-color @@ -16339,8 +16352,8 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.7 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.8 '@types/debug': 4.1.12 debug: 4.3.6 pony-cause: 2.1.11 @@ -16349,12 +16362,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/utils@9.2.0': + '@metamask/utils@9.2.1': dependencies: '@ethereumjs/tx': 4.2.0 '@metamask/superstruct': 3.1.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.7 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.8 '@types/debug': 4.1.12 debug: 4.3.6 pony-cause: 2.1.11 @@ -16475,14 +16488,16 @@ snapshots: dependencies: '@noble/hashes': 1.4.0 - '@noble/curves@1.5.0': + '@noble/curves@1.6.0': dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@noble/hashes@1.3.2': {} '@noble/hashes@1.4.0': {} + '@noble/hashes@1.5.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -17223,7 +17238,7 @@ snapshots: semver: 7.6.3 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.5.0 + yaml: 2.5.1 transitivePeerDependencies: - typescript @@ -17233,7 +17248,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.4.1 + fast-xml-parser: 4.5.0 logkitty: 0.7.1 '@react-native-community/cli-platform-apple@14.0.0': @@ -17242,7 +17257,7 @@ snapshots: chalk: 4.1.2 execa: 5.1.1 fast-glob: 3.3.2 - fast-xml-parser: 4.4.1 + fast-xml-parser: 4.5.0 ora: 5.4.1 '@react-native-community/cli-platform-ios@14.0.0': @@ -17417,9 +17432,9 @@ snapshots: '@react-native/metro-babel-transformer': 0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2)) chalk: 4.1.2 execa: 5.1.1 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-config: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-core: 0.80.10 + metro: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-config: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-core: 0.80.11 node-fetch: 2.7.0 querystring: 0.2.1 readline: 1.3.0 @@ -17487,23 +17502,6 @@ snapshots: optionalDependencies: '@types/react': 18.2.62 - '@react-native/virtualized-lists@0.75.2(@types/react@18.2.62)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 18.2.0 - react-native: 0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10) - optionalDependencies: - '@types/react': 18.2.62 - optional: true - - '@react-native/virtualized-lists@0.75.2(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react-native: 0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10) - optional: true - '@rollup/plugin-inject@5.0.5(rollup@4.21.2)': dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.21.2) @@ -17568,6 +17566,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.2': optional: true + '@rtsao/scc@1.1.0': {} + '@rushstack/eslint-patch@1.10.4': {} '@safe-global/safe-apps-provider@0.18.3(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4)': @@ -17592,29 +17592,29 @@ snapshots: '@safe-global/safe-gateway-typescript-sdk@3.22.2': {} - '@scure/base@1.1.7': {} + '@scure/base@1.1.8': {} '@scure/bip32@1.3.2': dependencies: '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 - '@scure/base': 1.1.7 + '@scure/base': 1.1.8 '@scure/bip32@1.4.0': dependencies: - '@noble/curves': 1.4.2 + '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 - '@scure/base': 1.1.7 + '@scure/base': 1.1.8 '@scure/bip39@1.2.1': dependencies: '@noble/hashes': 1.3.2 - '@scure/base': 1.1.7 + '@scure/base': 1.1.8 '@scure/bip39@1.3.0': dependencies: '@noble/hashes': 1.4.0 - '@scure/base': 1.1.7 + '@scure/base': 1.1.8 '@sentry-internal/feedback@7.92.0': dependencies: @@ -18166,40 +18166,6 @@ snapshots: - tslib - utf-8-validate - '@solana/wallet-adapter-trezor@0.1.2(@babel/core@7.25.2)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/connect-web': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - buffer: 6.0.3 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - tslib - - utf-8-validate - - '@solana/wallet-adapter-trezor@0.1.2(@babel/core@7.25.2)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/connect-web': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - buffer: 6.0.3 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - tslib - - utf-8-validate - '@solana/wallet-adapter-trust@0.1.13(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) @@ -18207,7 +18173,7 @@ snapshots: '@solana/wallet-adapter-unsafe-burner@0.1.7(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: - '@noble/curves': 1.5.0 + '@noble/curves': 1.6.0 '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-standard-features': 1.2.0 '@solana/wallet-standard-util': 1.1.1 @@ -18305,76 +18271,7 @@ snapshots: - uWebSockets.js - utf-8-validate - '@solana/wallet-adapter-wallets@0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0)(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-bitkeep': 0.3.20(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-bitpie': 0.5.18(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-clover': 0.4.19(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-coin98': 0.5.20(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-coinbase': 0.1.19(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-coinhub': 0.3.18(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-fractal': 0.1.8(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@solana/wallet-adapter-huobi': 0.1.15(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-hyperpay': 0.1.14(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-keystone': 0.1.15(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-krystal': 0.1.12(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-ledger': 0.9.25(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-mathwallet': 0.9.18(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-neko': 0.2.12(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-nightly': 0.1.16(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-nufi': 0.1.17(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-onto': 0.1.7(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bs58@6.0.0) - '@solana/wallet-adapter-phantom': 0.9.24(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-safepal': 0.5.18(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-saifu': 0.1.15(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-salmon': 0.1.14(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-sky': 0.1.15(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-solflare': 0.6.28(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-solong': 0.9.18(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-spot': 0.1.15(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-tokenary': 0.1.12(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-tokenpocket': 0.4.19(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-torus': 0.11.28(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-trezor': 0.1.2(@babel/core@7.25.2)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-trust': 0.1.13(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-unsafe-burner': 0.1.7(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-walletconnect': 0.1.16(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-xdefi': 0.1.7(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@babel/core' - - '@babel/runtime' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@sentry/types' - - '@upstash/redis' - - '@vercel/kv' - - bs58 - - bufferutil - - encoding - - expo-constants - - expo-localization - - ioredis - - react - - react-dom - - react-native - - supports-color - - tslib - - uWebSockets.js - - utf-8-validate - - '@solana/wallet-adapter-wallets@0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@solana/wallet-adapter-wallets@0.19.32(@babel/core@7.25.2)(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(tslib@2.7.0)(utf-8-validate@5.0.10)': dependencies: '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) @@ -18407,7 +18304,7 @@ snapshots: '@solana/wallet-adapter-tokenary': 0.1.12(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-tokenpocket': 0.4.19(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-torus': 0.11.28(@babel/runtime@7.25.6)(@sentry/types@7.92.0)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-trezor': 0.1.2(@babel/core@7.25.2)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + '@solana/wallet-adapter-trezor': 0.1.2(@babel/core@7.25.2)(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) '@solana/wallet-adapter-trust': 0.1.13(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.7(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-walletconnect': 0.1.16(@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -18459,15 +18356,15 @@ snapshots: '@solana/wallet-standard-util@1.1.1': dependencies: - '@noble/curves': 1.5.0 + '@noble/curves': 1.6.0 '@solana/wallet-standard-chains': 1.1.0 '@solana/wallet-standard-features': 1.2.0 '@solana/web3.js@1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.25.6 - '@noble/curves': 1.5.0 - '@noble/hashes': 1.4.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 '@solana/buffer-layout': 4.0.1 agentkeepalive: 4.5.0 bigint-buffer: 1.1.5 @@ -18637,6 +18534,7 @@ snapshots: - '@types/react-dom' - encoding - supports-color + - webpack-sources '@storybook/addon-essentials@7.6.7(@types/react-dom@18.2.7)(@types/react@18.2.62)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -18661,6 +18559,7 @@ snapshots: - '@types/react-dom' - encoding - supports-color + - webpack-sources '@storybook/addon-highlight@7.6.7': dependencies: @@ -18745,7 +18644,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.7(typescript@5.3.3)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6))': + '@storybook/builder-vite@7.6.7(typescript@5.3.3)(vite@5.2.11(@types/node@20.11.5))': dependencies: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 @@ -18769,6 +18668,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + - webpack-sources '@storybook/channels@7.6.7': dependencies: @@ -18880,7 +18780,7 @@ snapshots: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.47 + '@types/node': 18.19.49 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -18925,7 +18825,7 @@ snapshots: '@storybook/telemetry': 7.6.7 '@storybook/types': 7.6.7 '@types/detect-port': 1.3.5 - '@types/node': 18.19.47 + '@types/node': 18.19.49 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -18959,9 +18859,10 @@ snapshots: '@storybook/csf-plugin@7.6.7': dependencies: '@storybook/csf-tools': 7.6.7 - unplugin: 1.12.2 + unplugin: 1.13.1 transitivePeerDependencies: - supports-color + - webpack-sources '@storybook/csf-tools@7.6.7': dependencies: @@ -19086,9 +18987,9 @@ snapshots: '@types/express': 4.17.21 file-system-cache: 2.3.0 - '@storybook/web-components-vite@7.6.7(bufferutil@4.0.8)(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6))': + '@storybook/web-components-vite@7.6.7(bufferutil@4.0.8)(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10)(vite@5.2.11(@types/node@20.11.5))': dependencies: - '@storybook/builder-vite': 7.6.7(typescript@5.3.3)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)) + '@storybook/builder-vite': 7.6.7(typescript@5.3.3)(vite@5.2.11(@types/node@20.11.5)) '@storybook/core-server': 7.6.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@storybook/node-logger': 7.6.7 '@storybook/web-components': 7.6.7(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -19105,6 +19006,7 @@ snapshots: - utf-8-validate - vite - vite-plugin-glimmerx + - webpack-sources '@storybook/web-components@7.6.7(lit@3.1.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -19126,7 +19028,7 @@ snapshots: '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.12': + '@swc/helpers@0.5.13': dependencies: tslib: 2.7.0 @@ -19147,7 +19049,7 @@ snapshots: - utf-8-validate - zod - '@synthetixio/synpress-cache@0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3)': + '@synthetixio/synpress-cache@0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3)': dependencies: axios: 1.6.7 chalk: 5.3.0 @@ -19158,7 +19060,7 @@ snapshots: gradient-string: 2.0.2 playwright-core: 1.44.0 progress: 2.0.3 - tsup: 8.0.2(postcss@8.4.41)(typescript@5.3.3) + tsup: 8.0.2(postcss@8.4.45)(typescript@5.3.3) unzipper: 0.10.14 zod: 3.22.4 transitivePeerDependencies: @@ -19174,10 +19076,10 @@ snapshots: dependencies: '@playwright/test': 1.44.0 - '@synthetixio/synpress-metamask@0.0.1-alpha.7(patch_hash=fj5b4lzbslgihe6pqcmuyxpfd4)(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3)(utf-8-validate@5.0.10)': + '@synthetixio/synpress-metamask@0.0.1-alpha.7(patch_hash=fj5b4lzbslgihe6pqcmuyxpfd4)(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3)(utf-8-validate@5.0.10)': dependencies: '@playwright/test': 1.44.0 - '@synthetixio/synpress-cache': 0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3) + '@synthetixio/synpress-cache': 0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3) '@synthetixio/synpress-core': 0.0.1-alpha.7(@playwright/test@1.44.0) '@viem/anvil': 0.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10) fs-extra: 11.2.0 @@ -19194,13 +19096,13 @@ snapshots: - typescript - utf-8-validate - '@synthetixio/synpress@4.0.0-alpha.7(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@synthetixio/synpress@4.0.0-alpha.7(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@playwright/test': 1.44.0 '@synthetixio/ethereum-wallet-mock': 0.0.1-alpha.7(@playwright/test@1.44.0)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@synthetixio/synpress-cache': 0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3) + '@synthetixio/synpress-cache': 0.0.1-alpha.7(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3) '@synthetixio/synpress-core': 0.0.1-alpha.7(@playwright/test@1.44.0) - '@synthetixio/synpress-metamask': 0.0.1-alpha.7(patch_hash=fj5b4lzbslgihe6pqcmuyxpfd4)(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.41)(typescript@5.3.3)(utf-8-validate@5.0.10) + '@synthetixio/synpress-metamask': 0.0.1-alpha.7(patch_hash=fj5b4lzbslgihe6pqcmuyxpfd4)(@playwright/test@1.44.0)(bufferutil@4.0.8)(playwright-core@1.44.0)(postcss@8.4.45)(typescript@5.3.3)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@microsoft/api-extractor' - '@swc/core' @@ -19354,26 +19256,6 @@ snapshots: - expo-localization - react-native - '@trezor/analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - - '@trezor/analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - '@trezor/blockchain-link-types@1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10)': dependencies: '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -19402,74 +19284,56 @@ snapshots: - react-native - utf-8-validate - '@trezor/blockchain-link-utils@1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@trezor/blockchain-link@2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': dependencies: - '@mobily/ts-belt': 3.13.1 + '@solana/buffer-layout': 4.0.1 '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) + '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) + '@trezor/blockchain-link-utils': 1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) '@trezor/utils': 9.2.0(tslib@2.7.0) + '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) + '@types/web': 0.0.138 + events: 3.3.0 + ripple-lib: 1.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + socks-proxy-agent: 6.1.1 tslib: 2.7.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding - expo-constants - expo-localization - react-native + - supports-color - utf-8-validate - '@trezor/blockchain-link-utils@1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@trezor/connect-analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': dependencies: - '@mobily/ts-belt': 3.13.1 - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) + '@trezor/analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) tslib: 2.7.0 transitivePeerDependencies: - - bufferutil - - encoding - expo-constants - expo-localization - react-native - - utf-8-validate - '@trezor/blockchain-link@2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@trezor/connect-common@0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-utils': 1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) '@trezor/utils': 9.2.0(tslib@2.7.0) - '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - '@types/web': 0.0.138 - events: 3.3.0 - ripple-lib: 1.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - socks-proxy-agent: 6.1.1 tslib: 2.7.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - - bufferutil - - encoding - expo-constants - expo-localization - react-native - - supports-color - - utf-8-validate - '@trezor/blockchain-link@2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@trezor/connect-web@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-utils': 1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + '@trezor/connect': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) '@trezor/utils': 9.2.0(tslib@2.7.0) - '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - '@types/web': 0.0.138 - events: 3.3.0 - ripple-lib: 1.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - socks-proxy-agent: 6.1.1 tslib: 2.7.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: + - '@babel/core' - bufferutil - encoding - expo-constants @@ -19478,21 +19342,29 @@ snapshots: - supports-color - utf-8-validate - '@trezor/blockchain-link@2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': + '@trezor/connect@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': dependencies: - '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) + '@ethereumjs/common': 4.4.0 + '@ethereumjs/tx': 5.4.0 + '@fivebinaries/coin-selection': 2.2.1 + '@trezor/blockchain-link': 2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-utils': 1.2.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) + '@trezor/connect-analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) + '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) + '@trezor/protobuf': 1.2.0(tslib@2.7.0) + '@trezor/protocol': 1.2.0(tslib@2.7.0) + '@trezor/schema-utils': 1.2.0(tslib@2.7.0) + '@trezor/transport': 1.3.0(tslib@2.7.0) '@trezor/utils': 9.2.0(tslib@2.7.0) '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - '@types/web': 0.0.138 - events: 3.3.0 - ripple-lib: 1.10.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - socks-proxy-agent: 6.1.1 + blakejs: 1.2.1 + bs58: 5.0.0 + bs58check: 3.0.1 + cross-fetch: 4.0.0 tslib: 2.7.0 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: + - '@babel/core' - bufferutil - encoding - expo-constants @@ -19501,232 +19373,20 @@ snapshots: - supports-color - utf-8-validate - '@trezor/connect-analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': + '@trezor/env-utils@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': dependencies: - '@trezor/analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native + ua-parser-js: 1.0.38 + optionalDependencies: + react-native: 0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10) - '@trezor/connect-analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': + '@trezor/protobuf@1.2.0(tslib@2.7.0)': dependencies: - '@trezor/analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) + '@trezor/schema-utils': 1.2.0(tslib@2.7.0) + protobufjs: 7.2.6 tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - '@trezor/connect-analytics@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - - '@trezor/connect-common@0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - - '@trezor/connect-common@0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - - '@trezor/connect-common@0.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - '@trezor/env-utils': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - expo-constants - - expo-localization - - react-native - - '@trezor/connect-web@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@trezor/connect': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/connect-web@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@trezor/connect': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/connect-web@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@trezor/connect': 9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/connect@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@ethereumjs/common': 4.4.0 - '@ethereumjs/tx': 5.4.0 - '@fivebinaries/coin-selection': 2.2.1 - '@trezor/blockchain-link': 2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/protobuf': 1.2.0(tslib@2.7.0) - '@trezor/protocol': 1.2.0(tslib@2.7.0) - '@trezor/schema-utils': 1.2.0(tslib@2.7.0) - '@trezor/transport': 1.3.0(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - blakejs: 1.2.1 - bs58: 5.0.0 - bs58check: 3.0.1 - cross-fetch: 4.0.0 - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/connect@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@ethereumjs/common': 4.4.0 - '@ethereumjs/tx': 5.4.0 - '@fivebinaries/coin-selection': 2.2.1 - '@trezor/blockchain-link': 2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/protobuf': 1.2.0(tslib@2.7.0) - '@trezor/protocol': 1.2.0(tslib@2.7.0) - '@trezor/schema-utils': 1.2.0(tslib@2.7.0) - '@trezor/transport': 1.3.0(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - blakejs: 1.2.1 - bs58: 5.0.0 - bs58check: 3.0.1 - cross-fetch: 4.0.0 - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/connect@9.4.0(@babel/core@7.25.2)(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10)': - dependencies: - '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) - '@ethereumjs/common': 4.4.0 - '@ethereumjs/tx': 5.4.0 - '@fivebinaries/coin-selection': 2.2.1 - '@trezor/blockchain-link': 2.3.0(bufferutil@4.0.8)(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/blockchain-link-types': 1.2.0(bufferutil@4.0.8)(tslib@2.7.0)(utf-8-validate@5.0.10) - '@trezor/connect-analytics': 1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/connect-common': 0.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0) - '@trezor/protobuf': 1.2.0(tslib@2.7.0) - '@trezor/protocol': 1.2.0(tslib@2.7.0) - '@trezor/schema-utils': 1.2.0(tslib@2.7.0) - '@trezor/transport': 1.3.0(tslib@2.7.0) - '@trezor/utils': 9.2.0(tslib@2.7.0) - '@trezor/utxo-lib': 2.2.0(tslib@2.7.0) - blakejs: 1.2.1 - bs58: 5.0.0 - bs58check: 3.0.1 - cross-fetch: 4.0.0 - tslib: 2.7.0 - transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding - - expo-constants - - expo-localization - - react-native - - supports-color - - utf-8-validate - - '@trezor/env-utils@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - tslib: 2.7.0 - ua-parser-js: 1.0.38 - optionalDependencies: - react-native: 0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10) - - '@trezor/env-utils@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - tslib: 2.7.0 - ua-parser-js: 1.0.38 - optionalDependencies: - react-native: 0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10) - - '@trezor/env-utils@1.2.0(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10))(tslib@2.7.0)': - dependencies: - tslib: 2.7.0 - ua-parser-js: 1.0.38 - optionalDependencies: - react-native: 0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10) - - '@trezor/protobuf@1.2.0(tslib@2.7.0)': - dependencies: - '@trezor/schema-utils': 1.2.0(tslib@2.7.0) - protobufjs: 7.2.6 - tslib: 2.7.0 - - '@trezor/protocol@1.2.0(tslib@2.7.0)': + '@trezor/protocol@1.2.0(tslib@2.7.0)': dependencies: tslib: 2.7.0 @@ -19918,7 +19578,7 @@ snapshots: '@types/node@18.15.13': {} - '@types/node@18.19.47': + '@types/node@18.19.49': dependencies: undici-types: 5.26.5 @@ -20135,7 +19795,7 @@ snapshots: - debug - utf-8-validate - '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6))': + '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@20.11.5))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) @@ -20146,14 +19806,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.2.1(vite@5.2.9(@types/node@20.11.5)(terser@5.31.6))': + '@vitejs/plugin-react@4.2.1(vite@5.2.9(@types/node@20.11.5))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.2.9(@types/node@20.11.5)(terser@5.31.6) + vite: 5.2.9(@types/node@20.11.5) transitivePeerDependencies: - supports-color @@ -20162,12 +19822,12 @@ snapshots: vite: 5.2.11(@types/node@20.11.5)(terser@5.31.6) vue: 3.4.3(typescript@5.3.3) - '@vitejs/plugin-vue@5.1.3(vite@5.2.9(@types/node@20.11.5)(terser@5.31.6))(vue@3.4.3(typescript@5.3.3))': + '@vitejs/plugin-vue@5.1.3(vite@5.2.9(@types/node@20.11.5))(vue@3.4.3(typescript@5.3.3))': dependencies: - vite: 5.2.9(@types/node@20.11.5)(terser@5.31.6) + vite: 5.2.9(@types/node@20.11.5) vue: 3.4.3(typescript@5.3.3) - '@vitest/coverage-v8@1.1.2(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6))': + '@vitest/coverage-v8@1.1.2(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -20178,15 +19838,15 @@ snapshots: istanbul-reports: 3.1.7 magic-string: 0.30.11 magicast: 0.3.5 - picocolors: 1.0.1 + picocolors: 1.1.0 std-env: 3.7.0 test-exclude: 6.0.0 v8-to-istanbul: 9.3.0 - vitest: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + vitest: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6))': + '@vitest/coverage-v8@2.0.5(vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -20200,7 +19860,7 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6) + vitest: 2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6) transitivePeerDependencies: - supports-color @@ -20535,6 +20195,42 @@ snapshots: - uWebSockets.js - utf-8-validate + '@walletconnect/core@2.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.15.2 + '@walletconnect/utils': 2.15.2 + events: 3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - ioredis + - uWebSockets.js + - utf-8-validate + '@walletconnect/environment@1.0.1': dependencies: tslib: 1.14.1 @@ -20689,7 +20385,7 @@ snapshots: dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.1 - unstorage: 1.10.2(idb-keyval@6.2.1) + unstorage: 1.11.1(idb-keyval@6.2.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -20853,6 +20549,35 @@ snapshots: - uWebSockets.js - utf-8-validate + '@walletconnect/sign-client@2.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/core': 2.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.15.2 + '@walletconnect/utils': 2.15.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - ioredis + - uWebSockets.js + - utf-8-validate + '@walletconnect/time@1.0.2': dependencies: tslib: 1.14.1 @@ -20931,6 +20656,30 @@ snapshots: - ioredis - uWebSockets.js + '@walletconnect/types@2.15.2': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + '@walletconnect/universal-provider@2.14.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -21055,6 +20804,40 @@ snapshots: - ioredis - uWebSockets.js + '@walletconnect/utils@2.15.2': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.15.2 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.5.7 + query-string: 7.1.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + '@walletconnect/window-getters@1.0.0': {} '@walletconnect/window-getters@1.0.1': @@ -21349,7 +21132,7 @@ snapshots: caniuse-lite: 1.0.30001655 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 postcss: 8.4.35 postcss-value-parser: 4.2.0 @@ -21361,7 +21144,7 @@ snapshots: axios@1.6.7: dependencies: - follow-redirects: 1.15.6 + follow-redirects: 1.15.8 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -21369,15 +21152,13 @@ snapshots: axios@1.7.2: dependencies: - follow-redirects: 1.15.6 + follow-redirects: 1.15.8 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - axobject-query@3.1.1: - dependencies: - deep-equal: 2.2.3 + axobject-query@4.1.0: {} babel-core@7.0.0-bridge.0(@babel/core@7.25.2): dependencies: @@ -21642,7 +21423,7 @@ snapshots: bs58check@3.0.1: dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 bs58: 5.0.0 bser@2.1.1: @@ -22784,10 +22565,10 @@ snapshots: '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) - eslint-plugin-jsx-a11y: 6.9.0(eslint@8.56.0) - eslint-plugin-react: 7.35.0(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.56.0) + eslint-plugin-react: 7.35.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.56.0) optionalDependencies: typescript: 5.3.3 @@ -22803,10 +22584,10 @@ snapshots: '@typescript-eslint/parser': 6.18.1(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) - eslint-plugin-react: 7.35.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0) + eslint-plugin-react: 7.35.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) optionalDependencies: typescript: 5.3.3 @@ -22827,56 +22608,56 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.56.0 - eslint-module-utils: 2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0))(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.1.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6 enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.8.0 is-bun-module: 1.1.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0): + eslint-module-utils@2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0))(eslint@8.56.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -22886,19 +22667,20 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.18.1(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.56.0): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -22907,7 +22689,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.56.0))(eslint@8.56.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -22924,8 +22706,9 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.57.0): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -22934,7 +22717,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.2(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -22951,14 +22734,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.9.0(eslint@8.56.0): + eslint-plugin-jsx-a11y@6.10.0(eslint@8.56.0): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.10.0 - axobject-query: 3.1.1 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 @@ -22971,14 +22754,14 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-jsx-a11y@6.9.0(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 axe-core: 4.10.0 - axobject-query: 3.1.1 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 @@ -23015,7 +22798,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react@7.35.0(eslint@8.56.0): + eslint-plugin-react@7.35.2(eslint@8.56.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -23037,7 +22820,7 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-plugin-react@7.35.0(eslint@8.57.0): + eslint-plugin-react@7.35.2(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -23445,7 +23228,7 @@ snapshots: dependencies: strnum: 1.0.5 - fast-xml-parser@4.4.1: + fast-xml-parser@4.5.0: dependencies: strnum: 1.0.5 @@ -23558,13 +23341,13 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.245.0: {} + flow-parser@0.245.1: {} focus-lock@1.3.5: dependencies: tslib: 2.7.0 - follow-redirects@1.15.6: {} + follow-redirects@1.15.8: {} for-each@0.3.3: dependencies: @@ -23901,15 +23684,15 @@ snapshots: hermes-estree@0.22.0: {} - hermes-estree@0.23.0: {} + hermes-estree@0.23.1: {} hermes-parser@0.22.0: dependencies: hermes-estree: 0.22.0 - hermes-parser@0.23.0: + hermes-parser@0.23.1: dependencies: - hermes-estree: 0.23.0 + hermes-estree: 0.23.1 hey-listen@1.0.8: {} @@ -23965,7 +23748,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6 + follow-redirects: 1.15.8 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -24502,7 +24285,7 @@ snapshots: '@babel/register': 7.24.6(@babel/core@7.25.2) babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) chalk: 4.1.2 - flow-parser: 0.245.0 + flow-parser: 0.245.1 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -24527,7 +24310,7 @@ snapshots: '@babel/register': 7.24.6(@babel/core@7.25.2) babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) chalk: 4.1.2 - flow-parser: 0.245.0 + flow-parser: 0.245.1 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -24961,48 +24744,47 @@ snapshots: methods@1.1.2: {} - metro-babel-transformer@0.80.10: + metro-babel-transformer@0.80.11: dependencies: '@babel/core': 7.25.2 flow-enums-runtime: 0.0.6 - hermes-parser: 0.23.0 + hermes-parser: 0.23.1 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - metro-cache-key@0.80.10: + metro-cache-key@0.80.11: dependencies: flow-enums-runtime: 0.0.6 - metro-cache@0.80.10: + metro-cache@0.80.11: dependencies: exponential-backoff: 3.1.1 flow-enums-runtime: 0.0.6 - metro-core: 0.80.10 + metro-core: 0.80.11 - metro-config@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro-config@0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: connect: 3.7.0 cosmiconfig: 5.2.1 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-cache: 0.80.10 - metro-core: 0.80.10 - metro-runtime: 0.80.10 + metro: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-cache: 0.80.11 + metro-core: 0.80.11 + metro-runtime: 0.80.11 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate - metro-core@0.80.10: + metro-core@0.80.11: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 - metro-resolver: 0.80.10 + metro-resolver: 0.80.11 - metro-file-map@0.80.10: + metro-file-map@0.80.11: dependencies: anymatch: 3.1.3 debug: 2.6.9 @@ -25020,39 +24802,39 @@ snapshots: transitivePeerDependencies: - supports-color - metro-minify-terser@0.80.10: + metro-minify-terser@0.80.11: dependencies: flow-enums-runtime: 0.0.6 terser: 5.31.6 - metro-resolver@0.80.10: + metro-resolver@0.80.11: dependencies: flow-enums-runtime: 0.0.6 - metro-runtime@0.80.10: + metro-runtime@0.80.11: dependencies: '@babel/runtime': 7.25.6 flow-enums-runtime: 0.0.6 - metro-source-map@0.80.10: + metro-source-map@0.80.11: dependencies: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-symbolicate: 0.80.10 + metro-symbolicate: 0.80.11 nullthrows: 1.1.1 - ob1: 0.80.10 + ob1: 0.80.11 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-symbolicate@0.80.10: + metro-symbolicate@0.80.11: dependencies: flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-source-map: 0.80.10 + metro-source-map: 0.80.11 nullthrows: 1.1.1 source-map: 0.5.7 through2: 2.0.5 @@ -25060,7 +24842,7 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-plugins@0.80.10: + metro-transform-plugins@0.80.11: dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.6 @@ -25071,28 +24853,27 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro-transform-worker@0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.6 '@babel/parser': 7.25.6 '@babel/types': 7.25.6 flow-enums-runtime: 0.0.6 - metro: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-babel-transformer: 0.80.10 - metro-cache: 0.80.10 - metro-cache-key: 0.80.10 - metro-minify-terser: 0.80.10 - metro-source-map: 0.80.10 - metro-transform-plugins: 0.80.10 + metro: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-babel-transformer: 0.80.11 + metro-cache: 0.80.11 + metro-cache-key: 0.80.11 + metro-minify-terser: 0.80.11 + metro-source-map: 0.80.11 + metro-transform-plugins: 0.80.11 nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate - metro@0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10): + metro@0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@babel/code-frame': 7.24.7 '@babel/core': 7.25.2 @@ -25110,26 +24891,25 @@ snapshots: error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 - hermes-parser: 0.23.0 + hermes-parser: 0.23.1 image-size: 1.1.1 invariant: 2.2.4 jest-worker: 29.7.0 jsc-safe-url: 0.2.4 lodash.throttle: 4.1.1 - metro-babel-transformer: 0.80.10 - metro-cache: 0.80.10 - metro-cache-key: 0.80.10 - metro-config: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) - metro-core: 0.80.10 - metro-file-map: 0.80.10 - metro-resolver: 0.80.10 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 - metro-symbolicate: 0.80.10 - metro-transform-plugins: 0.80.10 - metro-transform-worker: 0.80.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-babel-transformer: 0.80.11 + metro-cache: 0.80.11 + metro-cache-key: 0.80.11 + metro-config: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) + metro-core: 0.80.11 + metro-file-map: 0.80.11 + metro-resolver: 0.80.11 + metro-runtime: 0.80.11 + metro-source-map: 0.80.11 + metro-symbolicate: 0.80.11 + metro-transform-plugins: 0.80.11 + metro-transform-worker: 0.80.11(bufferutil@4.0.8)(utf-8-validate@5.0.10) mime-types: 2.1.35 - node-fetch: 2.7.0 nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 @@ -25139,7 +24919,6 @@ snapshots: yargs: 17.7.2 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate @@ -25440,7 +25219,7 @@ snapshots: oauth@0.9.15: {} - ob1@0.80.10: + ob1@0.80.11: dependencies: flow-enums-runtime: 0.0.6 @@ -25722,7 +25501,7 @@ snapshots: pend@1.2.0: {} - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -25812,16 +25591,16 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.35): dependencies: lilconfig: 3.1.2 - yaml: 2.5.0 + yaml: 2.5.1 optionalDependencies: postcss: 8.4.35 - postcss-load-config@4.0.2(postcss@8.4.41): + postcss-load-config@4.0.2(postcss@8.4.45): dependencies: lilconfig: 3.1.2 - yaml: 2.5.0 + yaml: 2.5.1 optionalDependencies: - postcss: 8.4.41 + postcss: 8.4.45 postcss-nested@6.2.0(postcss@8.4.35): dependencies: @@ -25838,19 +25617,19 @@ snapshots: postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 + picocolors: 1.1.0 source-map-js: 1.2.0 postcss@8.4.35: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 + picocolors: 1.1.0 source-map-js: 1.2.0 - postcss@8.4.41: + postcss@8.4.45: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 + picocolors: 1.1.0 source-map-js: 1.2.0 preact-render-to-string@5.2.6(preact@10.23.2): @@ -26199,8 +25978,8 @@ snapshots: jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 + metro-runtime: 0.80.11 + metro-source-map: 0.80.11 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 @@ -26251,8 +26030,8 @@ snapshots: jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 + metro-runtime: 0.80.11 + metro-source-map: 0.80.11 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 @@ -26278,109 +26057,6 @@ snapshots: - typescript - utf-8-validate - react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 14.0.0(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10) - '@react-native-community/cli-platform-android': 14.0.0 - '@react-native-community/cli-platform-ios': 14.0.0 - '@react-native/assets-registry': 0.75.2 - '@react-native/codegen': 0.75.2(@babel/preset-env@7.25.4(@babel/core@7.25.2)) - '@react-native/community-cli-plugin': 0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native/gradle-plugin': 0.75.2 - '@react-native/js-polyfills': 0.75.2 - '@react-native/normalize-colors': 0.75.2 - '@react-native/virtualized-lists': 0.75.2(@types/react@18.2.62)(react-native@0.75.2(@babel/core@7.25.2)(@types/react@18.2.62)(bufferutil@4.0.8)(react@18.2.0)(typescript@5.3.3)(utf-8-validate@5.0.10))(react@18.2.0) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - glob: 7.2.3 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 - memoize-one: 5.2.1 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 - mkdirp: 0.5.6 - nullthrows: 1.1.1 - pretty-format: 26.6.2 - promise: 8.3.0 - react: 18.2.0 - react-devtools-core: 5.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - react-refresh: 0.14.2 - regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: 7.6.3 - stacktrace-parser: 0.1.10 - whatwg-fetch: 3.6.20 - ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - yargs: 17.7.2 - optionalDependencies: - '@types/react': 18.2.62 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - optional: true - - react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 14.0.0(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10) - '@react-native-community/cli-platform-android': 14.0.0 - '@react-native-community/cli-platform-ios': 14.0.0 - '@react-native/assets-registry': 0.75.2 - '@react-native/codegen': 0.75.2(@babel/preset-env@7.25.4(@babel/core@7.25.2)) - '@react-native/community-cli-plugin': 0.75.2(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@react-native/gradle-plugin': 0.75.2 - '@react-native/js-polyfills': 0.75.2 - '@react-native/normalize-colors': 0.75.2 - '@react-native/virtualized-lists': 0.75.2(react-native@0.75.2(@babel/core@7.25.2)(bufferutil@4.0.8)(typescript@5.3.3)(utf-8-validate@5.0.10)) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - glob: 7.2.3 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 - memoize-one: 5.2.1 - metro-runtime: 0.80.10 - metro-source-map: 0.80.10 - mkdirp: 0.5.6 - nullthrows: 1.1.1 - pretty-format: 26.6.2 - promise: 8.3.0 - react-devtools-core: 5.3.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) - react-refresh: 0.14.2 - regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: 7.6.3 - stacktrace-parser: 0.1.10 - whatwg-fetch: 3.6.20 - ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - yargs: 17.7.2 - transitivePeerDependencies: - - '@babel/core' - - '@babel/preset-env' - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - optional: true - react-qr-reader@2.2.1(react-dom@16.13.1(react@16.13.1))(react@16.13.1): dependencies: jsqr: 1.4.0 @@ -26756,7 +26432,7 @@ snapshots: rpc-websockets@9.0.2: dependencies: - '@swc/helpers': 0.5.12 + '@swc/helpers': 0.5.13 '@types/uuid': 8.3.4 '@types/ws': 8.5.12 buffer: 6.0.3 @@ -27280,7 +26956,7 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 postcss: 8.4.35 postcss-import: 15.1.0(postcss@8.4.35) postcss-js: 4.0.1(postcss@8.4.35) @@ -27477,7 +27153,7 @@ snapshots: tslib@2.7.0: {} - tsup@8.0.2(postcss@8.4.41)(typescript@5.3.3): + tsup@8.0.2(postcss@8.4.45)(typescript@5.3.3): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -27487,14 +27163,14 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.41) + postcss-load-config: 4.0.2(postcss@8.4.45) resolve-from: 5.0.0 rollup: 4.21.2 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.41 + postcss: 8.4.45 typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -27688,14 +27364,12 @@ snapshots: unpipe@1.0.0: {} - unplugin@1.12.2: + unplugin@1.13.1: dependencies: acorn: 8.12.1 - chokidar: 3.6.0 - webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 - unstorage@1.10.2(idb-keyval@6.2.1): + unstorage@1.11.1(idb-keyval@6.2.1): dependencies: anymatch: 3.1.3 chokidar: 3.6.0 @@ -27737,7 +27411,7 @@ snapshots: dependencies: browserslist: 4.23.3 escalade: 3.2.0 - picocolors: 1.0.1 + picocolors: 1.1.0 uqr@0.1.2: {} @@ -27905,7 +27579,7 @@ snapshots: - supports-color - terser - vite-plugin-node-polyfills@0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)(terser@5.31.6)): + vite-plugin-node-polyfills@0.22.0(rollup@4.21.2)(vite@5.2.11(@types/node@20.11.5)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.21.2) node-stdlib-browser: 1.2.0 @@ -27913,11 +27587,11 @@ snapshots: transitivePeerDependencies: - rollup - vite-size@0.0.5(@types/node@20.11.5)(terser@5.31.6)(vue@3.4.3(typescript@5.3.3)): + vite-size@0.0.5(@types/node@20.11.5)(vue@3.4.3(typescript@5.3.3)): dependencies: - '@vitejs/plugin-react': 4.2.1(vite@5.2.9(@types/node@20.11.5)(terser@5.31.6)) - '@vitejs/plugin-vue': 5.1.3(vite@5.2.9(@types/node@20.11.5)(terser@5.31.6))(vue@3.4.3(typescript@5.3.3)) - vite: 5.2.9(@types/node@20.11.5)(terser@5.31.6) + '@vitejs/plugin-react': 4.2.1(vite@5.2.9(@types/node@20.11.5)) + '@vitejs/plugin-vue': 5.1.3(vite@5.2.9(@types/node@20.11.5))(vue@3.4.3(typescript@5.3.3)) + vite: 5.2.9(@types/node@20.11.5) transitivePeerDependencies: - '@types/node' - less @@ -27932,24 +27606,23 @@ snapshots: vite@5.2.11(@types/node@20.11.5)(terser@5.31.6): dependencies: esbuild: 0.20.2 - postcss: 8.4.41 + postcss: 8.4.45 rollup: 4.21.2 optionalDependencies: '@types/node': 20.11.5 fsevents: 2.3.3 terser: 5.31.6 - vite@5.2.9(@types/node@20.11.5)(terser@5.31.6): + vite@5.2.9(@types/node@20.11.5): dependencies: esbuild: 0.20.2 - postcss: 8.4.41 + postcss: 8.4.45 rollup: 4.21.2 optionalDependencies: '@types/node': 20.11.5 fsevents: 2.3.3 - terser: 5.31.6 - vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0)(terser@5.31.6): + vitest@2.0.3(@types/node@20.11.5)(jsdom@24.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.31.6): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.3 @@ -28130,12 +27803,12 @@ snapshots: webauthn-p256@0.0.2: dependencies: - '@noble/curves': 1.5.0 - '@noble/hashes': 1.4.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 webauthn-p256@0.0.5: dependencies: - '@noble/curves': 1.5.0 + '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 webextension-polyfill@0.10.0: {} @@ -28146,8 +27819,6 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-sources@3.2.3: {} - webpack-virtual-modules@0.6.2: {} webrtc-adapter@7.7.1: @@ -28375,7 +28046,7 @@ snapshots: yaml@1.10.2: {} - yaml@2.5.0: {} + yaml@2.5.1: {} yargs-parser@13.1.2: dependencies: