Skip to content

Commit 10cfb56

Browse files
authored
chore: add getDisabledCaipNetworks to appkit (#5098)
1 parent 90ca127 commit 10cfb56

File tree

5 files changed

+109
-23
lines changed

5 files changed

+109
-23
lines changed

.changeset/moody-wolves-jog.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
'@reown/appkit-controllers': patch
3+
'@reown/appkit-scaffold-ui': patch
4+
'@reown/appkit': patch
5+
'pay-test-exchange': patch
6+
'@reown/appkit-adapter-bitcoin': patch
7+
'@reown/appkit-adapter-ethers': patch
8+
'@reown/appkit-adapter-ethers5': patch
9+
'@reown/appkit-adapter-solana': patch
10+
'@reown/appkit-adapter-wagmi': patch
11+
'@reown/appkit-utils': patch
12+
'@reown/appkit-cdn': patch
13+
'@reown/appkit-cli': patch
14+
'@reown/appkit-codemod': patch
15+
'@reown/appkit-common': 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+
Added `getDisabledCaipNetworks` to AppKit to get disabled caip networks

packages/appkit/src/client/appkit-base-client.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,6 +1909,18 @@ export abstract class AppKitBaseClient {
19091909
return this.universalProvider
19101910
}
19111911

1912+
public getDisabledCaipNetworks() {
1913+
const approvedCaipNetworkIds = ChainController.getAllApprovedCaipNetworkIds()
1914+
const requestedCaipNetworks = ChainController.getAllRequestedCaipNetworks()
1915+
1916+
const sortedNetworks = CoreHelperUtil.sortRequestedNetworks(
1917+
approvedCaipNetworkIds,
1918+
requestedCaipNetworks
1919+
)
1920+
1921+
return sortedNetworks.filter(network => ChainController.isCaipNetworkDisabled(network))
1922+
}
1923+
19121924
// - Utils -------------------------------------------------------------------
19131925
protected handleAlertError(error: Error) {
19141926
const matchedUniversalProviderError = Object.entries(ErrorUtil.UniversalProviderErrors).find(

packages/appkit/tests/client/appkit-base-client.test.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'
22
import type { MockInstance } from 'vitest'
33

44
import { ConstantsUtil } from '@reown/appkit-common'
5-
import type { CaipNetwork, ChainNamespace } from '@reown/appkit-common'
5+
import type { CaipNetwork, CaipNetworkId, ChainNamespace } from '@reown/appkit-common'
66
import {
77
AlertController,
88
ApiController,
@@ -484,3 +484,48 @@ describe('AppKitBaseClient.open', () => {
484484
)
485485
})
486486
})
487+
488+
describe('AppKitBaseClient.getDisabledCaipNetworks', () => {
489+
let baseClient: AppKitBaseClient
490+
491+
beforeEach(() => {
492+
vi.clearAllMocks()
493+
494+
baseClient = new (class extends AppKitBaseClient {
495+
constructor() {
496+
super({
497+
projectId: 'test-project-id',
498+
networks: [mainnet],
499+
adapters: [],
500+
sdkVersion: 'html-wagmi-1'
501+
})
502+
}
503+
504+
async injectModalUi() {}
505+
async syncIdentity() {}
506+
})()
507+
})
508+
509+
it('should return only disabled requested caipNetworks', () => {
510+
const approvedIds = ['eip155:1', 'solana:101'] as CaipNetworkId[]
511+
const requestedNetworks = [
512+
{ id: 1, chainNamespace: 'eip155', caipNetworkId: 'eip155:1' },
513+
{ id: 101, chainNamespace: 'solana', caipNetworkId: 'solana:101' },
514+
{ id: 56, chainNamespace: 'eip155', caipNetworkId: 'eip155:56' }
515+
] as unknown as CaipNetwork[]
516+
517+
vi.spyOn(ChainController, 'getAllApprovedCaipNetworkIds').mockReturnValue(approvedIds)
518+
vi.spyOn(ChainController, 'getAllRequestedCaipNetworks').mockReturnValue(requestedNetworks)
519+
vi.spyOn(CoreHelperUtil, 'sortRequestedNetworks').mockReturnValue(requestedNetworks)
520+
521+
const isDisabledMock = vi
522+
.spyOn(ChainController, 'isCaipNetworkDisabled')
523+
.mockImplementation(network => network.caipNetworkId === 'eip155:56')
524+
525+
const result = baseClient.getDisabledCaipNetworks()
526+
527+
expect(isDisabledMock).toHaveBeenCalled()
528+
expect(result).toHaveLength(1)
529+
expect(result[0]?.caipNetworkId).toBe('eip155:56')
530+
})
531+
})

packages/controllers/src/controllers/ChainController.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,26 @@ const controller = {
879879
}
880880

881881
return []
882+
},
883+
884+
isCaipNetworkDisabled(network: CaipNetwork) {
885+
const networkNamespace = network.chainNamespace
886+
const isNextNamespaceConnected = Boolean(
887+
ChainController.getAccountData(networkNamespace)?.caipAddress
888+
)
889+
const approvedCaipNetworkIds = ChainController.getAllApprovedCaipNetworkIds()
890+
const shouldSupportAllNetworks =
891+
ChainController.getNetworkProp('supportsAllNetworks', networkNamespace) !== false
892+
const connectorId = ConnectorController.getConnectorId(networkNamespace)
893+
const authConnector = ConnectorController.getAuthConnector()
894+
const isConnectedWithAuth =
895+
connectorId === CommonConstantsUtil.CONNECTOR_ID.AUTH && authConnector
896+
897+
if (!isNextNamespaceConnected || shouldSupportAllNetworks || isConnectedWithAuth) {
898+
return false
899+
}
900+
901+
return !approvedCaipNetworkIds?.includes(network.caipNetworkId)
882902
}
883903
}
884904

packages/scaffold-ui/src/views/w3m-networks-view/index.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ import { LitElement, html } from 'lit'
22
import { state } from 'lit/decorators.js'
33
import { ifDefined } from 'lit/directives/if-defined.js'
44

5-
import { type CaipNetwork, ConstantsUtil } from '@reown/appkit-common'
5+
import { type CaipNetwork } from '@reown/appkit-common'
66
import {
77
AssetController,
88
AssetUtil,
99
ChainController,
10-
ConnectorController,
1110
CoreHelperUtil,
1211
NetworkUtil
1312
} from '@reown/appkit-controllers'
@@ -113,32 +112,13 @@ export class W3mNetworksView extends LitElement {
113112
type="network"
114113
name=${network.name ?? network.id}
115114
@click=${() => this.onSwitchNetwork(network)}
116-
.disabled=${this.getNetworkDisabled(network)}
115+
.disabled=${ChainController.isCaipNetworkDisabled(network)}
117116
data-testid=${`w3m-network-switch-${network.name ?? network.id}`}
118117
></wui-list-network>
119118
`
120119
)
121120
}
122121

123-
private getNetworkDisabled(network: CaipNetwork) {
124-
const networkNamespace = network.chainNamespace
125-
const isNextNamespaceConnected = Boolean(
126-
ChainController.getAccountData(networkNamespace)?.caipAddress
127-
)
128-
const approvedCaipNetworkIds = ChainController.getAllApprovedCaipNetworkIds()
129-
const shouldSupportAllNetworks =
130-
ChainController.getNetworkProp('supportsAllNetworks', networkNamespace) !== false
131-
const connectorId = ConnectorController.getConnectorId(networkNamespace)
132-
const authConnector = ConnectorController.getAuthConnector()
133-
const isConnectedWithAuth = connectorId === ConstantsUtil.CONNECTOR_ID.AUTH && authConnector
134-
135-
if (!isNextNamespaceConnected || shouldSupportAllNetworks || isConnectedWithAuth) {
136-
return false
137-
}
138-
139-
return !approvedCaipNetworkIds?.includes(network.caipNetworkId)
140-
}
141-
142122
private onSwitchNetwork(network: CaipNetwork) {
143123
NetworkUtil.onSwitchNetwork({ network })
144124
}

0 commit comments

Comments
 (0)