Skip to content

Commit 2d27d48

Browse files
authored
fix: avoid throwing CONNECT_ERROR when connection request is rejected (#4992)
1 parent 7050573 commit 2d27d48

File tree

18 files changed

+641
-275
lines changed

18 files changed

+641
-275
lines changed

.changeset/tall-sites-exist.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
'@reown/appkit-adapter-bitcoin': patch
3+
'@reown/appkit-adapter-ethers5': patch
4+
'@reown/appkit-adapter-ethers': patch
5+
'@reown/appkit-adapter-solana': patch
6+
'@reown/appkit-adapter-wagmi': patch
7+
'@reown/appkit-controllers': patch
8+
'@reown/appkit-scaffold-ui': patch
9+
'@reown/appkit': patch
10+
'@reown/appkit-common': patch
11+
'pay-test-exchange': patch
12+
'@reown/appkit-utils': patch
13+
'@reown/appkit-cdn': patch
14+
'@reown/appkit-cli': patch
15+
'@reown/appkit-codemod': patch
16+
'@reown/appkit-core': patch
17+
'@reown/appkit-experimental': patch
18+
'@reown/appkit-pay': patch
19+
'@reown/appkit-polyfills': patch
20+
'@reown/appkit-siwe': patch
21+
'@reown/appkit-siwx': patch
22+
'@reown/appkit-testing': patch
23+
'@reown/appkit-ui': patch
24+
'@reown/appkit-universal-connector': patch
25+
'@reown/appkit-wallet': patch
26+
'@reown/appkit-wallet-button': patch
27+
---
28+
29+
Fixed an issue where upon user connection rejection a `CONNECT_ERROR` event was logged. It now logs a new event error called `USER_REJECTED`

packages/adapters/bitcoin/src/adapter.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
type Provider,
88
WcHelpersUtil
99
} from '@reown/appkit'
10-
import { ConstantsUtil } from '@reown/appkit-common'
10+
import { ConstantsUtil, UserRejectedRequestError } from '@reown/appkit-common'
1111
import { ConstantsUtil as CommonConstantsUtil } from '@reown/appkit-common'
1212
import { ChainController, StorageUtil } from '@reown/appkit-controllers'
1313
import { HelpersUtil } from '@reown/appkit-utils'
@@ -80,7 +80,9 @@ export class BitcoinAdapter extends AdapterBlueprint<BitcoinConnector> {
8080
}
8181
}
8282

83-
const address = await connector.connect()
83+
const address = await connector.connect().catch(err => {
84+
throw new UserRejectedRequestError(err)
85+
})
8486
const accounts = await this.getAccounts({ id: connector.id })
8587

8688
this.emit('accountChanged', {

packages/adapters/ethers/src/client.ts

Lines changed: 117 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import UniversalProvider from '@walletconnect/universal-provider'
22
import { JsonRpcProvider, formatEther, getAddress } from 'ethers'
33

44
import { type AppKitOptions, WcConstantsUtil, WcHelpersUtil } from '@reown/appkit'
5-
import { ConstantsUtil as CommonConstantsUtil, ParseUtil } from '@reown/appkit-common'
5+
import {
6+
ConstantsUtil as CommonConstantsUtil,
7+
ErrorUtil,
8+
ParseUtil,
9+
UserRejectedRequestError
10+
} from '@reown/appkit-common'
611
import {
712
AccountController,
813
type CombinedProvider,
@@ -401,134 +406,146 @@ export class EthersAdapter extends AdapterBlueprint {
401406
chainId,
402407
socialUri
403408
}: AdapterBlueprint.ConnectParams): Promise<AdapterBlueprint.ConnectResult> {
404-
const connector = this.connectors.find(c => HelpersUtil.isLowerCaseMatch(c.id, id))
409+
try {
410+
const connector = this.connectors.find(c => HelpersUtil.isLowerCaseMatch(c.id, id))
405411

406-
if (!connector) {
407-
throw new Error('Connector not found')
408-
}
412+
if (!connector) {
413+
throw new Error('Connector not found')
414+
}
409415

410-
const connection = this.connectionManager?.getConnection({
411-
address,
412-
connectorId: id,
413-
connections: this.connections,
414-
connectors: this.connectors
415-
})
416+
const connection = this.connectionManager?.getConnection({
417+
address,
418+
connectorId: id,
419+
connections: this.connections,
420+
connectors: this.connectors
421+
})
416422

417-
if (connection) {
418-
const caipNetwork = connection.caipNetwork
423+
if (connection) {
424+
const caipNetwork = connection.caipNetwork
419425

420-
if (!caipNetwork) {
421-
throw new Error('EthersAdapter:connect - could not find the caipNetwork to connect')
422-
}
426+
if (!caipNetwork) {
427+
throw new Error('EthersAdapter:connect - could not find the caipNetwork to connect')
428+
}
423429

424-
if (connection.account) {
425-
this.emit('accountChanged', {
426-
address: this.toChecksummedAddress(connection.account.address),
427-
chainId: caipNetwork.id,
428-
connector
429-
})
430+
if (connection.account) {
431+
this.emit('accountChanged', {
432+
address: this.toChecksummedAddress(connection.account.address),
433+
chainId: caipNetwork.id,
434+
connector
435+
})
430436

431-
return {
432-
address: this.toChecksummedAddress(connection.account.address),
433-
chainId: caipNetwork.id,
434-
provider: connector.provider,
435-
type: connector.type,
436-
id
437+
return {
438+
address: this.toChecksummedAddress(connection.account.address),
439+
chainId: caipNetwork.id,
440+
provider: connector.provider,
441+
type: connector.type,
442+
id
443+
}
437444
}
438445
}
439-
}
440446

441-
const selectedProvider = connector?.provider as Provider
447+
const selectedProvider = connector?.provider as Provider
442448

443-
if (!selectedProvider) {
444-
throw new Error('Provider not found')
445-
}
449+
if (!selectedProvider) {
450+
throw new Error('Provider not found')
451+
}
446452

447-
let accounts: string[] = []
453+
let accounts: string[] = []
448454

449-
let requestChainId: string | undefined = undefined
455+
let requestChainId: string | undefined = undefined
450456

451-
if (type === ConstantsUtil.CONNECTOR_TYPE_AUTH) {
452-
const { address: _address, accounts: authAccounts } =
453-
await SIWXUtil.authConnectorAuthenticate({
454-
authConnector: selectedProvider as unknown as W3mFrameProvider,
455-
chainNamespace: CommonConstantsUtil.CHAIN.EVM,
456-
chainId,
457-
socialUri,
458-
preferredAccountType: getPreferredAccountType('eip155')
459-
})
457+
if (type === ConstantsUtil.CONNECTOR_TYPE_AUTH) {
458+
const { address: _address, accounts: authAccounts } =
459+
await SIWXUtil.authConnectorAuthenticate({
460+
authConnector: selectedProvider as unknown as W3mFrameProvider,
461+
chainNamespace: CommonConstantsUtil.CHAIN.EVM,
462+
chainId,
463+
socialUri,
464+
preferredAccountType: getPreferredAccountType('eip155')
465+
})
460466

461-
const caipNetwork = this.getCaipNetworks().find(n => n.id.toString() === chainId?.toString())
467+
const caipNetwork = this.getCaipNetworks().find(
468+
n => n.id.toString() === chainId?.toString()
469+
)
462470

463-
accounts = [_address]
471+
accounts = [_address]
472+
473+
this.addConnection({
474+
connectorId: id,
475+
accounts: authAccounts
476+
? authAccounts.map(account => ({ address: account.address }))
477+
: accounts.map(account => ({ address: account })),
478+
caipNetwork,
479+
auth: {
480+
name: StorageUtil.getConnectedSocialProvider(),
481+
username: StorageUtil.getConnectedSocialUsername()
482+
}
483+
})
464484

465-
this.addConnection({
466-
connectorId: id,
467-
accounts: authAccounts
468-
? authAccounts.map(account => ({ address: account.address }))
469-
: accounts.map(account => ({ address: account })),
470-
caipNetwork,
471-
auth: {
472-
name: StorageUtil.getConnectedSocialProvider(),
473-
username: StorageUtil.getConnectedSocialUsername()
474-
}
475-
})
485+
this.emit('accountChanged', {
486+
address: this.toChecksummedAddress(accounts[0] as Address),
487+
chainId: Number(chainId),
488+
connector
489+
})
490+
} else {
491+
accounts = await selectedProvider.request({
492+
method: 'eth_requestAccounts'
493+
})
476494

477-
this.emit('accountChanged', {
478-
address: this.toChecksummedAddress(accounts[0] as Address),
479-
chainId: Number(chainId),
480-
connector
481-
})
482-
} else {
483-
accounts = await selectedProvider.request({
484-
method: 'eth_requestAccounts'
485-
})
495+
requestChainId = await selectedProvider.request({
496+
method: 'eth_chainId'
497+
})
486498

487-
requestChainId = await selectedProvider.request({
488-
method: 'eth_chainId'
489-
})
499+
const caipNetwork = this.getCaipNetworks().find(
500+
n => n.id.toString() === chainId?.toString()
501+
)
490502

491-
const caipNetwork = this.getCaipNetworks().find(n => n.id.toString() === chainId?.toString())
503+
if (requestChainId !== chainId) {
504+
if (!caipNetwork) {
505+
throw new Error('EthersAdapter:connect - could not find the caipNetwork to switch')
506+
}
492507

493-
if (requestChainId !== chainId) {
494-
if (!caipNetwork) {
495-
throw new Error('EthersAdapter:connect - could not find the caipNetwork to switch')
508+
try {
509+
await this.switchNetwork({
510+
caipNetwork,
511+
provider: selectedProvider,
512+
providerType: type as ConnectorType
513+
})
514+
} catch (error) {
515+
throw new Error('EthersAdapter:connect - Switch network failed')
516+
}
496517
}
497518

498-
try {
499-
await this.switchNetwork({
500-
caipNetwork,
501-
provider: selectedProvider,
502-
providerType: type as ConnectorType
503-
})
504-
} catch (error) {
505-
throw new Error('EthersAdapter:connect - Switch network failed')
519+
this.emit('accountChanged', {
520+
address: this.toChecksummedAddress(accounts[0] as Address),
521+
chainId: Number(chainId),
522+
connector
523+
})
524+
525+
this.addConnection({
526+
connectorId: id,
527+
accounts: accounts.map(account => ({ address: account })),
528+
caipNetwork
529+
})
530+
531+
if (connector.id !== CommonConstantsUtil.CONNECTOR_ID.WALLET_CONNECT) {
532+
this.listenProviderEvents(id, selectedProvider)
506533
}
507534
}
508535

509-
this.emit('accountChanged', {
536+
return {
510537
address: this.toChecksummedAddress(accounts[0] as Address),
511538
chainId: Number(chainId),
512-
connector
513-
})
514-
515-
this.addConnection({
516-
connectorId: id,
517-
accounts: accounts.map(account => ({ address: account })),
518-
caipNetwork
519-
})
520-
521-
if (connector.id !== CommonConstantsUtil.CONNECTOR_ID.WALLET_CONNECT) {
522-
this.listenProviderEvents(id, selectedProvider)
539+
provider: selectedProvider,
540+
type: type as ConnectorType,
541+
id
542+
}
543+
} catch (err) {
544+
if (ErrorUtil.isUserRejectedRequestError(err)) {
545+
throw new UserRejectedRequestError(err)
523546
}
524-
}
525547

526-
return {
527-
address: this.toChecksummedAddress(accounts[0] as Address),
528-
chainId: Number(chainId),
529-
provider: selectedProvider,
530-
type: type as ConnectorType,
531-
id
548+
throw err
532549
}
533550
}
534551

0 commit comments

Comments
 (0)