@reown/appkit-wagmi-react-native 2.0.0-alpha.4 → 2.0.0-alpha.6
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/connectors/UniversalConnector.js +117 -68
- package/lib/commonjs/connectors/UniversalConnector.js.map +1 -1
- package/lib/module/connectors/UniversalConnector.js +117 -68
- package/lib/module/connectors/UniversalConnector.js.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/connectors/UniversalConnector.ts +138 -63
|
@@ -6,45 +6,25 @@ 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
15
|
return (0, _wagmi.createConnector)(config => ({
|
|
16
16
|
id: 'walletconnect',
|
|
17
17
|
name: 'WalletConnect',
|
|
18
18
|
type: 'walletconnect',
|
|
19
19
|
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
20
20
|
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);
|
|
21
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
22
|
+
if (!_provider) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!sessionDelete) {
|
|
26
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
27
|
+
_provider.on('session_delete', sessionDelete);
|
|
48
28
|
}
|
|
49
29
|
},
|
|
50
30
|
async connect({
|
|
@@ -69,7 +49,22 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
69
49
|
});
|
|
70
50
|
currentChainId = chainId;
|
|
71
51
|
}
|
|
72
|
-
|
|
52
|
+
if (!accountsChanged) {
|
|
53
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
54
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
55
|
+
}
|
|
56
|
+
if (!chainChanged) {
|
|
57
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
58
|
+
_provider.on('chainChanged', chainChanged);
|
|
59
|
+
}
|
|
60
|
+
if (!disconnect) {
|
|
61
|
+
disconnect = this.onDisconnect.bind(this);
|
|
62
|
+
_provider.on('disconnect', disconnect);
|
|
63
|
+
}
|
|
64
|
+
if (!sessionDelete) {
|
|
65
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
66
|
+
_provider.on('session_delete', sessionDelete);
|
|
67
|
+
}
|
|
73
68
|
return {
|
|
74
69
|
accounts: accountAddresses,
|
|
75
70
|
chainId: currentChainId
|
|
@@ -80,20 +75,34 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
80
75
|
}
|
|
81
76
|
},
|
|
82
77
|
async disconnect() {
|
|
83
|
-
await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
78
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
79
|
+
try {
|
|
80
|
+
await appKitProvidedConnector.disconnect();
|
|
81
|
+
config.emitter.emit('message', {
|
|
82
|
+
type: 'externalDisconnect'
|
|
83
|
+
});
|
|
84
|
+
} catch (error) {
|
|
85
|
+
if (!/No matching key/i.test(error.message)) {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
} finally {
|
|
89
|
+
if (chainChanged) {
|
|
90
|
+
_provider?.off('chainChanged', chainChanged);
|
|
91
|
+
chainChanged = undefined;
|
|
92
|
+
}
|
|
93
|
+
if (disconnect) {
|
|
94
|
+
_provider?.off('disconnect', disconnect);
|
|
95
|
+
disconnect = undefined;
|
|
96
|
+
}
|
|
97
|
+
if (accountsChanged) {
|
|
98
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
99
|
+
accountsChanged = undefined;
|
|
100
|
+
}
|
|
101
|
+
if (sessionDelete) {
|
|
102
|
+
_provider?.off('session_delete', sessionDelete);
|
|
103
|
+
sessionDelete = undefined;
|
|
104
|
+
}
|
|
95
105
|
}
|
|
96
|
-
this.ready = false;
|
|
97
106
|
},
|
|
98
107
|
async getAccounts() {
|
|
99
108
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
@@ -153,29 +162,23 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
153
162
|
chainId: (0, _viem.numberToHex)(chainId)
|
|
154
163
|
}]
|
|
155
164
|
});
|
|
156
|
-
config.emitter.emit('change', {
|
|
157
|
-
chainId
|
|
158
|
-
});
|
|
159
165
|
return newChain;
|
|
160
|
-
} catch (
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
} catch (err) {
|
|
167
|
+
const error = err;
|
|
168
|
+
if (/(user rejected)/i.test(error.message)) throw new _viem.UserRejectedRequestError(error);
|
|
163
169
|
if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
|
|
170
|
+
// Indicates chain is not added to provider
|
|
164
171
|
try {
|
|
172
|
+
const addEthereumChainParams = {
|
|
173
|
+
chainId: (0, _viem.numberToHex)(chainId),
|
|
174
|
+
chainName: newChain.name,
|
|
175
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
176
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
177
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
178
|
+
};
|
|
165
179
|
await _provider.request({
|
|
166
180
|
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
|
|
181
|
+
params: [addEthereumChainParams]
|
|
179
182
|
});
|
|
180
183
|
return newChain;
|
|
181
184
|
} catch (addError) {
|
|
@@ -186,18 +189,64 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
186
189
|
}
|
|
187
190
|
},
|
|
188
191
|
onAccountsChanged(accounts) {
|
|
189
|
-
if
|
|
192
|
+
//Only emit if the account is an evm account
|
|
193
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
194
|
+
if (accounts.length === 0) this.onDisconnect();else if (shouldEmit) config.emitter.emit('change', {
|
|
190
195
|
accounts: accounts.map(x => (0, _viem.getAddress)(x))
|
|
191
196
|
});
|
|
192
197
|
},
|
|
193
198
|
onChainChanged(chain) {
|
|
194
199
|
const chainId = Number(chain);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
|
|
201
|
+
//Only emit if the chain is in the config (evm)
|
|
202
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
203
|
+
if (shouldEmit) {
|
|
204
|
+
config.emitter.emit('change', {
|
|
205
|
+
chainId
|
|
206
|
+
});
|
|
207
|
+
}
|
|
198
208
|
},
|
|
199
|
-
onDisconnect
|
|
209
|
+
async onDisconnect() {
|
|
200
210
|
config.emitter.emit('disconnect');
|
|
211
|
+
try {
|
|
212
|
+
const _provider = await this.getProvider();
|
|
213
|
+
|
|
214
|
+
// Clean up event listeners
|
|
215
|
+
if (accountsChanged) {
|
|
216
|
+
_provider.off('accountsChanged', accountsChanged);
|
|
217
|
+
accountsChanged = undefined;
|
|
218
|
+
}
|
|
219
|
+
if (chainChanged) {
|
|
220
|
+
_provider.off('chainChanged', chainChanged);
|
|
221
|
+
chainChanged = undefined;
|
|
222
|
+
}
|
|
223
|
+
if (disconnect) {
|
|
224
|
+
_provider.off('disconnect', disconnect);
|
|
225
|
+
disconnect = undefined;
|
|
226
|
+
}
|
|
227
|
+
if (sessionDelete) {
|
|
228
|
+
_provider.off('session_delete', sessionDelete);
|
|
229
|
+
sessionDelete = undefined;
|
|
230
|
+
}
|
|
231
|
+
} catch (error) {
|
|
232
|
+
// If provider is not available, still clean up local references
|
|
233
|
+
// to prevent memory leaks
|
|
234
|
+
if (accountsChanged) {
|
|
235
|
+
accountsChanged = undefined;
|
|
236
|
+
}
|
|
237
|
+
if (chainChanged) {
|
|
238
|
+
chainChanged = undefined;
|
|
239
|
+
}
|
|
240
|
+
if (disconnect) {
|
|
241
|
+
disconnect = undefined;
|
|
242
|
+
}
|
|
243
|
+
if (sessionDelete) {
|
|
244
|
+
sessionDelete = undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
onSessionDelete() {
|
|
249
|
+
this.onDisconnect();
|
|
201
250
|
}
|
|
202
251
|
}));
|
|
203
252
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_viem","require","_wagmi","
|
|
1
|
+
{"version":3,"names":["_viem","require","_wagmi","UniversalConnector","appKitProvidedConnector","provider","accountsChanged","chainChanged","sessionDelete","disconnect","createConnector","config","id","name","type","ready","getProvider","setup","_provider","catch","onSessionDelete","bind","on","connect","chainId","ProviderNotFoundError","accountAddresses","getAccounts","length","UserRejectedRequestError","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","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":[]}
|
|
@@ -2,45 +2,25 @@
|
|
|
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
11
|
return createConnector(config => ({
|
|
12
12
|
id: 'walletconnect',
|
|
13
13
|
name: 'WalletConnect',
|
|
14
14
|
type: 'walletconnect',
|
|
15
15
|
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
16
16
|
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);
|
|
17
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
18
|
+
if (!_provider) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!sessionDelete) {
|
|
22
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
23
|
+
_provider.on('session_delete', sessionDelete);
|
|
44
24
|
}
|
|
45
25
|
},
|
|
46
26
|
async connect({
|
|
@@ -65,7 +45,22 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
65
45
|
});
|
|
66
46
|
currentChainId = chainId;
|
|
67
47
|
}
|
|
68
|
-
|
|
48
|
+
if (!accountsChanged) {
|
|
49
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
50
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
51
|
+
}
|
|
52
|
+
if (!chainChanged) {
|
|
53
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
54
|
+
_provider.on('chainChanged', chainChanged);
|
|
55
|
+
}
|
|
56
|
+
if (!disconnect) {
|
|
57
|
+
disconnect = this.onDisconnect.bind(this);
|
|
58
|
+
_provider.on('disconnect', disconnect);
|
|
59
|
+
}
|
|
60
|
+
if (!sessionDelete) {
|
|
61
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
62
|
+
_provider.on('session_delete', sessionDelete);
|
|
63
|
+
}
|
|
69
64
|
return {
|
|
70
65
|
accounts: accountAddresses,
|
|
71
66
|
chainId: currentChainId
|
|
@@ -76,20 +71,34 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
76
71
|
}
|
|
77
72
|
},
|
|
78
73
|
async disconnect() {
|
|
79
|
-
await
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
74
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
75
|
+
try {
|
|
76
|
+
await appKitProvidedConnector.disconnect();
|
|
77
|
+
config.emitter.emit('message', {
|
|
78
|
+
type: 'externalDisconnect'
|
|
79
|
+
});
|
|
80
|
+
} catch (error) {
|
|
81
|
+
if (!/No matching key/i.test(error.message)) {
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
} finally {
|
|
85
|
+
if (chainChanged) {
|
|
86
|
+
_provider?.off('chainChanged', chainChanged);
|
|
87
|
+
chainChanged = undefined;
|
|
88
|
+
}
|
|
89
|
+
if (disconnect) {
|
|
90
|
+
_provider?.off('disconnect', disconnect);
|
|
91
|
+
disconnect = undefined;
|
|
92
|
+
}
|
|
93
|
+
if (accountsChanged) {
|
|
94
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
95
|
+
accountsChanged = undefined;
|
|
96
|
+
}
|
|
97
|
+
if (sessionDelete) {
|
|
98
|
+
_provider?.off('session_delete', sessionDelete);
|
|
99
|
+
sessionDelete = undefined;
|
|
100
|
+
}
|
|
91
101
|
}
|
|
92
|
-
this.ready = false;
|
|
93
102
|
},
|
|
94
103
|
async getAccounts() {
|
|
95
104
|
const namespaces = appKitProvidedConnector.getNamespaces();
|
|
@@ -149,29 +158,23 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
149
158
|
chainId: numberToHex(chainId)
|
|
150
159
|
}]
|
|
151
160
|
});
|
|
152
|
-
config.emitter.emit('change', {
|
|
153
|
-
chainId
|
|
154
|
-
});
|
|
155
161
|
return newChain;
|
|
156
|
-
} catch (
|
|
157
|
-
|
|
158
|
-
|
|
162
|
+
} catch (err) {
|
|
163
|
+
const error = err;
|
|
164
|
+
if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
|
|
159
165
|
if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
|
|
166
|
+
// Indicates chain is not added to provider
|
|
160
167
|
try {
|
|
168
|
+
const addEthereumChainParams = {
|
|
169
|
+
chainId: numberToHex(chainId),
|
|
170
|
+
chainName: newChain.name,
|
|
171
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
172
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
173
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
174
|
+
};
|
|
161
175
|
await _provider.request({
|
|
162
176
|
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
|
|
177
|
+
params: [addEthereumChainParams]
|
|
175
178
|
});
|
|
176
179
|
return newChain;
|
|
177
180
|
} catch (addError) {
|
|
@@ -182,18 +185,64 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
182
185
|
}
|
|
183
186
|
},
|
|
184
187
|
onAccountsChanged(accounts) {
|
|
185
|
-
if
|
|
188
|
+
//Only emit if the account is an evm account
|
|
189
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
190
|
+
if (accounts.length === 0) this.onDisconnect();else if (shouldEmit) config.emitter.emit('change', {
|
|
186
191
|
accounts: accounts.map(x => getAddress(x))
|
|
187
192
|
});
|
|
188
193
|
},
|
|
189
194
|
onChainChanged(chain) {
|
|
190
195
|
const chainId = Number(chain);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
196
|
+
|
|
197
|
+
//Only emit if the chain is in the config (evm)
|
|
198
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
199
|
+
if (shouldEmit) {
|
|
200
|
+
config.emitter.emit('change', {
|
|
201
|
+
chainId
|
|
202
|
+
});
|
|
203
|
+
}
|
|
194
204
|
},
|
|
195
|
-
onDisconnect
|
|
205
|
+
async onDisconnect() {
|
|
196
206
|
config.emitter.emit('disconnect');
|
|
207
|
+
try {
|
|
208
|
+
const _provider = await this.getProvider();
|
|
209
|
+
|
|
210
|
+
// Clean up event listeners
|
|
211
|
+
if (accountsChanged) {
|
|
212
|
+
_provider.off('accountsChanged', accountsChanged);
|
|
213
|
+
accountsChanged = undefined;
|
|
214
|
+
}
|
|
215
|
+
if (chainChanged) {
|
|
216
|
+
_provider.off('chainChanged', chainChanged);
|
|
217
|
+
chainChanged = undefined;
|
|
218
|
+
}
|
|
219
|
+
if (disconnect) {
|
|
220
|
+
_provider.off('disconnect', disconnect);
|
|
221
|
+
disconnect = undefined;
|
|
222
|
+
}
|
|
223
|
+
if (sessionDelete) {
|
|
224
|
+
_provider.off('session_delete', sessionDelete);
|
|
225
|
+
sessionDelete = undefined;
|
|
226
|
+
}
|
|
227
|
+
} catch (error) {
|
|
228
|
+
// If provider is not available, still clean up local references
|
|
229
|
+
// to prevent memory leaks
|
|
230
|
+
if (accountsChanged) {
|
|
231
|
+
accountsChanged = undefined;
|
|
232
|
+
}
|
|
233
|
+
if (chainChanged) {
|
|
234
|
+
chainChanged = undefined;
|
|
235
|
+
}
|
|
236
|
+
if (disconnect) {
|
|
237
|
+
disconnect = undefined;
|
|
238
|
+
}
|
|
239
|
+
if (sessionDelete) {
|
|
240
|
+
sessionDelete = undefined;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
onSessionDelete() {
|
|
245
|
+
this.onDisconnect();
|
|
197
246
|
}
|
|
198
247
|
}));
|
|
199
248
|
}
|
|
@@ -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","config","id","name","type","ready","getProvider","setup","_provider","catch","onSessionDelete","bind","on","connect","chainId","accountAddresses","getAccounts","length","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","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":[]}
|
|
@@ -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,oFAuQ1E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reown/appkit-wagmi-react-native",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.6",
|
|
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": "2.0.0-alpha.
|
|
44
|
-
"@reown/appkit-react-native": "2.0.0-alpha.
|
|
45
|
-
"@reown/appkit-siwe-react-native": "2.0.0-alpha.4"
|
|
44
|
+
"@reown/appkit-common-react-native": "2.0.0-alpha.6",
|
|
45
|
+
"@reown/appkit-react-native": "2.0.0-alpha.6"
|
|
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/",
|
|
@@ -1,52 +1,50 @@
|
|
|
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
|
|
18
|
-
|
|
19
|
-
type AppKitConnectorProperties = { ready: boolean };
|
|
29
|
+
let accountsChanged: UniversalConnector['onAccountsChanged'] | undefined;
|
|
30
|
+
let chainChanged: UniversalConnector['onChainChanged'] | undefined;
|
|
31
|
+
let sessionDelete: UniversalConnector['onSessionDelete'] | undefined;
|
|
32
|
+
let disconnect: UniversalConnector['onDisconnect'] | undefined;
|
|
20
33
|
|
|
21
|
-
return createConnector<Provider,
|
|
34
|
+
return createConnector<Provider, Properties>(config => ({
|
|
22
35
|
id: 'walletconnect',
|
|
23
36
|
name: 'WalletConnect',
|
|
24
37
|
type: 'walletconnect' as const,
|
|
25
38
|
ready: !!appKitProvidedConnector.getProvider('eip155'),
|
|
26
39
|
|
|
27
40
|
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);
|
|
41
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
42
|
+
if (!_provider) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!sessionDelete) {
|
|
46
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
47
|
+
_provider.on('session_delete', sessionDelete);
|
|
50
48
|
}
|
|
51
49
|
},
|
|
52
50
|
|
|
@@ -71,8 +69,22 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
71
69
|
await this.switchChain?.({ chainId });
|
|
72
70
|
currentChainId = chainId;
|
|
73
71
|
}
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
if (!accountsChanged) {
|
|
73
|
+
accountsChanged = this.onAccountsChanged.bind(this);
|
|
74
|
+
_provider.on('accountsChanged', accountsChanged);
|
|
75
|
+
}
|
|
76
|
+
if (!chainChanged) {
|
|
77
|
+
chainChanged = this.onChainChanged.bind(this);
|
|
78
|
+
_provider.on('chainChanged', chainChanged);
|
|
79
|
+
}
|
|
80
|
+
if (!disconnect) {
|
|
81
|
+
disconnect = this.onDisconnect.bind(this);
|
|
82
|
+
_provider.on('disconnect', disconnect);
|
|
83
|
+
}
|
|
84
|
+
if (!sessionDelete) {
|
|
85
|
+
sessionDelete = this.onSessionDelete.bind(this);
|
|
86
|
+
_provider.on('session_delete', sessionDelete);
|
|
87
|
+
}
|
|
76
88
|
|
|
77
89
|
return { accounts: accountAddresses, chainId: currentChainId };
|
|
78
90
|
} catch (error) {
|
|
@@ -82,18 +94,32 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
82
94
|
},
|
|
83
95
|
|
|
84
96
|
async disconnect() {
|
|
85
|
-
await
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
const _provider = await this.getProvider().catch(() => null);
|
|
98
|
+
try {
|
|
99
|
+
await appKitProvidedConnector.disconnect();
|
|
100
|
+
config.emitter.emit('message', { type: 'externalDisconnect' });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (!/No matching key/i.test((error as Error).message)) {
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
} finally {
|
|
106
|
+
if (chainChanged) {
|
|
107
|
+
_provider?.off('chainChanged', chainChanged);
|
|
108
|
+
chainChanged = undefined;
|
|
109
|
+
}
|
|
110
|
+
if (disconnect) {
|
|
111
|
+
_provider?.off('disconnect', disconnect);
|
|
112
|
+
disconnect = undefined;
|
|
113
|
+
}
|
|
114
|
+
if (accountsChanged) {
|
|
115
|
+
_provider?.off('accountsChanged', accountsChanged);
|
|
116
|
+
accountsChanged = undefined;
|
|
117
|
+
}
|
|
118
|
+
if (sessionDelete) {
|
|
119
|
+
_provider?.off('session_delete', sessionDelete);
|
|
120
|
+
sessionDelete = undefined;
|
|
121
|
+
}
|
|
95
122
|
}
|
|
96
|
-
this.ready = false;
|
|
97
123
|
},
|
|
98
124
|
|
|
99
125
|
async getAccounts() {
|
|
@@ -139,7 +165,7 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
139
165
|
provider = appKitProvidedConnector.getProvider('eip155');
|
|
140
166
|
}
|
|
141
167
|
|
|
142
|
-
return provider
|
|
168
|
+
return provider;
|
|
143
169
|
},
|
|
144
170
|
|
|
145
171
|
async isAuthorized() {
|
|
@@ -165,28 +191,27 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
165
191
|
params: [{ chainId: numberToHex(chainId) }]
|
|
166
192
|
});
|
|
167
193
|
|
|
168
|
-
config.emitter.emit('change', { chainId });
|
|
169
|
-
|
|
170
194
|
return newChain;
|
|
171
|
-
} catch (
|
|
172
|
-
|
|
173
|
-
|
|
195
|
+
} catch (err) {
|
|
196
|
+
const error = err as RpcError;
|
|
197
|
+
|
|
198
|
+
if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
|
|
199
|
+
|
|
174
200
|
if ((error as any)?.code === 4902 || (error as any)?.data?.originalError?.code === 4902) {
|
|
201
|
+
// Indicates chain is not added to provider
|
|
175
202
|
try {
|
|
203
|
+
const addEthereumChainParams = {
|
|
204
|
+
chainId: numberToHex(chainId),
|
|
205
|
+
chainName: newChain.name,
|
|
206
|
+
nativeCurrency: newChain.nativeCurrency,
|
|
207
|
+
rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
|
|
208
|
+
blockExplorerUrls: [newChain.blockExplorers?.default?.url]
|
|
209
|
+
};
|
|
210
|
+
|
|
176
211
|
await _provider.request({
|
|
177
212
|
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
|
-
]
|
|
213
|
+
params: [addEthereumChainParams]
|
|
187
214
|
});
|
|
188
|
-
await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
|
|
189
|
-
config.emitter.emit('change', { chainId });
|
|
190
215
|
|
|
191
216
|
return newChain;
|
|
192
217
|
} catch (addError) {
|
|
@@ -198,17 +223,67 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
198
223
|
},
|
|
199
224
|
|
|
200
225
|
onAccountsChanged(accounts: string[]) {
|
|
226
|
+
//Only emit if the account is an evm account
|
|
227
|
+
const shouldEmit = accounts.some(account => account.startsWith('0x'));
|
|
228
|
+
|
|
201
229
|
if (accounts.length === 0) this.onDisconnect();
|
|
202
|
-
else
|
|
230
|
+
else if (shouldEmit)
|
|
231
|
+
config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) });
|
|
203
232
|
},
|
|
204
233
|
|
|
205
234
|
onChainChanged(chain: string) {
|
|
206
235
|
const chainId = Number(chain);
|
|
207
|
-
|
|
236
|
+
|
|
237
|
+
//Only emit if the chain is in the config (evm)
|
|
238
|
+
const shouldEmit = config.chains.some(c => c.id === chainId);
|
|
239
|
+
if (shouldEmit) {
|
|
240
|
+
config.emitter.emit('change', { chainId });
|
|
241
|
+
}
|
|
208
242
|
},
|
|
209
243
|
|
|
210
|
-
onDisconnect
|
|
244
|
+
async onDisconnect() {
|
|
211
245
|
config.emitter.emit('disconnect');
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
const _provider = await this.getProvider();
|
|
249
|
+
|
|
250
|
+
// Clean up event listeners
|
|
251
|
+
if (accountsChanged) {
|
|
252
|
+
_provider.off('accountsChanged', accountsChanged);
|
|
253
|
+
accountsChanged = undefined;
|
|
254
|
+
}
|
|
255
|
+
if (chainChanged) {
|
|
256
|
+
_provider.off('chainChanged', chainChanged);
|
|
257
|
+
chainChanged = undefined;
|
|
258
|
+
}
|
|
259
|
+
if (disconnect) {
|
|
260
|
+
_provider.off('disconnect', disconnect);
|
|
261
|
+
disconnect = undefined;
|
|
262
|
+
}
|
|
263
|
+
if (sessionDelete) {
|
|
264
|
+
_provider.off('session_delete', sessionDelete);
|
|
265
|
+
sessionDelete = undefined;
|
|
266
|
+
}
|
|
267
|
+
} catch (error) {
|
|
268
|
+
// If provider is not available, still clean up local references
|
|
269
|
+
// to prevent memory leaks
|
|
270
|
+
if (accountsChanged) {
|
|
271
|
+
accountsChanged = undefined;
|
|
272
|
+
}
|
|
273
|
+
if (chainChanged) {
|
|
274
|
+
chainChanged = undefined;
|
|
275
|
+
}
|
|
276
|
+
if (disconnect) {
|
|
277
|
+
disconnect = undefined;
|
|
278
|
+
}
|
|
279
|
+
if (sessionDelete) {
|
|
280
|
+
sessionDelete = undefined;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
|
|
285
|
+
onSessionDelete() {
|
|
286
|
+
this.onDisconnect();
|
|
212
287
|
}
|
|
213
288
|
}));
|
|
214
289
|
}
|