@reown/appkit-wagmi-react-native 2.0.0-alpha.3 → 2.0.0-alpha.5
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 +121 -72
- package/lib/commonjs/connectors/UniversalConnector.js.map +1 -1
- package/lib/module/connectors/UniversalConnector.js +121 -72
- 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 +7 -6
- package/src/connectors/UniversalConnector.ts +142 -67
|
@@ -6,52 +6,32 @@ 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
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
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({
|
|
51
31
|
chainId
|
|
52
32
|
} = {}) {
|
|
53
33
|
try {
|
|
54
|
-
const _provider =
|
|
34
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
55
35
|
if (!_provider) throw new _wagmi.ProviderNotFoundError();
|
|
56
36
|
|
|
57
37
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -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();
|
|
@@ -127,7 +136,7 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
127
136
|
},
|
|
128
137
|
async getProvider() {
|
|
129
138
|
if (!provider) {
|
|
130
|
-
provider = appKitProvidedConnector.getProvider();
|
|
139
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
131
140
|
}
|
|
132
141
|
return provider;
|
|
133
142
|
},
|
|
@@ -142,7 +151,7 @@ function UniversalConnector(appKitProvidedConnector) {
|
|
|
142
151
|
async switchChain({
|
|
143
152
|
chainId
|
|
144
153
|
}) {
|
|
145
|
-
const _provider =
|
|
154
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
146
155
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
147
156
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
148
157
|
if (!newChain) throw new _viem.SwitchChainError(new _wagmi.ChainNotConfiguredError());
|
|
@@ -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,52 +2,32 @@
|
|
|
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
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
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({
|
|
47
27
|
chainId
|
|
48
28
|
} = {}) {
|
|
49
29
|
try {
|
|
50
|
-
const _provider =
|
|
30
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
51
31
|
if (!_provider) throw new ProviderNotFoundError();
|
|
52
32
|
|
|
53
33
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -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();
|
|
@@ -123,7 +132,7 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
123
132
|
},
|
|
124
133
|
async getProvider() {
|
|
125
134
|
if (!provider) {
|
|
126
|
-
provider = appKitProvidedConnector.getProvider();
|
|
135
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
127
136
|
}
|
|
128
137
|
return provider;
|
|
129
138
|
},
|
|
@@ -138,7 +147,7 @@ export function UniversalConnector(appKitProvidedConnector) {
|
|
|
138
147
|
async switchChain({
|
|
139
148
|
chainId
|
|
140
149
|
}) {
|
|
141
|
-
const _provider =
|
|
150
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
142
151
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
143
152
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
144
153
|
if (!newChain) throw new SwitchChainError(new ChainNotConfiguredError());
|
|
@@ -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.5",
|
|
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,19 @@
|
|
|
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.
|
|
44
|
+
"@reown/appkit-common-react-native": "2.0.0-alpha.5",
|
|
45
|
+
"@reown/appkit-react-native": "2.0.0-alpha.5",
|
|
46
|
+
"@reown/appkit-siwe-react-native": "2.0.0-alpha.5"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"@react-native-community/netinfo": "*",
|
|
@@ -1,58 +1,56 @@
|
|
|
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
|
-
ready: !!appKitProvidedConnector.getProvider(),
|
|
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
|
|
|
53
51
|
async connect({ chainId } = {}) {
|
|
54
52
|
try {
|
|
55
|
-
const _provider =
|
|
53
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
56
54
|
if (!_provider) throw new ProviderNotFoundError();
|
|
57
55
|
|
|
58
56
|
// AppKit connector is already connected or handles its own connection.
|
|
@@ -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() {
|
|
@@ -136,10 +162,10 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
136
162
|
|
|
137
163
|
async getProvider() {
|
|
138
164
|
if (!provider) {
|
|
139
|
-
provider = appKitProvidedConnector.getProvider();
|
|
165
|
+
provider = appKitProvidedConnector.getProvider('eip155');
|
|
140
166
|
}
|
|
141
167
|
|
|
142
|
-
return provider
|
|
168
|
+
return provider;
|
|
143
169
|
},
|
|
144
170
|
|
|
145
171
|
async isAuthorized() {
|
|
@@ -153,7 +179,7 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
|
|
|
153
179
|
},
|
|
154
180
|
|
|
155
181
|
async switchChain({ chainId }) {
|
|
156
|
-
const _provider =
|
|
182
|
+
const _provider = appKitProvidedConnector.getProvider('eip155');
|
|
157
183
|
if (!_provider) throw new Error('Provider not available for switching chain.');
|
|
158
184
|
const newChain = config.chains.find(c => c.id === chainId);
|
|
159
185
|
|
|
@@ -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
|
}
|