@reown/appkit-wagmi-react-native 0.0.0-chore-types-20250804204153 → 0.0.0-chore-added-import-20251002170458
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/adapter.js +25 -2
- package/lib/commonjs/adapter.js.map +1 -1
- package/lib/commonjs/connectors/UniversalConnector.js +104 -78
- package/lib/commonjs/connectors/UniversalConnector.js.map +1 -1
- package/lib/module/adapter.js +25 -2
- package/lib/module/adapter.js.map +1 -1
- package/lib/module/connectors/UniversalConnector.js +104 -78
- package/lib/module/connectors/UniversalConnector.js.map +1 -1
- package/lib/typescript/adapter.d.ts +2 -0
- package/lib/typescript/adapter.d.ts.map +1 -1
- package/lib/typescript/connectors/UniversalConnector.d.ts +7 -3
- package/lib/typescript/connectors/UniversalConnector.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/adapter.ts +32 -2
- package/src/connectors/UniversalConnector.ts +122 -71
package/lib/commonjs/adapter.js
CHANGED
|
@@ -95,6 +95,10 @@ class WagmiAdapter extends _appkitCommonReactNative.EVMAdapter {
|
|
|
95
95
|
return accountsForNamespace?.accounts;
|
|
96
96
|
}
|
|
97
97
|
async disconnect() {
|
|
98
|
+
if (this.unsubscribeWatchAccount) {
|
|
99
|
+
this.unsubscribeWatchAccount();
|
|
100
|
+
this.unsubscribeWatchAccount = undefined;
|
|
101
|
+
}
|
|
98
102
|
if (this.wagmiConfigConnector) {
|
|
99
103
|
await (0, _core.disconnect)(this.wagmiConfig, {
|
|
100
104
|
connector: this.wagmiConfigConnector
|
|
@@ -112,6 +116,12 @@ class WagmiAdapter extends _appkitCommonReactNative.EVMAdapter {
|
|
|
112
116
|
getSupportedNamespace() {
|
|
113
117
|
return WagmiAdapter.supportedNamespace;
|
|
114
118
|
}
|
|
119
|
+
|
|
120
|
+
// Override subscribeToEvents to prevent double subscription
|
|
121
|
+
// Wagmi handles provider events through its connector system and watchAccount
|
|
122
|
+
subscribeToEvents() {
|
|
123
|
+
// Do nothing - wagmi's watchAccount in setupWatchers handles all events
|
|
124
|
+
}
|
|
115
125
|
init({
|
|
116
126
|
connector: _connector
|
|
117
127
|
}) {
|
|
@@ -144,12 +154,25 @@ class WagmiAdapter extends _appkitCommonReactNative.EVMAdapter {
|
|
|
144
154
|
this.setupWatchers();
|
|
145
155
|
}
|
|
146
156
|
setupWatchers() {
|
|
147
|
-
|
|
157
|
+
// Clean up existing subscription if any
|
|
158
|
+
this.unsubscribeWatchAccount?.();
|
|
159
|
+
this.unsubscribeWatchAccount = (0, _core.watchAccount)(this.wagmiConfig, {
|
|
148
160
|
onChange: (accountData, prevAccountData) => {
|
|
161
|
+
if (!this.connector) return;
|
|
162
|
+
|
|
163
|
+
// Handle disconnect
|
|
149
164
|
if (accountData.status === 'disconnected' && prevAccountData.address) {
|
|
150
165
|
this.onDisconnect();
|
|
166
|
+
return;
|
|
151
167
|
}
|
|
152
|
-
|
|
168
|
+
|
|
169
|
+
// Handle account address changes
|
|
170
|
+
if (accountData?.addresses && accountData?.address && accountData.address !== prevAccountData?.address) {
|
|
171
|
+
this.onAccountsChanged([...accountData.addresses]);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Handle chain changes
|
|
175
|
+
if (accountData?.chainId && accountData.chainId !== prevAccountData?.chainId) {
|
|
153
176
|
this.onChainChanged(accountData.chainId?.toString());
|
|
154
177
|
}
|
|
155
178
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_appkitCommonReactNative","require","_core","_helpers","_viem","_UniversalConnector","WagmiAdapter","EVMAdapter","supportedNamespace","constructor","configParams","adapterType","wagmiChains","networks","wagmiConfig","createWagmiInternalConfig","initialConnectors","transportsArr","map","chain","id","getTransport","chainId","projectId","transports","Object","fromEntries","createConfig","chains","connectors","multiInjectedProviderDiscovery","switchNetwork","network","wagmiConfigConnector","Error","switchChainWagmi","connector","getBalance","params","address","tokens","balanceAddress","getAccounts","find","acc","includes","toString","Promise","resolve","amount","symbol","nativeCurrency","accountHex","split","token","caipNetworkId","balance","getBalanceWagmi","formattedBalance","formatUnits","value","decimals","undefined","emit","namespaces","getNamespaces","supportedNamespaceKey","getSupportedNamespace","accountsForNamespace","accounts","disconnect","disconnectWagmiCore","onDisconnect","evmAdapterInstance","init","_connector","connectorInstance","_internal","setup","UniversalConnector","setState","prev","emitter","on","type","connectWagmi","error","setupWatchers","watchAccount","onChange","accountData","prevAccountData","status","onChainChanged","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AASA,IAAAC,KAAA,GAAAD,OAAA;AAYA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AAQO,MAAMK,YAAY,SAASC,mCAAU,CAAC;EAC3C,OAAeC,kBAAkB,GAAmB,QAAQ;
|
|
1
|
+
{"version":3,"names":["_appkitCommonReactNative","require","_core","_helpers","_viem","_UniversalConnector","WagmiAdapter","EVMAdapter","supportedNamespace","constructor","configParams","adapterType","wagmiChains","networks","wagmiConfig","createWagmiInternalConfig","initialConnectors","transportsArr","map","chain","id","getTransport","chainId","projectId","transports","Object","fromEntries","createConfig","chains","connectors","multiInjectedProviderDiscovery","switchNetwork","network","wagmiConfigConnector","Error","switchChainWagmi","connector","getBalance","params","address","tokens","balanceAddress","getAccounts","find","acc","includes","toString","Promise","resolve","amount","symbol","nativeCurrency","accountHex","split","token","caipNetworkId","balance","getBalanceWagmi","formattedBalance","formatUnits","value","decimals","undefined","emit","namespaces","getNamespaces","supportedNamespaceKey","getSupportedNamespace","accountsForNamespace","accounts","disconnect","unsubscribeWatchAccount","disconnectWagmiCore","onDisconnect","evmAdapterInstance","subscribeToEvents","init","_connector","connectorInstance","_internal","setup","UniversalConnector","setState","prev","emitter","on","type","connectWagmi","error","setupWatchers","watchAccount","onChange","accountData","prevAccountData","status","addresses","onAccountsChanged","onChainChanged","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,52 +6,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.UniversalConnector = UniversalConnector;
|
|
7
7
|
var _viem = require("viem");
|
|
8
8
|
var _wagmi = require("wagmi");
|
|
9
|
-
var _helpers = require("../utils/helpers");
|
|
10
9
|
function UniversalConnector(appKitProvidedConnector) {
|
|
11
10
|
let provider;
|
|
12
|
-
let
|
|
13
|
-
let
|
|
14
|
-
let
|
|
11
|
+
let accountsChanged;
|
|
12
|
+
let chainChanged;
|
|
13
|
+
let sessionDelete;
|
|
14
|
+
let disconnect;
|
|
15
|
+
function cleanupEventListeners(_provider) {
|
|
16
|
+
if (accountsChanged) {
|
|
17
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
18
|
+
accountsChanged = undefined;
|
|
19
|
+
}
|
|
20
|
+
if (chainChanged) {
|
|
21
|
+
_provider?.off('chainChanged', chainChanged);
|
|
22
|
+
chainChanged = undefined;
|
|
23
|
+
}
|
|
24
|
+
if (disconnect) {
|
|
25
|
+
_provider?.off('disconnect', disconnect);
|
|
26
|
+
disconnect = undefined;
|
|
27
|
+
}
|
|
28
|
+
if (sessionDelete) {
|
|
29
|
+
_provider?.off('session_delete', sessionDelete);
|
|
30
|
+
sessionDelete = undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
15
33
|
return (0, _wagmi.createConnector)(config => ({
|
|
16
34
|
id: 'walletconnect',
|
|
17
35
|
name: 'WalletConnect',
|
|
18
36
|
type: 'walletconnect',
|
|
19
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
37
|
+
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
20
38
|
async setup() {
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (hexAccounts.length === 0) {
|
|
29
|
-
config.emitter.emit('disconnect');
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
chainChangedHandler = chainId => {
|
|
33
|
-
const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
|
|
34
|
-
config.emitter.emit('change', {
|
|
35
|
-
chainId: newChainId
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
disconnectHandler = error => {
|
|
39
|
-
config.emitter.emit('disconnect');
|
|
40
|
-
if (error) config.emitter.emit('error', {
|
|
41
|
-
error
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
|
|
45
|
-
if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
|
|
46
|
-
if (disconnectHandler) provider.on('disconnect', disconnectHandler);
|
|
47
|
-
if (disconnectHandler) provider.on('session_delete', disconnectHandler);
|
|
39
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
40
|
+
if (!_provider) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (!sessionDelete) {
|
|
44
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
45
|
+
_provider.on('session_delete', sessionDelete);
|
|
48
46
|
}
|
|
49
47
|
},
|
|
50
48
|
async connect({
|
|
51
49
|
chainId
|
|
52
50
|
} = {}) {
|
|
53
51
|
try {
|
|
54
|
-
const _provider =
|
|
52
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
55
53
|
if (!_provider) throw new _wagmi.ProviderNotFoundError();
|
|
56
54
|
|
|
57
55
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -69,7 +67,22 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
69
67
|
});
|
|
70
68
|
currentChainId = chainId;
|
|
71
69
|
}
|
|
72
|
-
|
|
70
|
+
if (!accountsChanged) {
|
|
71
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
72
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
73
|
+
}
|
|
74
|
+
if (!chainChanged) {
|
|
75
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
76
|
+
_provider.on('chainChanged', chainChanged);
|
|
77
|
+
}
|
|
78
|
+
if (!disconnect) {
|
|
79
|
+
disconnect = this.onDisconnect.bind(this);
|
|
80
|
+
_provider.on('disconnect', disconnect);
|
|
81
|
+
}
|
|
82
|
+
if (!sessionDelete) {
|
|
83
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
84
|
+
_provider.on('session_delete', sessionDelete);
|
|
85
|
+
}
|
|
73
86
|
return {
|
|
74
87
|
accounts: accountAddresses,
|
|
75
88
|
chainId: currentChainId
|
|
@@ -80,25 +93,23 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
80
93
|
}
|
|
81
94
|
},
|
|
82
95
|
async disconnect() {
|
|
83
|
-
await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
96
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
97
|
+
try {
|
|
98
|
+
await appKitProvidedConnector.disconnect();
|
|
99
|
+
config.emitter.emit('message', {
|
|
100
|
+
type: 'externalDisconnect'
|
|
101
|
+
});
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (!/No matching key/i.test(error.message)) {
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
} finally {
|
|
107
|
+
cleanupEventListeners(_provider);
|
|
95
108
|
}
|
|
96
|
-
this.ready = false;
|
|
97
109
|
},
|
|
98
110
|
async getAccounts() {
|
|
99
111
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
100
|
-
|
|
101
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
112
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts;
|
|
102
113
|
if (!eip155Accounts) return [];
|
|
103
114
|
return eip155Accounts.map(caipAddr => {
|
|
104
115
|
const parts = caipAddr.split(':');
|
|
@@ -111,8 +122,7 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
111
122
|
|
|
112
123
|
// Fallback: Try to get from CAIP accounts if available
|
|
113
124
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
114
|
-
|
|
115
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
125
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts;
|
|
116
126
|
if (eip155Accounts && eip155Accounts.length > 0) {
|
|
117
127
|
const parts = eip155Accounts[0]?.split(':');
|
|
118
128
|
if (parts && parts.length > 1 && typeof parts[1] === 'string') {
|
|
@@ -127,7 +137,7 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
127
137
|
},
|
|
128
138
|
async getProvider() {
|
|
129
139
|
if (!provider) {
|
|
130
|
-
provider = appKitProvidedConnector.getProvider();
|
|
140
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
131
141
|
}
|
|
132
142
|
return provider;
|
|
133
143
|
},
|
|
@@ -142,7 +152,7 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
142
152
|
async switchChain({
|
|
143
153
|
chainId
|
|
144
154
|
}) {
|
|
145
|
-
const _provider =
|
|
155
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
146
156
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
147
157
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
148
158
|
if (!newChain) throw new _viem.SwitchChainError(new _wagmi.ChainNotConfiguredError());
|
|
@@ -153,29 +163,23 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
153
163
|
chainId: (0, _viem.numberToHex)(chainId)
|
|
154
164
|
}]
|
|
155
165
|
});
|
|
156
|
-
config.emitter.emit('change', {
|
|
157
|
-
chainId
|
|
158
|
-
});
|
|
159
166
|
return newChain;
|
|
160
|
-
} catch (
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
} catch (err) {
|
|
168
|
+
const error = err;
|
|
169
|
+
if (/(user rejected)/i.test(error.message)) throw new _viem.UserRejectedRequestError(error);
|
|
163
170
|
if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
|
|
171
|
+
// Indicates chain is not added to provider
|
|
164
172
|
try {
|
|
173
|
+
const addEthereumChainParams = {
|
|
174
|
+
chainId: (0, _viem.numberToHex)(chainId),
|
|
175
|
+
chainName: newChain.name,
|
|
176
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
177
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
178
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
179
|
+
};
|
|
165
180
|
await _provider.request({
|
|
166
181
|
method: 'wallet_addEthereumChain',
|
|
167
|
-
params: [
|
|
168
|
-
chainId: (0, _viem.numberToHex)(chainId),
|
|
169
|
-
chainName: newChain.name,
|
|
170
|
-
nativeCurrency: newChain.nativeCurrency,
|
|
171
|
-
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
172
|
-
// Take first default HTTP RPC URL
|
|
173
|
-
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
174
|
-
}]
|
|
175
|
-
});
|
|
176
|
-
await appKitProvidedConnector.switchNetwork((0, _helpers.formatNetwork)(newChain));
|
|
177
|
-
config.emitter.emit('change', {
|
|
178
|
-
chainId
|
|
182
|
+
params: [addEthereumChainParams]
|
|
179
183
|
});
|
|
180
184
|
return newChain;
|
|
181
185
|
} catch (addError) {
|
|
@@ -186,18 +190,40 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
186
190
|
}
|
|
187
191
|
},
|
|
188
192
|
onAccountsChanged(accounts) {
|
|
189
|
-
if
|
|
190
|
-
|
|
191
|
-
|
|
193
|
+
//Only emit if the account is an evm account
|
|
194
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
195
|
+
if (accounts.length === 0) {
|
|
196
|
+
this.onDisconnect();
|
|
197
|
+
} else if (shouldEmit) {
|
|
198
|
+
config.emitter.emit('change', {
|
|
199
|
+
accounts: accounts.map(x => (0, _viem.getAddress)(x))
|
|
200
|
+
});
|
|
201
|
+
}
|
|
192
202
|
},
|
|
193
203
|
onChainChanged(chain) {
|
|
194
204
|
const chainId = Number(chain);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
205
|
+
|
|
206
|
+
//Only emit if the chain is in the config (evm)
|
|
207
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
208
|
+
if (shouldEmit) {
|
|
209
|
+
config.emitter.emit('change', {
|
|
210
|
+
chainId
|
|
211
|
+
});
|
|
212
|
+
}
|
|
198
213
|
},
|
|
199
|
-
onDisconnect
|
|
214
|
+
async onDisconnect() {
|
|
200
215
|
config.emitter.emit('disconnect');
|
|
216
|
+
try {
|
|
217
|
+
const _provider = await this.getProvider();
|
|
218
|
+
cleanupEventListeners(_provider);
|
|
219
|
+
} catch (error) {
|
|
220
|
+
// If provider is not available, still clean up local references
|
|
221
|
+
// to prevent memory leaks
|
|
222
|
+
cleanupEventListeners(null);
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
onSessionDelete() {
|
|
226
|
+
this.onDisconnect();
|
|
201
227
|
}
|
|
202
228
|
}));
|
|
203
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_viem","require","_wagmi","
|
|
1
|
+
{"version":3,"names":["_viem","require","_wagmi","UniversalConnector","appKitProvidedConnector","provider","accountsChanged","chainChanged","sessionDelete","disconnect","cleanupEventListeners","_provider","off","undefined","createConnector","config","id","name","type","ready","getProvider","setup","catch","onSessionDelete","bind","on","connect","chainId","ProviderNotFoundError","accountAddresses","getAccounts","length","UserRejectedRequestError","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","namespaces","getNamespaces","eip155Accounts","map","caipAddr","parts","split","filter","addrPart","getAddress","parseInt","chainIdNum","isNaN","chains","isAuthorized","newChain","find","c","SwitchChainError","ChainNotConfiguredError","request","method","params","numberToHex","err","code","data","originalError","addEthereumChainParams","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","addError","shouldEmit","some","account","startsWith","x","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/adapter.js
CHANGED
|
@@ -91,6 +91,10 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
91
91
|
return accountsForNamespace?.accounts;
|
|
92
92
|
}
|
|
93
93
|
async disconnect() {
|
|
94
|
+
if (this.unsubscribeWatchAccount) {
|
|
95
|
+
this.unsubscribeWatchAccount();
|
|
96
|
+
this.unsubscribeWatchAccount = undefined;
|
|
97
|
+
}
|
|
94
98
|
if (this.wagmiConfigConnector) {
|
|
95
99
|
await disconnectWagmiCore(this.wagmiConfig, {
|
|
96
100
|
connector: this.wagmiConfigConnector
|
|
@@ -108,6 +112,12 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
108
112
|
getSupportedNamespace() {
|
|
109
113
|
return WagmiAdapter.supportedNamespace;
|
|
110
114
|
}
|
|
115
|
+
|
|
116
|
+
// Override subscribeToEvents to prevent double subscription
|
|
117
|
+
// Wagmi handles provider events through its connector system and watchAccount
|
|
118
|
+
subscribeToEvents() {
|
|
119
|
+
// Do nothing - wagmi's watchAccount in setupWatchers handles all events
|
|
120
|
+
}
|
|
111
121
|
init({
|
|
112
122
|
connector: _connector
|
|
113
123
|
}) {
|
|
@@ -140,12 +150,25 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
140
150
|
this.setupWatchers();
|
|
141
151
|
}
|
|
142
152
|
setupWatchers() {
|
|
143
|
-
|
|
153
|
+
// Clean up existing subscription if any
|
|
154
|
+
this.unsubscribeWatchAccount?.();
|
|
155
|
+
this.unsubscribeWatchAccount = watchAccount(this.wagmiConfig, {
|
|
144
156
|
onChange: (accountData, prevAccountData) => {
|
|
157
|
+
if (!this.connector) return;
|
|
158
|
+
|
|
159
|
+
// Handle disconnect
|
|
145
160
|
if (accountData.status === 'disconnected' && prevAccountData.address) {
|
|
146
161
|
this.onDisconnect();
|
|
162
|
+
return;
|
|
147
163
|
}
|
|
148
|
-
|
|
164
|
+
|
|
165
|
+
// Handle account address changes
|
|
166
|
+
if (accountData?.addresses && accountData?.address && accountData.address !== prevAccountData?.address) {
|
|
167
|
+
this.onAccountsChanged([...accountData.addresses]);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Handle chain changes
|
|
171
|
+
if (accountData?.chainId && accountData.chainId !== prevAccountData?.chainId) {
|
|
149
172
|
this.onChainChanged(accountData.chainId?.toString());
|
|
150
173
|
}
|
|
151
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EVMAdapter","createConfig","getBalance","getBalanceWagmi","switchChain","switchChainWagmi","disconnect","disconnectWagmiCore","connect","connectWagmi","watchAccount","getTransport","formatUnits","UniversalConnector","WagmiAdapter","supportedNamespace","constructor","configParams","adapterType","wagmiChains","networks","wagmiConfig","createWagmiInternalConfig","initialConnectors","transportsArr","map","chain","id","chainId","projectId","transports","Object","fromEntries","chains","connectors","multiInjectedProviderDiscovery","switchNetwork","network","wagmiConfigConnector","Error","connector","params","address","tokens","balanceAddress","getAccounts","find","acc","includes","toString","Promise","resolve","amount","symbol","nativeCurrency","accountHex","split","token","caipNetworkId","balance","formattedBalance","value","decimals","undefined","emit","namespaces","getNamespaces","supportedNamespaceKey","getSupportedNamespace","accountsForNamespace","accounts","onDisconnect","evmAdapterInstance","init","_connector","connectorInstance","_internal","setup","setState","prev","emitter","on","type","error","setupWatchers","onChange","accountData","prevAccountData","status","onChainChanged"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":";;AAAA,SACEA,UAAU,QAOL,mCAAmC;AAC1C,SAGEC,YAAY,EACZC,UAAU,IAAIC,eAAe,EAC7BC,WAAW,IAAIC,gBAAgB,EAC/BC,UAAU,IAAIC,mBAAmB,EACjCC,OAAO,IAAIC,YAAY,EAEvBC,YAAY,QACP,aAAa;AAEpB,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,WAAW,QAAkB,MAAM;AAC5C,SAASC,kBAAkB,QAAQ,iCAAiC;AAQpE,OAAO,MAAMC,YAAY,SAASd,UAAU,CAAC;EAC3C,OAAee,kBAAkB,GAAmB,QAAQ;
|
|
1
|
+
{"version":3,"names":["EVMAdapter","createConfig","getBalance","getBalanceWagmi","switchChain","switchChainWagmi","disconnect","disconnectWagmiCore","connect","connectWagmi","watchAccount","getTransport","formatUnits","UniversalConnector","WagmiAdapter","supportedNamespace","constructor","configParams","adapterType","wagmiChains","networks","wagmiConfig","createWagmiInternalConfig","initialConnectors","transportsArr","map","chain","id","chainId","projectId","transports","Object","fromEntries","chains","connectors","multiInjectedProviderDiscovery","switchNetwork","network","wagmiConfigConnector","Error","connector","params","address","tokens","balanceAddress","getAccounts","find","acc","includes","toString","Promise","resolve","amount","symbol","nativeCurrency","accountHex","split","token","caipNetworkId","balance","formattedBalance","value","decimals","undefined","emit","namespaces","getNamespaces","supportedNamespaceKey","getSupportedNamespace","accountsForNamespace","accounts","unsubscribeWatchAccount","onDisconnect","evmAdapterInstance","subscribeToEvents","init","_connector","connectorInstance","_internal","setup","setState","prev","emitter","on","type","error","setupWatchers","onChange","accountData","prevAccountData","status","addresses","onAccountsChanged","onChainChanged"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,52 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
import { getAddress, numberToHex, SwitchChainError, UserRejectedRequestError } from 'viem';
|
|
4
4
|
import { ChainNotConfiguredError, createConnector, ProviderNotFoundError } from 'wagmi';
|
|
5
|
-
import { formatNetwork } from '../utils/helpers';
|
|
6
5
|
export function UniversalConnector(appKitProvidedConnector) {
|
|
7
6
|
let provider;
|
|
8
|
-
let
|
|
9
|
-
let
|
|
10
|
-
let
|
|
7
|
+
let accountsChanged;
|
|
8
|
+
let chainChanged;
|
|
9
|
+
let sessionDelete;
|
|
10
|
+
let disconnect;
|
|
11
|
+
function cleanupEventListeners(_provider) {
|
|
12
|
+
if (accountsChanged) {
|
|
13
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
14
|
+
accountsChanged = undefined;
|
|
15
|
+
}
|
|
16
|
+
if (chainChanged) {
|
|
17
|
+
_provider?.off('chainChanged', chainChanged);
|
|
18
|
+
chainChanged = undefined;
|
|
19
|
+
}
|
|
20
|
+
if (disconnect) {
|
|
21
|
+
_provider?.off('disconnect', disconnect);
|
|
22
|
+
disconnect = undefined;
|
|
23
|
+
}
|
|
24
|
+
if (sessionDelete) {
|
|
25
|
+
_provider?.off('session_delete', sessionDelete);
|
|
26
|
+
sessionDelete = undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
11
29
|
return createConnector(config => ({
|
|
12
30
|
id: 'walletconnect',
|
|
13
31
|
name: 'WalletConnect',
|
|
14
32
|
type: 'walletconnect',
|
|
15
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
33
|
+
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
16
34
|
async setup() {
|
|
17
|
-
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (hexAccounts.length === 0) {
|
|
25
|
-
config.emitter.emit('disconnect');
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
chainChangedHandler = chainId => {
|
|
29
|
-
const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
|
|
30
|
-
config.emitter.emit('change', {
|
|
31
|
-
chainId: newChainId
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
disconnectHandler = error => {
|
|
35
|
-
config.emitter.emit('disconnect');
|
|
36
|
-
if (error) config.emitter.emit('error', {
|
|
37
|
-
error
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
|
|
41
|
-
if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
|
|
42
|
-
if (disconnectHandler) provider.on('disconnect', disconnectHandler);
|
|
43
|
-
if (disconnectHandler) provider.on('session_delete', disconnectHandler);
|
|
35
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
36
|
+
if (!_provider) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!sessionDelete) {
|
|
40
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
41
|
+
_provider.on('session_delete', sessionDelete);
|
|
44
42
|
}
|
|
45
43
|
},
|
|
46
44
|
async connect({
|
|
47
45
|
chainId
|
|
48
46
|
} = {}) {
|
|
49
47
|
try {
|
|
50
|
-
const _provider =
|
|
48
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
51
49
|
if (!_provider) throw new ProviderNotFoundError();
|
|
52
50
|
|
|
53
51
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -65,7 +63,22 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
65
63
|
});
|
|
66
64
|
currentChainId = chainId;
|
|
67
65
|
}
|
|
68
|
-
|
|
66
|
+
if (!accountsChanged) {
|
|
67
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
68
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
69
|
+
}
|
|
70
|
+
if (!chainChanged) {
|
|
71
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
72
|
+
_provider.on('chainChanged', chainChanged);
|
|
73
|
+
}
|
|
74
|
+
if (!disconnect) {
|
|
75
|
+
disconnect = this.onDisconnect.bind(this);
|
|
76
|
+
_provider.on('disconnect', disconnect);
|
|
77
|
+
}
|
|
78
|
+
if (!sessionDelete) {
|
|
79
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
80
|
+
_provider.on('session_delete', sessionDelete);
|
|
81
|
+
}
|
|
69
82
|
return {
|
|
70
83
|
accounts: accountAddresses,
|
|
71
84
|
chainId: currentChainId
|
|
@@ -76,25 +89,23 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
76
89
|
}
|
|
77
90
|
},
|
|
78
91
|
async disconnect() {
|
|
79
|
-
await
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
93
|
+
try {
|
|
94
|
+
await appKitProvidedConnector.disconnect();
|
|
95
|
+
config.emitter.emit('message', {
|
|
96
|
+
type: 'externalDisconnect'
|
|
97
|
+
});
|
|
98
|
+
} catch (error) {
|
|
99
|
+
if (!/No matching key/i.test(error.message)) {
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
} finally {
|
|
103
|
+
cleanupEventListeners(_provider);
|
|
91
104
|
}
|
|
92
|
-
this.ready = false;
|
|
93
105
|
},
|
|
94
106
|
async getAccounts() {
|
|
95
107
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
96
|
-
|
|
97
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
108
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts;
|
|
98
109
|
if (!eip155Accounts) return [];
|
|
99
110
|
return eip155Accounts.map(caipAddr => {
|
|
100
111
|
const parts = caipAddr.split(':');
|
|
@@ -107,8 +118,7 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
107
118
|
|
|
108
119
|
// Fallback: Try to get from CAIP accounts if available
|
|
109
120
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
110
|
-
|
|
111
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
121
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts;
|
|
112
122
|
if (eip155Accounts && eip155Accounts.length > 0) {
|
|
113
123
|
const parts = eip155Accounts[0]?.split(':');
|
|
114
124
|
if (parts && parts.length > 1 && typeof parts[1] === 'string') {
|
|
@@ -123,7 +133,7 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
123
133
|
},
|
|
124
134
|
async getProvider() {
|
|
125
135
|
if (!provider) {
|
|
126
|
-
provider = appKitProvidedConnector.getProvider();
|
|
136
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
127
137
|
}
|
|
128
138
|
return provider;
|
|
129
139
|
},
|
|
@@ -138,7 +148,7 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
138
148
|
async switchChain({
|
|
139
149
|
chainId
|
|
140
150
|
}) {
|
|
141
|
-
const _provider =
|
|
151
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
142
152
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
143
153
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
144
154
|
if (!newChain) throw new SwitchChainError(new ChainNotConfiguredError());
|
|
@@ -149,29 +159,23 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
149
159
|
chainId: numberToHex(chainId)
|
|
150
160
|
}]
|
|
151
161
|
});
|
|
152
|
-
config.emitter.emit('change', {
|
|
153
|
-
chainId
|
|
154
|
-
});
|
|
155
162
|
return newChain;
|
|
156
|
-
} catch (
|
|
157
|
-
|
|
158
|
-
|
|
163
|
+
} catch (err) {
|
|
164
|
+
const error = err;
|
|
165
|
+
if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
|
|
159
166
|
if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
|
|
167
|
+
// Indicates chain is not added to provider
|
|
160
168
|
try {
|
|
169
|
+
const addEthereumChainParams = {
|
|
170
|
+
chainId: numberToHex(chainId),
|
|
171
|
+
chainName: newChain.name,
|
|
172
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
173
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
174
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
175
|
+
};
|
|
161
176
|
await _provider.request({
|
|
162
177
|
method: 'wallet_addEthereumChain',
|
|
163
|
-
params: [
|
|
164
|
-
chainId: numberToHex(chainId),
|
|
165
|
-
chainName: newChain.name,
|
|
166
|
-
nativeCurrency: newChain.nativeCurrency,
|
|
167
|
-
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
168
|
-
// Take first default HTTP RPC URL
|
|
169
|
-
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
170
|
-
}]
|
|
171
|
-
});
|
|
172
|
-
await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
|
|
173
|
-
config.emitter.emit('change', {
|
|
174
|
-
chainId
|
|
178
|
+
params: [addEthereumChainParams]
|
|
175
179
|
});
|
|
176
180
|
return newChain;
|
|
177
181
|
} catch (addError) {
|
|
@@ -182,18 +186,40 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
182
186
|
}
|
|
183
187
|
},
|
|
184
188
|
onAccountsChanged(accounts) {
|
|
185
|
-
if
|
|
186
|
-
|
|
187
|
-
|
|
189
|
+
//Only emit if the account is an evm account
|
|
190
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
191
|
+
if (accounts.length === 0) {
|
|
192
|
+
this.onDisconnect();
|
|
193
|
+
} else if (shouldEmit) {
|
|
194
|
+
config.emitter.emit('change', {
|
|
195
|
+
accounts: accounts.map(x => getAddress(x))
|
|
196
|
+
});
|
|
197
|
+
}
|
|
188
198
|
},
|
|
189
199
|
onChainChanged(chain) {
|
|
190
200
|
const chainId = Number(chain);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
201
|
+
|
|
202
|
+
//Only emit if the chain is in the config (evm)
|
|
203
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
204
|
+
if (shouldEmit) {
|
|
205
|
+
config.emitter.emit('change', {
|
|
206
|
+
chainId
|
|
207
|
+
});
|
|
208
|
+
}
|
|
194
209
|
},
|
|
195
|
-
onDisconnect
|
|
210
|
+
async onDisconnect() {
|
|
196
211
|
config.emitter.emit('disconnect');
|
|
212
|
+
try {
|
|
213
|
+
const _provider = await this.getProvider();
|
|
214
|
+
cleanupEventListeners(_provider);
|
|
215
|
+
} catch (error) {
|
|
216
|
+
// If provider is not available, still clean up local references
|
|
217
|
+
// to prevent memory leaks
|
|
218
|
+
cleanupEventListeners(null);
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
onSessionDelete() {
|
|
222
|
+
this.onDisconnect();
|
|
197
223
|
}
|
|
198
224
|
}));
|
|
199
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAddress","numberToHex","SwitchChainError","UserRejectedRequestError","ChainNotConfiguredError","createConnector","ProviderNotFoundError","
|
|
1
|
+
{"version":3,"names":["getAddress","numberToHex","SwitchChainError","UserRejectedRequestError","ChainNotConfiguredError","createConnector","ProviderNotFoundError","UniversalConnector","appKitProvidedConnector","provider","accountsChanged","chainChanged","sessionDelete","disconnect","cleanupEventListeners","_provider","off","undefined","config","id","name","type","ready","getProvider","setup","catch","onSessionDelete","bind","on","connect","chainId","accountAddresses","getAccounts","length","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","namespaces","getNamespaces","eip155Accounts","map","caipAddr","parts","split","filter","addrPart","parseInt","chainIdNum","isNaN","chains","isAuthorized","newChain","find","c","request","method","params","err","code","data","originalError","addEthereumChainParams","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","addError","shouldEmit","some","account","startsWith","x","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,6 +11,7 @@ export declare class WagmiAdapter extends EVMAdapter {
|
|
|
11
11
|
wagmiChains: readonly Chain[] | undefined;
|
|
12
12
|
wagmiConfig: Config;
|
|
13
13
|
private wagmiConfigConnector?;
|
|
14
|
+
private unsubscribeWatchAccount?;
|
|
14
15
|
constructor(configParams: ConfigParams);
|
|
15
16
|
private createWagmiInternalConfig;
|
|
16
17
|
switchNetwork(network: AppKitNetwork): Promise<void>;
|
|
@@ -18,6 +19,7 @@ export declare class WagmiAdapter extends EVMAdapter {
|
|
|
18
19
|
getAccounts(): CaipAddress[] | undefined;
|
|
19
20
|
disconnect(): Promise<void>;
|
|
20
21
|
getSupportedNamespace(): ChainNamespace;
|
|
22
|
+
subscribeToEvents(): void;
|
|
21
23
|
init({ connector: _connector }: BlockchainAdapterInitParams): void;
|
|
22
24
|
setupWatchers(): void;
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,sBAAsB,EAM3B,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C,KAAK,YAAY,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IACpD,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B,CAAC;AAEF,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;IACtD,WAAW,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,oBAAoB,CAAC,CAAY;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,sBAAsB,EAM3B,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C,KAAK,YAAY,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IACpD,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B,CAAC;AAEF,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;IACtD,WAAW,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,oBAAoB,CAAC,CAAY;IACzC,OAAO,CAAC,uBAAuB,CAAC,CAAa;gBAEjC,YAAY,EAAE,YAAY;IAStC,OAAO,CAAC,yBAAyB;IAoB3B,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuCvE,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAgBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC,qBAAqB,IAAI,cAAc;IAM9B,iBAAiB,IAAI,IAAI;IAIzB,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,2BAA2B,GAAG,IAAI;IAgC3E,aAAa;CA+Bd"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { Provider, WalletConnector } from '@reown/appkit-common-react-native';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
type Properties = {
|
|
3
|
+
onSessionDelete(data: {
|
|
4
|
+
topic: string;
|
|
5
|
+
}): void;
|
|
6
|
+
};
|
|
7
|
+
export declare function UniversalConnector(appKitProvidedConnector: WalletConnector): import("wagmi").CreateConnectorFn<Provider, Properties, Record<string, unknown>>;
|
|
8
|
+
export {};
|
|
5
9
|
//# sourceMappingURL=UniversalConnector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/UniversalConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"UniversalConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/UniversalConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAqBnF,KAAK,UAAU,GAAG;IAChB,eAAe,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChD,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,uBAAuB,EAAE,eAAe,oFA+O1E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reown/appkit-wagmi-react-native",
|
|
3
|
-
"version": "0.0.0-chore-
|
|
3
|
+
"version": "0.0.0-chore-added-import-20251002170458",
|
|
4
4
|
"main": "lib/commonjs/index.js",
|
|
5
5
|
"types": "lib/typescript/index.d.ts",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -31,18 +31,18 @@
|
|
|
31
31
|
"repository": "https://github.com/reown-com/appkit-react-native",
|
|
32
32
|
"author": "Reown (https://discord.gg/reown)",
|
|
33
33
|
"homepage": "https://reown.com/appkit",
|
|
34
|
-
"license": "
|
|
34
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
35
35
|
"bugs": {
|
|
36
36
|
"url": "https://github.com/reown-com/appkit-react-native/issues"
|
|
37
37
|
},
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"registry": "https://registry.npmjs.org/",
|
|
40
|
-
"access": "public"
|
|
40
|
+
"access": "public",
|
|
41
|
+
"provenance": true
|
|
41
42
|
},
|
|
42
43
|
"dependencies": {
|
|
43
|
-
"@reown/appkit-common-react-native": "0.0.0-chore-
|
|
44
|
-
"@reown/appkit-react-native": "0.0.0-chore-
|
|
45
|
-
"@reown/appkit-siwe-react-native": "0.0.0-chore-types-20250804204153"
|
|
44
|
+
"@reown/appkit-common-react-native": "0.0.0-chore-added-import-20251002170458",
|
|
45
|
+
"@reown/appkit-react-native": "0.0.0-chore-added-import-20251002170458"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"@react-native-community/netinfo": "*",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"react": ">=18",
|
|
51
51
|
"react-native": ">=0.72",
|
|
52
52
|
"react-native-get-random-values": "*",
|
|
53
|
-
"viem": ">=2.
|
|
54
|
-
"wagmi": ">=2.
|
|
53
|
+
"viem": ">=2 <3.0.0",
|
|
54
|
+
"wagmi": ">=2 <3.0.0"
|
|
55
55
|
},
|
|
56
56
|
"eslintIgnore": [
|
|
57
57
|
"node_modules/",
|
package/src/adapter.ts
CHANGED
|
@@ -34,6 +34,7 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
34
34
|
public wagmiChains: readonly Chain[] | undefined;
|
|
35
35
|
public wagmiConfig!: Config;
|
|
36
36
|
private wagmiConfigConnector?: Connector;
|
|
37
|
+
private unsubscribeWatchAccount?: () => void;
|
|
37
38
|
|
|
38
39
|
constructor(configParams: ConfigParams) {
|
|
39
40
|
super({
|
|
@@ -131,6 +132,11 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
async disconnect(): Promise<void> {
|
|
135
|
+
if (this.unsubscribeWatchAccount) {
|
|
136
|
+
this.unsubscribeWatchAccount();
|
|
137
|
+
this.unsubscribeWatchAccount = undefined;
|
|
138
|
+
}
|
|
139
|
+
|
|
134
140
|
if (this.wagmiConfigConnector) {
|
|
135
141
|
await disconnectWagmiCore(this.wagmiConfig, { connector: this.wagmiConfigConnector });
|
|
136
142
|
this.wagmiConfigConnector = undefined;
|
|
@@ -149,6 +155,12 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
149
155
|
return WagmiAdapter.supportedNamespace;
|
|
150
156
|
}
|
|
151
157
|
|
|
158
|
+
// Override subscribeToEvents to prevent double subscription
|
|
159
|
+
// Wagmi handles provider events through its connector system and watchAccount
|
|
160
|
+
override subscribeToEvents(): void {
|
|
161
|
+
// Do nothing - wagmi's watchAccount in setupWatchers handles all events
|
|
162
|
+
}
|
|
163
|
+
|
|
152
164
|
override init({ connector: _connector }: BlockchainAdapterInitParams): void {
|
|
153
165
|
super.init({ connector: _connector });
|
|
154
166
|
|
|
@@ -182,13 +194,31 @@ export class WagmiAdapter extends EVMAdapter {
|
|
|
182
194
|
}
|
|
183
195
|
|
|
184
196
|
setupWatchers() {
|
|
185
|
-
|
|
197
|
+
// Clean up existing subscription if any
|
|
198
|
+
this.unsubscribeWatchAccount?.();
|
|
199
|
+
|
|
200
|
+
this.unsubscribeWatchAccount = watchAccount(this.wagmiConfig, {
|
|
186
201
|
onChange: (accountData, prevAccountData) => {
|
|
202
|
+
if (!this.connector) return;
|
|
203
|
+
|
|
204
|
+
// Handle disconnect
|
|
187
205
|
if (accountData.status === 'disconnected' && prevAccountData.address) {
|
|
188
206
|
this.onDisconnect();
|
|
207
|
+
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Handle account address changes
|
|
212
|
+
if (
|
|
213
|
+
accountData?.addresses &&
|
|
214
|
+
accountData?.address &&
|
|
215
|
+
accountData.address !== prevAccountData?.address
|
|
216
|
+
) {
|
|
217
|
+
this.onAccountsChanged([...accountData.addresses]);
|
|
189
218
|
}
|
|
190
219
|
|
|
191
|
-
|
|
220
|
+
// Handle chain changes
|
|
221
|
+
if (accountData?.chainId && accountData.chainId !== prevAccountData?.chainId) {
|
|
192
222
|
this.onChainChanged(accountData.chainId?.toString());
|
|
193
223
|
}
|
|
194
224
|
}
|
|
@@ -1,58 +1,75 @@
|
|
|
1
1
|
import type { Provider, WalletConnector } from '@reown/appkit-common-react-native';
|
|
2
|
+
|
|
2
3
|
import {
|
|
3
4
|
getAddress,
|
|
4
5
|
numberToHex,
|
|
6
|
+
RpcError,
|
|
5
7
|
SwitchChainError,
|
|
6
8
|
UserRejectedRequestError,
|
|
7
9
|
type Hex
|
|
8
10
|
} from 'viem';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
+
import {
|
|
12
|
+
ChainNotConfiguredError,
|
|
13
|
+
createConnector,
|
|
14
|
+
ProviderNotFoundError,
|
|
15
|
+
type Connector
|
|
16
|
+
} from 'wagmi';
|
|
17
|
+
|
|
18
|
+
type UniversalConnector = Connector & {
|
|
19
|
+
onSessionDelete(data: { topic: string }): void;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type Properties = {
|
|
23
|
+
onSessionDelete(data: { topic: string }): void;
|
|
24
|
+
};
|
|
11
25
|
|
|
12
26
|
export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
13
27
|
let provider: Provider | undefined;
|
|
14
28
|
|
|
15
|
-
let
|
|
16
|
-
let
|
|
17
|
-
let
|
|
29
|
+
let accountsChanged: UniversalConnector['onAccountsChanged'] | undefined;
|
|
30
|
+
let chainChanged: UniversalConnector['onChainChanged'] | undefined;
|
|
31
|
+
let sessionDelete: UniversalConnector['onSessionDelete'] | undefined;
|
|
32
|
+
let disconnect: UniversalConnector['onDisconnect'] | undefined;
|
|
18
33
|
|
|
19
|
-
|
|
34
|
+
function cleanupEventListeners(_provider?: Provider | null) {
|
|
35
|
+
if (accountsChanged) {
|
|
36
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
37
|
+
accountsChanged = undefined;
|
|
38
|
+
}
|
|
39
|
+
if (chainChanged) {
|
|
40
|
+
_provider?.off('chainChanged', chainChanged);
|
|
41
|
+
chainChanged = undefined;
|
|
42
|
+
}
|
|
43
|
+
if (disconnect) {
|
|
44
|
+
_provider?.off('disconnect', disconnect);
|
|
45
|
+
disconnect = undefined;
|
|
46
|
+
}
|
|
47
|
+
if (sessionDelete) {
|
|
48
|
+
_provider?.off('session_delete', sessionDelete);
|
|
49
|
+
sessionDelete = undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
20
52
|
|
|
21
|
-
return createConnector<Provider,
|
|
53
|
+
return createConnector<Provider, Properties>(config => ({
|
|
22
54
|
id: 'walletconnect',
|
|
23
55
|
name: 'WalletConnect',
|
|
24
56
|
type: 'walletconnect' as const,
|
|
25
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
57
|
+
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
26
58
|
|
|
27
59
|
async setup() {
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
chainChangedHandler = (chainId: string | number) => {
|
|
38
|
-
const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
|
|
39
|
-
config.emitter.emit('change', { chainId: newChainId });
|
|
40
|
-
};
|
|
41
|
-
disconnectHandler = (error?: Error) => {
|
|
42
|
-
config.emitter.emit('disconnect');
|
|
43
|
-
if (error) config.emitter.emit('error', { error });
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
|
|
47
|
-
if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
|
|
48
|
-
if (disconnectHandler) provider.on('disconnect', disconnectHandler);
|
|
49
|
-
if (disconnectHandler) provider.on('session_delete', disconnectHandler);
|
|
60
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
61
|
+
if (!_provider) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!sessionDelete) {
|
|
65
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
66
|
+
_provider.on('session_delete', sessionDelete);
|
|
50
67
|
}
|
|
51
68
|
},
|
|
52
69
|
|
|
53
70
|
async connect({ chainId } = {}) {
|
|
54
71
|
try {
|
|
55
|
-
const _provider =
|
|
72
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
56
73
|
if (!_provider) throw new ProviderNotFoundError();
|
|
57
74
|
|
|
58
75
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -71,8 +88,22 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
71
88
|
await this.switchChain?.({ chainId });
|
|
72
89
|
currentChainId = chainId;
|
|
73
90
|
}
|
|
74
|
-
|
|
75
|
-
|
|
91
|
+
if (!accountsChanged) {
|
|
92
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
93
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
94
|
+
}
|
|
95
|
+
if (!chainChanged) {
|
|
96
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
97
|
+
_provider.on('chainChanged', chainChanged);
|
|
98
|
+
}
|
|
99
|
+
if (!disconnect) {
|
|
100
|
+
disconnect = this.onDisconnect.bind(this);
|
|
101
|
+
_provider.on('disconnect', disconnect);
|
|
102
|
+
}
|
|
103
|
+
if (!sessionDelete) {
|
|
104
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
105
|
+
_provider.on('session_delete', sessionDelete);
|
|
106
|
+
}
|
|
76
107
|
|
|
77
108
|
return { accounts: accountAddresses, chainId: currentChainId };
|
|
78
109
|
} catch (error) {
|
|
@@ -82,24 +113,22 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
82
113
|
},
|
|
83
114
|
|
|
84
115
|
async disconnect() {
|
|
85
|
-
await
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
116
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
117
|
+
try {
|
|
118
|
+
await appKitProvidedConnector.disconnect();
|
|
119
|
+
config.emitter.emit('message', { type: 'externalDisconnect' });
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (!/No matching key/i.test((error as Error).message)) {
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
} finally {
|
|
125
|
+
cleanupEventListeners(_provider);
|
|
95
126
|
}
|
|
96
|
-
this.ready = false;
|
|
97
127
|
},
|
|
98
128
|
|
|
99
129
|
async getAccounts() {
|
|
100
130
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
101
|
-
|
|
102
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
131
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts as string[] | undefined;
|
|
103
132
|
if (!eip155Accounts) return [] as readonly Hex[];
|
|
104
133
|
|
|
105
134
|
return eip155Accounts
|
|
@@ -119,8 +148,7 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
119
148
|
|
|
120
149
|
// Fallback: Try to get from CAIP accounts if available
|
|
121
150
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
122
|
-
|
|
123
|
-
const eip155Accounts = namespaces?.eip155?.accounts;
|
|
151
|
+
const eip155Accounts = namespaces?.['eip155']?.accounts as string[] | undefined;
|
|
124
152
|
if (eip155Accounts && eip155Accounts.length > 0) {
|
|
125
153
|
const parts = eip155Accounts[0]?.split(':');
|
|
126
154
|
if (parts && parts.length > 1 && typeof parts[1] === 'string') {
|
|
@@ -136,10 +164,10 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
136
164
|
|
|
137
165
|
async getProvider() {
|
|
138
166
|
if (!provider) {
|
|
139
|
-
provider = appKitProvidedConnector.getProvider();
|
|
167
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
140
168
|
}
|
|
141
169
|
|
|
142
|
-
return provider
|
|
170
|
+
return provider;
|
|
143
171
|
},
|
|
144
172
|
|
|
145
173
|
async isAuthorized() {
|
|
@@ -153,7 +181,7 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
153
181
|
},
|
|
154
182
|
|
|
155
183
|
async switchChain({ chainId }) {
|
|
156
|
-
const _provider =
|
|
184
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
157
185
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
158
186
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
159
187
|
|
|
@@ -165,28 +193,27 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
165
193
|
params: [{ chainId: numberToHex(chainId) }]
|
|
166
194
|
});
|
|
167
195
|
|
|
168
|
-
config.emitter.emit('change', { chainId });
|
|
169
|
-
|
|
170
196
|
return newChain;
|
|
171
|
-
} catch (
|
|
172
|
-
|
|
173
|
-
|
|
197
|
+
} catch (err) {
|
|
198
|
+
const error = err as RpcError;
|
|
199
|
+
|
|
200
|
+
if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
|
|
201
|
+
|
|
174
202
|
if ((error as any)?.code === 4902 || (error as any)?.data?.originalError?.code === 4902) {
|
|
203
|
+
// Indicates chain is not added to provider
|
|
175
204
|
try {
|
|
205
|
+
const addEthereumChainParams = {
|
|
206
|
+
chainId: numberToHex(chainId),
|
|
207
|
+
chainName: newChain.name,
|
|
208
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
209
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
210
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
211
|
+
};
|
|
212
|
+
|
|
176
213
|
await _provider.request({
|
|
177
214
|
method: 'wallet_addEthereumChain',
|
|
178
|
-
params: [
|
|
179
|
-
{
|
|
180
|
-
chainId: numberToHex(chainId),
|
|
181
|
-
chainName: newChain.name,
|
|
182
|
-
nativeCurrency: newChain.nativeCurrency,
|
|
183
|
-
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''], // Take first default HTTP RPC URL
|
|
184
|
-
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
185
|
-
}
|
|
186
|
-
]
|
|
215
|
+
params: [addEthereumChainParams]
|
|
187
216
|
});
|
|
188
|
-
await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
|
|
189
|
-
config.emitter.emit('change', { chainId });
|
|
190
217
|
|
|
191
218
|
return newChain;
|
|
192
219
|
} catch (addError) {
|
|
@@ -198,17 +225,41 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
198
225
|
},
|
|
199
226
|
|
|
200
227
|
onAccountsChanged(accounts: string[]) {
|
|
201
|
-
if
|
|
202
|
-
|
|
228
|
+
//Only emit if the account is an evm account
|
|
229
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
230
|
+
|
|
231
|
+
if (accounts.length === 0) {
|
|
232
|
+
this.onDisconnect();
|
|
233
|
+
} else if (shouldEmit) {
|
|
234
|
+
config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) });
|
|
235
|
+
}
|
|
203
236
|
},
|
|
204
237
|
|
|
205
238
|
onChainChanged(chain: string) {
|
|
206
239
|
const chainId = Number(chain);
|
|
207
|
-
|
|
240
|
+
|
|
241
|
+
//Only emit if the chain is in the config (evm)
|
|
242
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
243
|
+
if (shouldEmit) {
|
|
244
|
+
config.emitter.emit('change', { chainId });
|
|
245
|
+
}
|
|
208
246
|
},
|
|
209
247
|
|
|
210
|
-
onDisconnect
|
|
248
|
+
async onDisconnect() {
|
|
211
249
|
config.emitter.emit('disconnect');
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
const _provider = await this.getProvider();
|
|
253
|
+
cleanupEventListeners(_provider);
|
|
254
|
+
} catch (error) {
|
|
255
|
+
// If provider is not available, still clean up local references
|
|
256
|
+
// to prevent memory leaks
|
|
257
|
+
cleanupEventListeners(null);
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
onSessionDelete() {
|
|
262
|
+
this.onDisconnect();
|
|
212
263
|
}
|
|
213
264
|
}));
|
|
214
265
|
}
|