From 0ffd5a7bef97bb53af729e9cd3bb182d569b5b4b Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Fri, 2 Oct 2026 00:28:02 +0000 Subject: [PATCH 1/3] fix(wallets): type errors in metamask, leap-metamask and mock wallets --- pnpm-lock.yaml | 6 ++--- .../cosmos-extension-metamask/package.json | 1 + .../src/extension.ts | 6 +++-- .../src/extension.ts | 19 +++++-------- wallets/mock-wallet/package.json | 1 - wallets/mock-wallet/src/ethereum-wallet.ts | 6 ++--- wallets/mock-wallet/src/wallet.ts | 27 +++++++++---------- 7 files changed, 30 insertions(+), 36 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba20531d9..58500989b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -766,6 +766,9 @@ importers: '@interchain-kit/core': specifier: workspace:* version: link:../../packages/core/dist + '@interchainjs/amino': + specifier: 1.21.0 + version: 1.21.0(@chain-registry/v2-types@0.53.146)(@chain-registry/v2@1.71.237) '@interchainjs/cosmos': specifier: 1.21.0 version: 1.21.0(@chain-registry/v2-types@0.53.146)(@chain-registry/v2@1.71.237)(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -995,9 +998,6 @@ importers: '@interchain-kit/core': specifier: workspace:* version: link:../../packages/core/dist - '@keplr-wallet/types': - specifier: ^0.13.11 - version: 0.13.11(starknet@8.9.2) '@solana/web3.js': specifier: ^1.98.4 version: 1.98.4(bufferutil@4.1.0)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) diff --git a/wallets/cosmos-extension-metamask/package.json b/wallets/cosmos-extension-metamask/package.json index ef2576473..24b6837b4 100644 --- a/wallets/cosmos-extension-metamask/package.json +++ b/wallets/cosmos-extension-metamask/package.json @@ -34,6 +34,7 @@ "@chain-registry/types": "^2.0.1", "@cosmjs/stargate": "^0.38.1", "@interchain-kit/core": "workspace:*", + "@interchainjs/amino": "1.21.0", "@interchainjs/cosmos": "1.21.0", "@interchainjs/types": "1.21.0" }, diff --git a/wallets/cosmos-extension-metamask/src/extension.ts b/wallets/cosmos-extension-metamask/src/extension.ts index 277c7684e..d4ad27f9b 100644 --- a/wallets/cosmos-extension-metamask/src/extension.ts +++ b/wallets/cosmos-extension-metamask/src/extension.ts @@ -6,7 +6,8 @@ declare global { } } -import { AminoSignResponse, DirectSignResponse,StdSignature } from '@interchainjs/cosmos/types/wallet'; +import { StdSignature } from '@interchainjs/amino'; +import { AminoSignResponse, DirectSignResponse } from '@interchainjs/cosmos'; import { StdSignDoc } from '@interchainjs/types'; import { Chain as MetaMaskCosmosChainInfo } from './types'; @@ -221,7 +222,8 @@ export class CosmosExtensionMetaMask extends CosmosWallet { async addSuggestChain(chainId: string): Promise { - const chainInfo = getMetaMaskCosmosChainInfo(chain, this.assetLists[0]); + const chain = this.getChainById(chainId); + const chainInfo = getMetaMaskCosmosChainInfo(chain, this.getAssetListByChainId(chainId)); await window.ethereum.request({ method: 'wallet_invokeSnap', diff --git a/wallets/leap-cosmos-extension-metamask/src/extension.ts b/wallets/leap-cosmos-extension-metamask/src/extension.ts index 4f98dfffa..4321fa6fe 100644 --- a/wallets/leap-cosmos-extension-metamask/src/extension.ts +++ b/wallets/leap-cosmos-extension-metamask/src/extension.ts @@ -1,6 +1,5 @@ -import { AssetList,Chain } from '@chain-registry/types'; import { CosmosWallet, DirectSignDoc, SignOptions, WalletAccount } from '@interchain-kit/core'; -import { AminoSignResponse } from '@interchainjs/cosmos/types/wallet'; +import { AminoSignResponse } from '@interchainjs/cosmos'; import { StdSignDoc } from '@interchainjs/types'; import { ChainInfo } from './types'; @@ -17,16 +16,10 @@ export class LeapCosmosExtensionMetaMask extends CosmosWallet { supportedChains: { [chainId: string]: ChainInfo } = {}; async init() { - try { - if (!window.ethereum || window.ethereum.isMetaMask !== true) { - throw new Error('MetaMask is not installed'); - } - this.supportedChains = await this.getSupportedChains(); - - } catch (error) { - this.errorMessage = (error as any).message; - + if (!window.ethereum || window.ethereum.isMetaMask !== true) { + throw new Error('MetaMask is not installed'); } + this.supportedChains = await this.getSupportedChains(); } async getSupportedChains() { @@ -151,8 +144,8 @@ export class LeapCosmosExtensionMetaMask extends CosmosWallet { }); } - async addSuggestChain(chain: Chain, assetLists: AssetList[]): Promise { - + async addSuggestChain(chainId: string): Promise { + const chain = this.getChainById(chainId); const chainInfo: ChainInfo = { chainId: chain.chainId, chainName: chain.prettyName, diff --git a/wallets/mock-wallet/package.json b/wallets/mock-wallet/package.json index 058f33a74..1091309d3 100644 --- a/wallets/mock-wallet/package.json +++ b/wallets/mock-wallet/package.json @@ -35,7 +35,6 @@ "@cosmjs/amino": "^0.38.1", "@cosmjs/proto-signing": "^0.38.1", "@interchain-kit/core": "workspace:*", - "@keplr-wallet/types": "^0.13.11", "@solana/web3.js": "^1.98.4", "bip39": "^3.1.0", "bs58": "^6.0.0", diff --git a/wallets/mock-wallet/src/ethereum-wallet.ts b/wallets/mock-wallet/src/ethereum-wallet.ts index d05428ff0..780d1d07a 100644 --- a/wallets/mock-wallet/src/ethereum-wallet.ts +++ b/wallets/mock-wallet/src/ethereum-wallet.ts @@ -1,5 +1,5 @@ import { EthereumWallet, Wallet, WalletAccount } from '@interchain-kit/core'; -import { Eip1193Provider, ethers, HDNodeWallet } from 'ethers'; +import { ethers, HDNodeWallet } from 'ethers'; export interface MockEthereumNetwork { chainId: number; @@ -178,8 +178,8 @@ export class MockEthereumWallet extends EthereumWallet { return signature; } - async getProvider(): Promise { - return this.provider; + async getProvider(): Promise { + return this.walletMap[this.currentChainId][this.currentAccountIndex].provider; } diff --git a/wallets/mock-wallet/src/wallet.ts b/wallets/mock-wallet/src/wallet.ts index c7acafd3a..a341b66d8 100644 --- a/wallets/mock-wallet/src/wallet.ts +++ b/wallets/mock-wallet/src/wallet.ts @@ -1,8 +1,7 @@ import { Chain } from '@chain-registry/types'; import { OfflineAminoSigner, Secp256k1HdWallet } from '@cosmjs/amino'; import { DirectSecp256k1HdWallet, OfflineDirectSigner } from '@cosmjs/proto-signing'; -import { BaseWallet, BroadcastMode, SimpleAccount, Wallet, WalletAccount } from '@interchain-kit/core'; -import { ChainInfo } from '@keplr-wallet/types'; +import { Algo, BaseWallet, BroadcastMode, SimpleAccount, Wallet, WalletAccount } from '@interchain-kit/core'; export class MockWallet extends BaseWallet { @@ -26,18 +25,15 @@ export class MockWallet extends BaseWallet { return Promise.resolve(undefined); } - async connect(chainIds: string[]): Promise { - for (const chainId of chainIds) { - const chain = this.chains.find(c => c.chainId === chainId); - if (this.mnemonic) { - const wallet = await DirectSecp256k1HdWallet.fromMnemonic(this.mnemonic, { prefix: chain?.bech32Prefix }); - this.walletMap[chainId] = wallet; + async connect(chainId: string): Promise { + const chain = this.chains.find(c => c.chainId === chainId); + if (this.mnemonic) { + const wallet = await DirectSecp256k1HdWallet.fromMnemonic(this.mnemonic, { prefix: chain?.bech32Prefix }); + this.walletMap[chainId] = wallet; - const animoWallet = await Secp256k1HdWallet.fromMnemonic(this.mnemonic, { prefix: chain?.bech32Prefix }); - this.animoSignerMap[chainId] = animoWallet; - } + const animoWallet = await Secp256k1HdWallet.fromMnemonic(this.mnemonic, { prefix: chain?.bech32Prefix }); + this.animoSignerMap[chainId] = animoWallet; } - return Promise.resolve(undefined); } disconnect(chainId: string | string[]): Promise { @@ -48,7 +44,7 @@ export class MockWallet extends BaseWallet { async getAccount(chainId: string): Promise { const wallet = this.animoSignerMap[chainId]; const [firstAccount] = await wallet.getAccounts(); - return firstAccount; + return { ...firstAccount, algo: firstAccount.algo as Algo }; } getAccounts(chainIds: string[]): Promise { @@ -63,7 +59,10 @@ export class MockWallet extends BaseWallet { sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode): Promise { throw new Error('Method not implemented.'); } - addSuggestChain(chainInfo: ChainInfo): Promise { + addSuggestChain(chainId: string): Promise { + throw new Error('Method not implemented.'); + } + getProvider(chainId: string): Promise { throw new Error('Method not implemented.'); } getOfflineSignerAmino(chainId: string): OfflineAminoSigner { From bda07fc1dfa4e27de186c271fda0de4d7c193e75 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Fri, 2 Oct 2026 00:32:59 +0000 Subject: [PATCH 2/3] fix(vue): port to WalletManagerStore and current wallet-manager API --- examples/vue/src/views/ibc-transfer.vue | 4 +- examples/vue/src/views/use-chain-wallet.vue | 2 +- examples/vue/src/views/use-config.vue | 15 +--- examples/vue/src/views/wallet-connect.vue | 18 ++-- examples/vue/tsconfig.app.tsbuildinfo | 2 +- examples/vue/tsconfig.node.tsbuildinfo | 2 +- packages/vue/README.md | 4 +- packages/vue/package.json | 1 + packages/vue/src/ChainProvider.vue | 18 ++-- packages/vue/src/composables/useAccount.ts | 53 ++---------- packages/vue/src/composables/useChain.ts | 78 ++++++----------- .../vue/src/composables/useChainWallet.ts | 61 ++++--------- packages/vue/src/composables/useConfig.ts | 9 +- .../vue/src/composables/useCurrentWallet.ts | 18 ++-- .../src/composables/useInterchainClient.ts | 52 +++++------- .../vue/src/composables/useOfflineSigner.ts | 22 +++-- .../vue/src/composables/useWalletManager.ts | 13 ++- packages/vue/src/modal/modal.vue | 85 +++++++++---------- packages/vue/src/types/chain.ts | 27 +++--- packages/vue/src/types/sign-client.ts | 4 +- packages/vue/tsconfig.json | 1 + packages/vue/vite.config.ts | 2 +- pnpm-lock.yaml | 3 + 23 files changed, 190 insertions(+), 304 deletions(-) diff --git a/examples/vue/src/views/ibc-transfer.vue b/examples/vue/src/views/ibc-transfer.vue index 3f16e3377..512b92674 100644 --- a/examples/vue/src/views/ibc-transfer.vue +++ b/examples/vue/src/views/ibc-transfer.vue @@ -3,7 +3,6 @@ import { ref, computed } from 'vue' import { useChain, useWalletManager } from '@interchain-kit/vue'; import { ibc } from 'osmojs' import { SigningStargateClient } from '@cosmjs/stargate' -import { ExtensionWallet } from '@interchain-kit/core'; const chainName = ref("cosmoshub") const { rpcEndpoint, chain } = useChain(chainName) @@ -12,8 +11,7 @@ const signer = computed(() => { if (!chain.value.chainId) { return } - const wallet = wm.getCurrentWallet() as ExtensionWallet - return wallet.getOfflineSigner(chain.value.chainId, 'direct') // cosmoshub-4 + return wm.value.getOfflineSigner(wm.value.currentWalletName, chainName.value) // cosmoshub-4 }) const transferMsg = ibc.applications.transfer.v1.MessageComposer.withTypeUrl.transfer({ diff --git a/examples/vue/src/views/use-chain-wallet.vue b/examples/vue/src/views/use-chain-wallet.vue index 8337287f3..33f9fa6ed 100644 --- a/examples/vue/src/views/use-chain-wallet.vue +++ b/examples/vue/src/views/use-chain-wallet.vue @@ -1,6 +1,6 @@ diff --git a/examples/vue/src/views/wallet-connect.vue b/examples/vue/src/views/wallet-connect.vue index 7426ae4e7..1ffaa6e1a 100644 --- a/examples/vue/src/views/wallet-connect.vue +++ b/examples/vue/src/views/wallet-connect.vue @@ -1,25 +1,19 @@ @@ -28,7 +22,7 @@ const disconnect = async() => { address: {{ account?.address }} - + diff --git a/examples/vue/tsconfig.app.tsbuildinfo b/examples/vue/tsconfig.app.tsbuildinfo index d556ab075..6ce629184 100644 --- a/examples/vue/tsconfig.app.tsbuildinfo +++ b/examples/vue/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.ts","./src/router.ts","./src/vite-env.d.ts","./src/app.vue","./src/views/active-wallet.vue","./src/views/ibc-transfer.vue","./src/views/show.vue","./src/views/use-chain-wallet.vue","./src/views/use-chain.vue","./src/views/use-config.vue","./src/views/useofflinesigner.vue","./src/views/wallet-connect.vue"],"errors":true,"version":"5.8.2"} \ No newline at end of file +{"root":["./src/main.ts","./src/router.ts","./src/vite-env.d.ts","./src/App.vue","./src/views/active-wallet.vue","./src/views/ibc-transfer.vue","./src/views/show.vue","./src/views/use-chain-wallet.vue","./src/views/use-chain.vue","./src/views/use-config.vue","./src/views/useOfflineSigner.vue","./src/views/wallet-connect.vue"],"errors":true,"version":"5.9.3"} \ No newline at end of file diff --git a/examples/vue/tsconfig.node.tsbuildinfo b/examples/vue/tsconfig.node.tsbuildinfo index 4eae9b60b..5e39d3d89 100644 --- a/examples/vue/tsconfig.node.tsbuildinfo +++ b/examples/vue/tsconfig.node.tsbuildinfo @@ -1 +1 @@ -{"root":["./vite.config.ts"],"version":"5.8.2"} \ No newline at end of file +{"root":["./vite.config.ts"],"errors":true,"version":"5.9.3"} \ No newline at end of file diff --git a/packages/vue/README.md b/packages/vue/README.md index 75a148c4f..1d46a366d 100644 --- a/packages/vue/README.md +++ b/packages/vue/README.md @@ -184,10 +184,10 @@ const stargaze = useChainWallet(stargazeChainName, leapWalletName); const walletManager = useWalletManager() const connectKeplr = async() => { - await walletManager.connect('keplr-extension') + await walletManager.value.connect('keplr-extension', 'juno') } const connectLeap = async() => { - await walletManager.connect('leap-extension') + await walletManager.value.connect('leap-extension', 'stargaze') } diff --git a/packages/vue/package.json b/packages/vue/package.json index cce8dae75..105a6bdcd 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -29,6 +29,7 @@ "dependencies": { "@chain-registry/types": "^2.0.1", "@interchain-kit/core": "workspace:*", + "@interchain-kit/store": "workspace:*", "@interchain-ui/vue": "^1.4.1", "@interchainjs/cosmos": "1.21.0", "@interchainjs/cosmos-types": "1.21.0", diff --git a/packages/vue/src/ChainProvider.vue b/packages/vue/src/ChainProvider.vue index 9d47ecc2b..74974f138 100644 --- a/packages/vue/src/ChainProvider.vue +++ b/packages/vue/src/ChainProvider.vue @@ -1,13 +1,13 @@