Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .changeset/tall-sites-exist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
'@reown/appkit-adapter-bitcoin': patch
'@reown/appkit-adapter-ethers5': patch
'@reown/appkit-adapter-ethers': patch
'@reown/appkit-adapter-solana': patch
'@reown/appkit-adapter-wagmi': patch
'@reown/appkit-controllers': patch
'@reown/appkit-scaffold-ui': patch
'@reown/appkit': patch
'@reown/appkit-common': patch
'pay-test-exchange': patch
'@reown/appkit-utils': patch
'@reown/appkit-cdn': patch
'@reown/appkit-cli': patch
'@reown/appkit-codemod': patch
'@reown/appkit-core': patch
'@reown/appkit-experimental': patch
'@reown/appkit-pay': patch
'@reown/appkit-polyfills': patch
'@reown/appkit-siwe': patch
'@reown/appkit-siwx': patch
'@reown/appkit-testing': patch
'@reown/appkit-ui': patch
'@reown/appkit-universal-connector': patch
'@reown/appkit-wallet': patch
'@reown/appkit-wallet-button': patch
---

Fixed an issue where upon user connection rejection a `CONNECT_ERROR` event was logged. It now logs a new event error called `USER_REJECTED`
6 changes: 4 additions & 2 deletions packages/adapters/bitcoin/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
type Provider,
WcHelpersUtil
} from '@reown/appkit'
import { ConstantsUtil } from '@reown/appkit-common'
import { ConstantsUtil, UserRejectedRequestError } from '@reown/appkit-common'
import { ConstantsUtil as CommonConstantsUtil } from '@reown/appkit-common'
import { ChainController, StorageUtil } from '@reown/appkit-controllers'
import { HelpersUtil } from '@reown/appkit-utils'
Expand Down Expand Up @@ -80,7 +80,9 @@ export class BitcoinAdapter extends AdapterBlueprint<BitcoinConnector> {
}
}

const address = await connector.connect()
const address = await connector.connect().catch(err => {
throw new UserRejectedRequestError(err)
})
const accounts = await this.getAccounts({ id: connector.id })

this.emit('accountChanged', {
Expand Down
217 changes: 117 additions & 100 deletions packages/adapters/ethers/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ import UniversalProvider from '@walletconnect/universal-provider'
import { JsonRpcProvider, formatEther, getAddress } from 'ethers'

import { type AppKitOptions, WcConstantsUtil, WcHelpersUtil } from '@reown/appkit'
import { ConstantsUtil as CommonConstantsUtil, ParseUtil } from '@reown/appkit-common'
import {
ConstantsUtil as CommonConstantsUtil,
ErrorUtil,
ParseUtil,
UserRejectedRequestError
} from '@reown/appkit-common'
import {
AccountController,
type CombinedProvider,
Expand Down Expand Up @@ -401,134 +406,146 @@ export class EthersAdapter extends AdapterBlueprint {
chainId,
socialUri
}: AdapterBlueprint.ConnectParams): Promise<AdapterBlueprint.ConnectResult> {
const connector = this.connectors.find(c => HelpersUtil.isLowerCaseMatch(c.id, id))
try {
const connector = this.connectors.find(c => HelpersUtil.isLowerCaseMatch(c.id, id))

if (!connector) {
throw new Error('Connector not found')
}
if (!connector) {
throw new Error('Connector not found')
}

const connection = this.connectionManager?.getConnection({
address,
connectorId: id,
connections: this.connections,
connectors: this.connectors
})
const connection = this.connectionManager?.getConnection({
address,
connectorId: id,
connections: this.connections,
connectors: this.connectors
})

if (connection) {
const caipNetwork = connection.caipNetwork
if (connection) {
const caipNetwork = connection.caipNetwork

if (!caipNetwork) {
throw new Error('EthersAdapter:connect - could not find the caipNetwork to connect')
}
if (!caipNetwork) {
throw new Error('EthersAdapter:connect - could not find the caipNetwork to connect')
}

if (connection.account) {
this.emit('accountChanged', {
address: this.toChecksummedAddress(connection.account.address),
chainId: caipNetwork.id,
connector
})
if (connection.account) {
this.emit('accountChanged', {
address: this.toChecksummedAddress(connection.account.address),
chainId: caipNetwork.id,
connector
})

return {
address: this.toChecksummedAddress(connection.account.address),
chainId: caipNetwork.id,
provider: connector.provider,
type: connector.type,
id
return {
address: this.toChecksummedAddress(connection.account.address),
chainId: caipNetwork.id,
provider: connector.provider,
type: connector.type,
id
}
}
}
}

const selectedProvider = connector?.provider as Provider
const selectedProvider = connector?.provider as Provider

if (!selectedProvider) {
throw new Error('Provider not found')
}
if (!selectedProvider) {
throw new Error('Provider not found')
}

let accounts: string[] = []
let accounts: string[] = []

let requestChainId: string | undefined = undefined
let requestChainId: string | undefined = undefined

if (type === ConstantsUtil.CONNECTOR_TYPE_AUTH) {
const { address: _address, accounts: authAccounts } =
await SIWXUtil.authConnectorAuthenticate({
authConnector: selectedProvider as unknown as W3mFrameProvider,
chainNamespace: CommonConstantsUtil.CHAIN.EVM,
chainId,
socialUri,
preferredAccountType: getPreferredAccountType('eip155')
})
if (type === ConstantsUtil.CONNECTOR_TYPE_AUTH) {
const { address: _address, accounts: authAccounts } =
await SIWXUtil.authConnectorAuthenticate({
authConnector: selectedProvider as unknown as W3mFrameProvider,
chainNamespace: CommonConstantsUtil.CHAIN.EVM,
chainId,
socialUri,
preferredAccountType: getPreferredAccountType('eip155')
})

const caipNetwork = this.getCaipNetworks().find(n => n.id.toString() === chainId?.toString())
const caipNetwork = this.getCaipNetworks().find(
n => n.id.toString() === chainId?.toString()
)

accounts = [_address]
accounts = [_address]

this.addConnection({
connectorId: id,
accounts: authAccounts
? authAccounts.map(account => ({ address: account.address }))
: accounts.map(account => ({ address: account })),
caipNetwork,
auth: {
name: StorageUtil.getConnectedSocialProvider(),
username: StorageUtil.getConnectedSocialUsername()
}
})

this.addConnection({
connectorId: id,
accounts: authAccounts
? authAccounts.map(account => ({ address: account.address }))
: accounts.map(account => ({ address: account })),
caipNetwork,
auth: {
name: StorageUtil.getConnectedSocialProvider(),
username: StorageUtil.getConnectedSocialUsername()
}
})
this.emit('accountChanged', {
address: this.toChecksummedAddress(accounts[0] as Address),
chainId: Number(chainId),
connector
})
} else {
accounts = await selectedProvider.request({
method: 'eth_requestAccounts'
})

this.emit('accountChanged', {
address: this.toChecksummedAddress(accounts[0] as Address),
chainId: Number(chainId),
connector
})
} else {
accounts = await selectedProvider.request({
method: 'eth_requestAccounts'
})
requestChainId = await selectedProvider.request({
method: 'eth_chainId'
})

requestChainId = await selectedProvider.request({
method: 'eth_chainId'
})
const caipNetwork = this.getCaipNetworks().find(
n => n.id.toString() === chainId?.toString()
)

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

if (requestChainId !== chainId) {
if (!caipNetwork) {
throw new Error('EthersAdapter:connect - could not find the caipNetwork to switch')
try {
await this.switchNetwork({
caipNetwork,
provider: selectedProvider,
providerType: type as ConnectorType
})
} catch (error) {
throw new Error('EthersAdapter:connect - Switch network failed')
}
}

try {
await this.switchNetwork({
caipNetwork,
provider: selectedProvider,
providerType: type as ConnectorType
})
} catch (error) {
throw new Error('EthersAdapter:connect - Switch network failed')
this.emit('accountChanged', {
address: this.toChecksummedAddress(accounts[0] as Address),
chainId: Number(chainId),
connector
})

this.addConnection({
connectorId: id,
accounts: accounts.map(account => ({ address: account })),
caipNetwork
})

if (connector.id !== CommonConstantsUtil.CONNECTOR_ID.WALLET_CONNECT) {
this.listenProviderEvents(id, selectedProvider)
}
}

this.emit('accountChanged', {
return {
address: this.toChecksummedAddress(accounts[0] as Address),
chainId: Number(chainId),
connector
})

this.addConnection({
connectorId: id,
accounts: accounts.map(account => ({ address: account })),
caipNetwork
})

if (connector.id !== CommonConstantsUtil.CONNECTOR_ID.WALLET_CONNECT) {
this.listenProviderEvents(id, selectedProvider)
provider: selectedProvider,
type: type as ConnectorType,
id
}
} catch (err) {
if (ErrorUtil.isUserRejectedRequestError(err)) {
throw new UserRejectedRequestError(err)
}
}

return {
address: this.toChecksummedAddress(accounts[0] as Address),
chainId: Number(chainId),
provider: selectedProvider,
type: type as ConnectorType,
id
throw err
}
}

Expand Down
Loading