From 15aba93f7d2d71569a8f5396d5844feb1729606b Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 20 Sep 2022 11:26:41 -0600 Subject: [PATCH 1/5] Fix bug when user cancels add new chain to wallet, bump versions --- packages/core/package.json | 2 +- packages/core/src/chain.ts | 39 +++++++++++++++++++++++++------------ packages/demo/package.json | 2 +- packages/react/package.json | 4 ++-- packages/vue/package.json | 4 ++-- yarn.lock | 19 ++++++++++++++++++ 6 files changed, 52 insertions(+), 18 deletions(-) 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..4415207bb 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$) - } + 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": { diff --git a/yarn.lock b/yarn.lock index 229e204c5..7269bb627 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2953,6 +2953,25 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" +"@web3-onboard/core@^2.8.4": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@web3-onboard/core/-/core-2.8.4.tgz#10827c4005b3ebfcfa7b863e8eef99fe611665dd" + integrity sha512-Be3bj+k2AYsXLjvvFOf+OljmftVGHgUgf3Wj0IDZJLuF4zN+8Mnw+sKPHVOEXuL0b7FrSfDhK97Zd/guxYLS5g== + dependencies: + "@web3-onboard/common" "^2.2.2" + bignumber.js "^9.0.0" + bnc-sdk "^4.4.1" + bowser "^2.11.0" + ethers "5.5.3" + eventemitter3 "^4.0.7" + joi "17.6.0" + lodash.merge "^4.6.2" + lodash.partition "^4.6.0" + nanoid "^4.0.0" + rxjs "^7.5.2" + svelte "^3.49.0" + svelte-i18n "^3.3.13" + "@web3auth/base-plugin@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@web3auth/base-plugin/-/base-plugin-1.0.1.tgz#1e2a87acf745299fdff6f92e6c46ee9bc38aa670" From 221e58803039c0c1bfc3bdf8188f27177981d4fa Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 20 Sep 2022 11:26:57 -0600 Subject: [PATCH 2/5] yarn it --- yarn.lock | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7269bb627..229e204c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2953,25 +2953,6 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" -"@web3-onboard/core@^2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@web3-onboard/core/-/core-2.8.4.tgz#10827c4005b3ebfcfa7b863e8eef99fe611665dd" - integrity sha512-Be3bj+k2AYsXLjvvFOf+OljmftVGHgUgf3Wj0IDZJLuF4zN+8Mnw+sKPHVOEXuL0b7FrSfDhK97Zd/guxYLS5g== - dependencies: - "@web3-onboard/common" "^2.2.2" - bignumber.js "^9.0.0" - bnc-sdk "^4.4.1" - bowser "^2.11.0" - ethers "5.5.3" - eventemitter3 "^4.0.7" - joi "17.6.0" - lodash.merge "^4.6.2" - lodash.partition "^4.6.0" - nanoid "^4.0.0" - rxjs "^7.5.2" - svelte "^3.49.0" - svelte-i18n "^3.3.13" - "@web3auth/base-plugin@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@web3auth/base-plugin/-/base-plugin-1.0.1.tgz#1e2a87acf745299fdff6f92e6c46ee9bc38aa670" From f2b50452ea4f2f65c5d331dceca0f19aaca2d04d Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Wed, 21 Sep 2022 09:23:46 -0600 Subject: [PATCH 3/5] Update packages/core/src/chain.ts Co-authored-by: Aaron --- packages/core/src/chain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/chain.ts b/packages/core/src/chain.ts index 4415207bb..58409a2e2 100644 --- a/packages/core/src/chain.ts +++ b/packages/core/src/chain.ts @@ -71,7 +71,7 @@ async function setChain(options: { code === ProviderRpcErrorCode.UNRECOGNIZED_CHAIN_ID ) { // chain has not been added to wallet - chainNotInWallet(wallet, chain, switchChainModal$, chainIdHex) + return chainNotInWallet(wallet, chain, switchChainModal$, chainIdHex) } if (code === ProviderRpcErrorCode.UNSUPPORTED_METHOD) { From 8fd7a750678b4d909e874283ec132fbc39b62371 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Wed, 21 Sep 2022 16:34:29 -0600 Subject: [PATCH 4/5] Fix formatting and add return type --- packages/core/src/chain.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/core/src/chain.ts b/packages/core/src/chain.ts index 58409a2e2..048aeded3 100644 --- a/packages/core/src/chain.ts +++ b/packages/core/src/chain.ts @@ -1,4 +1,4 @@ -import { BehaviorSubject, firstValueFrom } from 'rxjs' +import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs' import { filter, map } from 'rxjs/operators' import { Chain, ProviderRpcErrorCode } from '@web3-onboard/common' import { addNewChain, switchChain } from './provider.js' @@ -71,7 +71,12 @@ async function setChain(options: { code === ProviderRpcErrorCode.UNRECOGNIZED_CHAIN_ID ) { // chain has not been added to wallet - return chainNotInWallet(wallet, chain, switchChainModal$, chainIdHex) + return chainNotInWallet( + wallet, + chain, + switchChainModalClosed$, + chainIdHex + ) } if (code === ProviderRpcErrorCode.UNSUPPORTED_METHOD) { @@ -87,11 +92,9 @@ async function setChain(options: { const chainNotInWallet = async ( wallet: WalletState, chain: Chain, - switchChainModalClosed$: BehaviorSubject<{ - chain: Chain - }>, + switchChainModalClosed$: Observable, chainIdHex: string -) => { +): Promise => { try { await addNewChain(wallet.provider, chain) await switchChain(wallet.provider, chainIdHex) From 1bd3b138c8176b78411d441b8817fd0c4bc086e5 Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Wed, 21 Sep 2022 16:37:32 -0600 Subject: [PATCH 5/5] Cleanup imports --- packages/core/src/chain.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/core/src/chain.ts b/packages/core/src/chain.ts index 886a87ab9..ce4bf05ab 100644 --- a/packages/core/src/chain.ts +++ b/packages/core/src/chain.ts @@ -1,8 +1,4 @@ -<<<<<<< HEAD -import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs' -======= -import { BehaviorSubject, firstValueFrom } from 'rxjs' ->>>>>>> v2-web3-onboard-develop +import { firstValueFrom, Observable } from 'rxjs' import { filter, map } from 'rxjs/operators' import { Chain, ProviderRpcErrorCode } from '@web3-onboard/common' import { addNewChain, switchChain } from './provider.js'