diff --git a/packages/core/package.json b/packages/core/package.json index 09be25749..992d526a9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/core", - "version": "2.8.4", + "version": "2.8.5-alpha.1", "description": "Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardized spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", diff --git a/packages/core/src/chain.ts b/packages/core/src/chain.ts index 7fbb0d52a..58409a2e2 100644 --- a/packages/core/src/chain.ts +++ b/packages/core/src/chain.ts @@ -1,6 +1,6 @@ -import { firstValueFrom } from 'rxjs' +import { BehaviorSubject, firstValueFrom } from 'rxjs' import { filter, map } from 'rxjs/operators' -import { ProviderRpcErrorCode } from '@web3-onboard/common' +import { Chain, ProviderRpcErrorCode } from '@web3-onboard/common' import { addNewChain, switchChain } from './provider.js' import { state } from './store/index.js' import { switchChainModal$ } from './streams.js' @@ -66,21 +66,12 @@ async function setChain(options: { filter(x => x === null), map(() => false) ) - if ( code === ProviderRpcErrorCode.CHAIN_NOT_ADDED || code === ProviderRpcErrorCode.UNRECOGNIZED_CHAIN_ID ) { // chain has not been added to wallet - try { - await addNewChain(wallet.provider, chain) - await switchChain(wallet.provider, chainIdHex) - return true - } catch (error) { - // display notification to user to switch chain - switchChainModal$.next({ chain }) - return firstValueFrom(switchChainModalClosed$) - } + return chainNotInWallet(wallet, chain, switchChainModal$, chainIdHex) } if (code === ProviderRpcErrorCode.UNSUPPORTED_METHOD) { @@ -93,4 +84,28 @@ async function setChain(options: { return false } +const chainNotInWallet = async ( + wallet: WalletState, + chain: Chain, + switchChainModalClosed$: BehaviorSubject<{ + chain: Chain + }>, + chainIdHex: string +) => { + try { + await addNewChain(wallet.provider, chain) + await switchChain(wallet.provider, chainIdHex) + return true + } catch (error) { + const { code } = error as { code: number } + if (code === ProviderRpcErrorCode.ACCOUNT_ACCESS_REJECTED) { + // add new chain rejected by user + return false + } + // display notification to user to switch chain + switchChainModal$.next({ chain }) + return firstValueFrom(switchChainModalClosed$) + } +} + export default setChain diff --git a/packages/demo/package.json b/packages/demo/package.json index 6ee493b1c..2e86aedd4 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@web3-onboard/coinbase": "^2.1.2", - "@web3-onboard/core": "^2.8.4", + "@web3-onboard/core": "^2.8.5-alpha.1", "@web3-onboard/dcent": "^2.2.0", "@web3-onboard/fortmatic": "^2.0.13", "@web3-onboard/gas": "^2.1.2", diff --git a/packages/react/package.json b/packages/react/package.json index 3349b2a08..98cd7f70d 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/react", - "version": "2.3.4", + "version": "2.3.5-alpha.1", "description": "A collection of React hooks for integrating Web3-Onboard in to React and Next.js projects. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -62,7 +62,7 @@ "typescript": "^4.5.5" }, "dependencies": { - "@web3-onboard/core": "^2.8.4", + "@web3-onboard/core": "^2.8.5-alpha.1", "@web3-onboard/common": "^2.2.2", "use-sync-external-store": "1.0.0" }, diff --git a/packages/vue/package.json b/packages/vue/package.json index ec51e0874..10f8702df 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@web3-onboard/vue", - "version": "2.2.4", + "version": "2.2.5-alpha.1", "description": "A collection of Vue Composables for integrating Web3-Onboard in to a Vue or Nuxt project. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.", "keywords": [ "Ethereum", @@ -63,7 +63,7 @@ "@vueuse/core": "^8.4.2", "@vueuse/rxjs": "^8.2.0", "@web3-onboard/common": "^2.2.2", - "@web3-onboard/core": "^2.8.4", + "@web3-onboard/core": "^2.8.5-alpha.1", "vue-demi": "^0.12.4" }, "peerDependencies": {