Skip to content

Commit

Permalink
Merge branch 'main' into fix/approved-caip-networks-data-upa
Browse files Browse the repository at this point in the history
  • Loading branch information
tomiir committed Sep 19, 2024
2 parents 6e03d9e + a632159 commit 89addff
Show file tree
Hide file tree
Showing 13 changed files with 189 additions and 26 deletions.
38 changes: 38 additions & 0 deletions .changeset/nasty-rats-destroy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
'@reown/appkit-adapter-ethers5': patch
'@reown/appkit-adapter-ethers': patch
'@reown/appkit-adapter-wagmi': patch
'@reown/appkit-wallet': patch
'@reown/appkit-core': patch
'@apps/demo': patch
'@apps/gallery': patch
'@apps/laboratory': patch
'@examples/html-ethers': patch
'@examples/html-ethers5': patch
'@examples/html-wagmi': patch
'@examples/next-ethers': patch
'@examples/next-wagmi': patch
'@examples/react-ethers': patch
'@examples/react-ethers5': patch
'@examples/react-solana': patch
'@examples/react-wagmi': patch
'@examples/vue-ethers5': patch
'@examples/vue-solana': patch
'@examples/vue-wagmi': patch
'@reown/appkit-adapter-polkadot': patch
'@reown/appkit-adapter-solana': patch
'@reown/appkit': patch
'@reown/appkit-utils': patch
'@reown/appkit-cdn': patch
'@reown/appkit-common': patch
'@reown/appkit-ethers': patch
'@reown/appkit-ethers5': patch
'@reown/appkit-polyfills': patch
'@reown/appkit-scaffold-ui': patch
'@reown/appkit-siwe': patch
'@reown/appkit-solana': patch
'@reown/appkit-ui': patch
'@reown/appkit-wagmi': patch
---

Fixes issue where wagmi would not reconnect on an active session
38 changes: 38 additions & 0 deletions .changeset/two-cats-wave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
'@reown/appkit-adapter-wagmi': patch
'@apps/laboratory': patch
'@reown/appkit-core': patch
'@apps/demo': patch
'@apps/gallery': patch
'@examples/html-ethers': patch
'@examples/html-ethers5': patch
'@examples/html-wagmi': patch
'@examples/next-ethers': patch
'@examples/next-wagmi': patch
'@examples/react-ethers': patch
'@examples/react-ethers5': patch
'@examples/react-solana': patch
'@examples/react-wagmi': patch
'@examples/vue-ethers5': patch
'@examples/vue-solana': patch
'@examples/vue-wagmi': patch
'@reown/appkit-adapter-ethers': patch
'@reown/appkit-adapter-ethers5': patch
'@reown/appkit-adapter-polkadot': patch
'@reown/appkit-adapter-solana': patch
'@reown/appkit': patch
'@reown/appkit-utils': patch
'@reown/appkit-cdn': patch
'@reown/appkit-common': patch
'@reown/appkit-ethers': patch
'@reown/appkit-ethers5': patch
'@reown/appkit-polyfills': patch
'@reown/appkit-scaffold-ui': patch
'@reown/appkit-siwe': patch
'@reown/appkit-solana': patch
'@reown/appkit-ui': patch
'@reown/appkit-wagmi': patch
'@reown/appkit-wallet': patch
---

Fixes wrong wagmi authConnector name causing issues when merging multiple authConnectors
2 changes: 1 addition & 1 deletion packages/adapters/ethers/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -772,7 +772,7 @@ export class EthersAdapter {
authProvider.onRpcError(() => this.handleAuthRpcError())
authProvider.onRpcSuccess((_, request) => this.handleAuthRpcSuccess(_, request))
authProvider.onNotConnected(() => this.handleAuthNotConnected())
authProvider.onIsConnected(({ preferredAccountType }) =>
authProvider.onConnect(({ preferredAccountType }) =>
this.handleAuthIsConnected(preferredAccountType)
)
authProvider.onSetPreferredAccount(({ address, type }) => {
Expand Down
1 change: 1 addition & 0 deletions packages/adapters/ethers/src/tests/mocks/AuthConnector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const mockAuthConnector = {
onRpcSuccess: vi.fn(),
onNotConnected: vi.fn(),
onIsConnected: vi.fn(),
onConnect: vi.fn(),
onSetPreferredAccount: vi.fn(),
connect: vi.fn().mockResolvedValue({
address: '0x1234567890123456789012345678901234567890',
Expand Down
2 changes: 1 addition & 1 deletion packages/adapters/ethers5/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ export class Ethers5Adapter {
authProvider.onRpcError(() => this.handleAuthRpcError())
authProvider.onRpcSuccess((_, request) => this.handleAuthRpcSuccess(_, request))
authProvider.onNotConnected(() => this.handleAuthNotConnected())
authProvider.onIsConnected(({ preferredAccountType }) =>
authProvider.onConnect(({ preferredAccountType }) =>
this.handleAuthIsConnected(preferredAccountType)
)
authProvider.onSetPreferredAccount(({ address, type }) => {
Expand Down
1 change: 1 addition & 0 deletions packages/adapters/ethers5/src/tests/mocks/AuthConnector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const mockAuthConnector = {
onRpcSuccess: vi.fn(),
onNotConnected: vi.fn(),
onIsConnected: vi.fn(),
onConnect: vi.fn(),
onSetPreferredAccount: vi.fn(),
connect: vi.fn().mockResolvedValue({
address: '0x1234567890123456789012345678901234567890',
Expand Down
2 changes: 1 addition & 1 deletion packages/adapters/solana/src/providers/AuthProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ export class AuthProvider extends ProviderEventEmitter implements Provider, Prov
this.emit('auth_rpcError', error)
})

this.getProvider().onIsConnected(response => {
this.getProvider().onConnect(response => {
this.setSession(response)
const activeNamespace = this.getActiveNamespace()

Expand Down
1 change: 1 addition & 0 deletions packages/adapters/solana/src/tests/mocks/AuthConnector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export const mockAuthConnector = {
onRpcRequest: vi.fn(),
onRpcError: vi.fn(),
onRpcSuccess: vi.fn(),
onConnect: vi.fn(),
onNotConnected: vi.fn(),
onIsConnected: vi.fn(),
onSetPreferredAccount: vi.fn(),
Expand Down
32 changes: 22 additions & 10 deletions packages/adapters/wagmi/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ import {
createConfig,
getConnectors
} from '@wagmi/core'
import { ChainController, ConstantsUtil as CoreConstantsUtil } from '@reown/appkit-core'
import {
ChainController,
ConstantsUtil as CoreConstantsUtil,
StorageUtil
} from '@reown/appkit-core'
import type UniversalProvider from '@walletconnect/universal-provider'
import type { ChainAdapter } from '@reown/appkit-core'
import { prepareTransactionRequest, sendTransaction as wagmiSendTransaction } from '@wagmi/core'
Expand Down Expand Up @@ -863,7 +867,7 @@ export class WagmiAdapter implements ChainAdapter {
this.appKit?.addConnector({
id: ConstantsUtil.AUTH_CONNECTOR_ID,
type: 'AUTH',
name: 'Auth',
name: 'w3mAuth',
provider,
chain: this.chainNamespace
})
Expand Down Expand Up @@ -947,24 +951,32 @@ export class WagmiAdapter implements ChainAdapter {
}
})

provider.onIsConnected(req => {
const caipAddress = `eip155:${req.chainId}:${req.address}` as CaipAddress
provider.onIsConnected(() => {
provider.connect()
})

provider.onConnect(user => {
const caipAddress = `eip155:${user.chainId}:${user.address}` as CaipAddress
this.appKit?.setCaipAddress(caipAddress, this.chainNamespace)
this.appKit?.setSmartAccountDeployed(Boolean(req.smartAccountDeployed), this.chainNamespace)
this.appKit?.setSmartAccountDeployed(
Boolean(user.smartAccountDeployed),
this.chainNamespace
)
this.appKit?.setPreferredAccountType(
req.preferredAccountType as W3mFrameTypes.AccountType,
user.preferredAccountType as W3mFrameTypes.AccountType,
this.chainNamespace
)
this.appKit?.setLoading(false)
this.appKit?.setAllAccounts(
req.accounts || [
user.accounts || [
{
address: req.address,
type: (req.preferredAccountType || 'eoa') as W3mFrameTypes.AccountType
address: user.address,
type: (user.preferredAccountType || 'eoa') as W3mFrameTypes.AccountType
}
],
this.chainNamespace
)
StorageUtil.setConnectedConnector('AUTH')
this.appKit?.setLoading(false)
})

provider.onGetSmartAccountEnabledNetworks(networks => {
Expand Down
5 changes: 3 additions & 2 deletions packages/adapters/wagmi/src/tests/client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ describe('Wagmi Client', () => {
expect(mockAppKit.addConnector).toHaveBeenCalledWith({
id: ConstantsUtil.AUTH_CONNECTOR_ID,
type: 'AUTH',
name: 'Auth',
name: 'w3mAuth',
provider: 'mockProvider',
chain: 'eip155'
})
Expand All @@ -438,7 +438,8 @@ describe('Wagmi Client', () => {
onIsConnected: vi.fn(),
onGetSmartAccountEnabledNetworks: vi.fn(),
onSetPreferredAccount: vi.fn(),
rejectRpcRequests: vi.fn()
rejectRpcRequests: vi.fn(),
onConnect: vi.fn()
}
mockConnector = {
getProvider: vi.fn().mockResolvedValue(mockProvider)
Expand Down
12 changes: 7 additions & 5 deletions packages/core/src/controllers/ConnectorController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,15 @@ export const ConnectorController = {
connectorsByNameMap.forEach(keyConnectors => {
const firstItem = keyConnectors[0]

const isAuthConnector = firstItem?.id === 'w3mAuth'

if (keyConnectors.length > 1) {
mergedConnectors.push({
name: firstItem?.name,
imageUrl: firstItem?.imageUrl,
imageId: firstItem?.imageId,
connectors: [...keyConnectors],
type: 'MULTI_CHAIN',
type: isAuthConnector ? 'AUTH' : 'MULTI_CHAIN',
// These values are just placeholders, we don't use them in multi-chain connector select screen
chain: 'eip155',
id: firstItem?.id || ''
Expand Down Expand Up @@ -152,10 +154,10 @@ export const ConnectorController = {
return undefined
}

if (authConnector.type === 'MULTI_CHAIN' && authConnector?.connectors?.length) {
return authConnector.connectors.find(c => c.chain === activeNamespace) as
| AuthConnector
| undefined
if (authConnector?.connectors?.length) {
const connector = authConnector.connectors.find(c => c.chain === activeNamespace)

return connector as AuthConnector | undefined
}

return authConnector as AuthConnector
Expand Down
62 changes: 61 additions & 1 deletion packages/core/tests/controllers/ConnectorController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ const announcedConnector = {
name: 'Announced'
} as const

const announcedConnectorSolana = {
id: 'announced',
type: 'ANNOUNCED',
info: { rdns: 'announced.solana.io' },
chain: ConstantsUtil.CHAIN.SOLANA,
name: 'Announced'
} as const

const syncDappDataSpy = vi.spyOn(authProvider, 'syncDappData')
const syncThemeSpy = vi.spyOn(authProvider, 'syncTheme')

Expand Down Expand Up @@ -179,7 +187,7 @@ describe('ConnectorController', () => {
imageId: undefined,
imageUrl: undefined,
name: 'Auth',
type: 'MULTI_CHAIN',
type: 'AUTH',
chain: 'eip155',
connectors: [
{
Expand Down Expand Up @@ -207,4 +215,56 @@ describe('ConnectorController', () => {
announcedConnector
])
})

it('should merge connectors with the same chain', () => {
const mergedAnnouncedConnector = {
id: 'announced',
imageId: undefined,
imageUrl: undefined,
name: 'Announced',
type: 'MULTI_CHAIN',
chain: 'eip155',
connectors: [announcedConnector, announcedConnectorSolana]
}

const mergedAuthConnector = {
id: 'w3mAuth',
imageId: undefined,
imageUrl: undefined,
name: 'Auth',
type: 'AUTH',
chain: 'eip155',
connectors: [
{
chain: 'eip155',
id: 'w3mAuth',
name: 'Auth',
provider: {
syncDappData: syncDappDataSpy,
syncTheme: syncThemeSpy
},
type: 'AUTH'
},
{
chain: 'solana',
id: 'w3mAuth',
name: 'Auth',
provider: {
syncDappData: syncDappDataSpy,
syncTheme: syncThemeSpy
},
type: 'AUTH'
}
]
}
ConnectorController.addConnector(announcedConnectorSolana)
expect(ConnectorController.getConnectors()).toEqual([
walletConnectConnector,
externalConnector,
metamaskConnector,
zerionConnector,
mergedAuthConnector,
mergedAnnouncedConnector
])
})
})
19 changes: 14 additions & 5 deletions packages/wallet/src/W3mFrameProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -365,12 +365,13 @@ export class W3mFrameProvider {
this.rpcErrorHandler = callback
}

public onIsConnected(
callback: (request: W3mFrameTypes.Responses['FrameGetUserResponse']) => void
) {
public onIsConnected(callback: () => void) {
this.w3mFrame.events.onFrameEvent(event => {
if (event.type === W3mFrameConstants.FRAME_GET_USER_SUCCESS) {
callback(event.payload)
if (
event.type === W3mFrameConstants.FRAME_IS_CONNECTED_SUCCESS &&
event.payload.isConnected
) {
callback()
}
})
}
Expand All @@ -389,6 +390,14 @@ export class W3mFrameProvider {
})
}

public onConnect(callback: (user: W3mFrameTypes.Responses['FrameGetUserResponse']) => void) {
this.w3mFrame.events.onFrameEvent(event => {
if (event.type === W3mFrameConstants.FRAME_GET_USER_SUCCESS) {
callback(event.payload)
}
})
}

public async getCapabilities(): Promise<Record<`0x${string}`, W3mFrameTypes.WalletCapabilities>> {
try {
const capabilities = await this.request({
Expand Down

0 comments on commit 89addff

Please sign in to comment.