@reown/appkit-wagmi-react-native 0.0.0-canary-20240912195440

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.
Files changed (37) hide show
  1. package/lib/commonjs/client.js +397 -0
  2. package/lib/commonjs/client.js.map +1 -0
  3. package/lib/commonjs/connectors/WalletConnectConnector.js +353 -0
  4. package/lib/commonjs/connectors/WalletConnectConnector.js.map +1 -0
  5. package/lib/commonjs/index.js +126 -0
  6. package/lib/commonjs/index.js.map +1 -0
  7. package/lib/commonjs/utils/defaultWagmiConfig.js +46 -0
  8. package/lib/commonjs/utils/defaultWagmiConfig.js.map +1 -0
  9. package/lib/commonjs/utils/helpers.js +52 -0
  10. package/lib/commonjs/utils/helpers.js.map +1 -0
  11. package/lib/module/client.js +389 -0
  12. package/lib/module/client.js.map +1 -0
  13. package/lib/module/connectors/WalletConnectConnector.js +348 -0
  14. package/lib/module/connectors/WalletConnectConnector.js.map +1 -0
  15. package/lib/module/index.js +81 -0
  16. package/lib/module/index.js.map +1 -0
  17. package/lib/module/utils/defaultWagmiConfig.js +40 -0
  18. package/lib/module/utils/defaultWagmiConfig.js.map +1 -0
  19. package/lib/module/utils/helpers.js +43 -0
  20. package/lib/module/utils/helpers.js.map +1 -0
  21. package/lib/typescript/client.d.ts +39 -0
  22. package/lib/typescript/client.d.ts.map +1 -0
  23. package/lib/typescript/connectors/WalletConnectConnector.d.ts +74 -0
  24. package/lib/typescript/connectors/WalletConnectConnector.d.ts.map +1 -0
  25. package/lib/typescript/index.d.ts +24 -0
  26. package/lib/typescript/index.d.ts.map +1 -0
  27. package/lib/typescript/utils/defaultWagmiConfig.d.ts +11 -0
  28. package/lib/typescript/utils/defaultWagmiConfig.d.ts.map +1 -0
  29. package/lib/typescript/utils/helpers.d.ts +17 -0
  30. package/lib/typescript/utils/helpers.d.ts.map +1 -0
  31. package/package.json +76 -0
  32. package/readme.md +9 -0
  33. package/src/client.ts +475 -0
  34. package/src/connectors/WalletConnectConnector.ts +469 -0
  35. package/src/index.tsx +103 -0
  36. package/src/utils/defaultWagmiConfig.ts +53 -0
  37. package/src/utils/helpers.ts +58 -0
@@ -0,0 +1,389 @@
1
+ import { formatUnits } from 'viem';
2
+ import { connect, disconnect, signMessage, switchChain, watchAccount, watchConnectors, getEnsName, getEnsAvatar as wagmiGetEnsAvatar, getBalance } from '@wagmi/core';
3
+ import { mainnet } from '@wagmi/core/chains';
4
+ import { OPTIONAL_METHODS } from '@walletconnect/ethereum-provider';
5
+ import { AppKitScaffold } from '@reown/appkit-scaffold-react-native';
6
+ import { ConstantsUtil, HelpersUtil, PresetsUtil, StorageUtil } from '@reown/appkit-scaffold-utils-react-native';
7
+ import { NetworkUtil } from '@reown/appkit-common-react-native';
8
+ import { getCaipDefaultChain, getAuthCaipNetworks, getWalletConnectCaipNetworks } from './utils/helpers';
9
+
10
+ // -- Types ---------------------------------------------------------------------
11
+
12
+ // @ts-expect-error: Overriden state type is correct
13
+
14
+ // -- Client --------------------------------------------------------------------
15
+ export class AppKit extends AppKitScaffold {
16
+ hasSyncedConnectedAccount = false;
17
+ options = undefined;
18
+ constructor(options) {
19
+ const {
20
+ wagmiConfig,
21
+ siweConfig,
22
+ defaultChain,
23
+ tokens,
24
+ _sdkVersion,
25
+ ...appKitOptions
26
+ } = options;
27
+ if (!wagmiConfig) {
28
+ throw new Error('appkit:constructor - wagmiConfig is undefined');
29
+ }
30
+ if (!appKitOptions.projectId) {
31
+ throw new Error('appkit:constructor - projectId is undefined');
32
+ }
33
+ const networkControllerClient = {
34
+ switchCaipNetwork: async caipNetwork => {
35
+ const chainId = NetworkUtil.caipNetworkIdToNumber(caipNetwork?.id);
36
+ if (chainId) {
37
+ await switchChain(wagmiConfig, {
38
+ chainId
39
+ });
40
+ }
41
+ },
42
+ async getApprovedCaipNetworksData() {
43
+ const walletChoice = await StorageUtil.getConnectedConnector();
44
+ const walletConnectType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID];
45
+ const authType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.AUTH_CONNECTOR_ID];
46
+ if (walletChoice?.includes(walletConnectType)) {
47
+ const connector = wagmiConfig.connectors.find(c => c.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID);
48
+ return getWalletConnectCaipNetworks(connector);
49
+ } else if (authType) {
50
+ return getAuthCaipNetworks();
51
+ }
52
+ return {
53
+ approvedCaipNetworkIds: undefined,
54
+ supportsAllNetworks: true
55
+ };
56
+ }
57
+ };
58
+ const connectionControllerClient = {
59
+ connectWalletConnect: async (onUri, walletUniversalLink) => {
60
+ const connector = wagmiConfig.connectors.find(c => c.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID);
61
+ if (!connector) {
62
+ throw new Error('connectionControllerClient:getWalletConnectUri - connector is undefined');
63
+ }
64
+ const provider = await connector.getProvider();
65
+ provider.on('display_uri', data => {
66
+ onUri(data);
67
+ });
68
+
69
+ // When connecting through walletconnect, we need to set the clientId in the store
70
+ const clientId = await provider.signer?.client?.core?.crypto?.getClientId();
71
+ if (clientId) {
72
+ this.setClientId(clientId);
73
+ }
74
+ const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id);
75
+
76
+ // SIWE
77
+ const siweParams = await siweConfig?.getMessageParams?.();
78
+ // Make sure client uses ethereum provider version that supports `authenticate`
79
+ if (siweConfig?.options?.enabled && typeof provider?.authenticate === 'function' && siweParams && Object.keys(siweParams || {}).length > 0) {
80
+ const {
81
+ SIWEController,
82
+ getDidChainId,
83
+ getDidAddress
84
+ } = await import('@reown/appkit-siwe-react-native');
85
+ // @ts-expect-error - setting requested chains beforehand avoids wagmi auto disconnecting the session when `connect` is called because it things chains are stale
86
+ await connector.setRequestedChainsIds(siweParams.chains);
87
+ const result = await provider.authenticate({
88
+ nonce: await siweConfig.getNonce(),
89
+ methods: [...OPTIONAL_METHODS],
90
+ ...siweParams
91
+ }, walletUniversalLink);
92
+
93
+ // Auths is an array of signed CACAO objects https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-74.md
94
+ const signedCacao = result?.auths?.[0];
95
+ if (signedCacao) {
96
+ const {
97
+ p,
98
+ s
99
+ } = signedCacao;
100
+ const cacaoChainId = getDidChainId(p.iss) || '';
101
+ const address = getDidAddress(p.iss);
102
+ try {
103
+ // Kicks off verifyMessage and populates external states
104
+ const message = provider.signer.client.formatAuthMessage({
105
+ request: p,
106
+ iss: p.iss
107
+ });
108
+ await SIWEController.verifyMessage({
109
+ message,
110
+ signature: s.s,
111
+ cacao: signedCacao
112
+ });
113
+ if (address && chainId) {
114
+ const session = {
115
+ address,
116
+ chainId: parseInt(cacaoChainId, 10)
117
+ };
118
+ SIWEController.setSession(session);
119
+ SIWEController.onSignIn?.(session);
120
+ }
121
+ } catch (error) {
122
+ // eslint-disable-next-line no-console
123
+ console.error('Error verifying message', error);
124
+ // eslint-disable-next-line no-console
125
+ await provider.disconnect().catch(console.error);
126
+ // eslint-disable-next-line no-console
127
+ await SIWEController.signOut().catch(console.error);
128
+ throw error;
129
+ }
130
+ /*
131
+ * Unassign the connector from the wagmiConfig and allow connect() to reassign it in the next step
132
+ * this avoids case where wagmi throws because the connector is already connected
133
+ * what we need connect() to do is to only setup internal event listeners
134
+ */
135
+ this.wagmiConfig.state.current = '';
136
+ }
137
+ }
138
+ await connect(this.wagmiConfig, {
139
+ connector,
140
+ chainId
141
+ });
142
+ },
143
+ connectExternal: async ({
144
+ id
145
+ }) => {
146
+ const connector = wagmiConfig.connectors.find(c => c.id === id);
147
+ if (!connector) {
148
+ throw new Error('connectionControllerClient:connectExternal - connector is undefined');
149
+ }
150
+
151
+ // If connecting with something else than walletconnect, we need to clear the clientId in the store
152
+ this.setClientId(null);
153
+ const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id);
154
+ await connect(this.wagmiConfig, {
155
+ connector,
156
+ chainId
157
+ });
158
+ },
159
+ signMessage: async message => signMessage(this.wagmiConfig, {
160
+ message
161
+ }),
162
+ disconnect: async () => {
163
+ await disconnect(this.wagmiConfig);
164
+ this.setClientId(null);
165
+ if (siweConfig?.options?.signOutOnDisconnect) {
166
+ const {
167
+ SIWEController
168
+ } = await import('@reown/appkit-siwe-react-native');
169
+ await SIWEController.signOut();
170
+ }
171
+ }
172
+ };
173
+ super({
174
+ networkControllerClient,
175
+ connectionControllerClient,
176
+ siweControllerClient: siweConfig,
177
+ defaultChain: getCaipDefaultChain(defaultChain),
178
+ tokens: HelpersUtil.getCaipTokens(tokens),
179
+ _sdkVersion: _sdkVersion ?? `react-native-wagmi-${ConstantsUtil.VERSION}`,
180
+ ...appKitOptions
181
+ });
182
+ this.options = options;
183
+ this.wagmiConfig = wagmiConfig;
184
+ this.syncRequestedNetworks([...wagmiConfig.chains]);
185
+ this.syncConnectors([...wagmiConfig.connectors]);
186
+ this.listenAuthConnector([...wagmiConfig.connectors]);
187
+ watchConnectors(wagmiConfig, {
188
+ onChange: connectors => this.syncConnectors([...connectors])
189
+ });
190
+ watchAccount(wagmiConfig, {
191
+ onChange: accountData => {
192
+ this.syncAccount({
193
+ ...accountData
194
+ });
195
+ }
196
+ });
197
+ }
198
+
199
+ // -- Public ------------------------------------------------------------------
200
+
201
+ // @ts-expect-error: Overriden state type is correct
202
+ getState() {
203
+ const state = super.getState();
204
+ return {
205
+ ...state,
206
+ selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId)
207
+ };
208
+ }
209
+
210
+ // @ts-expect-error: Overriden state type is correct
211
+ subscribeState(callback) {
212
+ return super.subscribeState(state => callback({
213
+ ...state,
214
+ selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId)
215
+ }));
216
+ }
217
+
218
+ // -- Private -----------------------------------------------------------------
219
+ syncRequestedNetworks(chains) {
220
+ const requestedCaipNetworks = chains?.map(chain => ({
221
+ id: `${ConstantsUtil.EIP155}:${chain.id}`,
222
+ name: chain.name,
223
+ imageId: PresetsUtil.EIP155NetworkImageIds[chain.id],
224
+ imageUrl: this.options?.chainImages?.[chain.id]
225
+ }));
226
+ this.setRequestedCaipNetworks(requestedCaipNetworks ?? []);
227
+ }
228
+ async syncAccount({
229
+ address,
230
+ isConnected,
231
+ chainId,
232
+ connector,
233
+ isConnecting,
234
+ isReconnecting
235
+ }) {
236
+ this.resetAccount();
237
+ this.syncNetwork(address, chainId, isConnected);
238
+ this.setLoading(!!connector && (isConnecting || isReconnecting));
239
+ if (isConnected && address && chainId) {
240
+ const caipAddress = `${ConstantsUtil.EIP155}:${chainId}:${address}`;
241
+ this.setIsConnected(isConnected);
242
+ this.setCaipAddress(caipAddress);
243
+ await Promise.all([this.syncProfile(address, chainId), this.syncBalance(address, chainId), this.syncConnectedWalletInfo(connector), this.getApprovedCaipNetworksData()]);
244
+ this.hasSyncedConnectedAccount = true;
245
+ } else if (!isConnected && this.hasSyncedConnectedAccount) {
246
+ this.resetWcConnection();
247
+ this.resetNetwork();
248
+ }
249
+ }
250
+ async syncNetwork(address, chainId, isConnected) {
251
+ const chain = this.wagmiConfig.chains.find(c => c.id === chainId);
252
+ if (chain || chainId) {
253
+ const name = chain?.name ?? chainId?.toString();
254
+ const id = Number(chain?.id ?? chainId);
255
+ const caipChainId = `${ConstantsUtil.EIP155}:${id}`;
256
+ this.setCaipNetwork({
257
+ id: caipChainId,
258
+ name,
259
+ imageId: PresetsUtil.EIP155NetworkImageIds[id],
260
+ imageUrl: this.options?.chainImages?.[id]
261
+ });
262
+ if (isConnected && address && chainId) {
263
+ const caipAddress = `${ConstantsUtil.EIP155}:${id}:${address}`;
264
+ this.setCaipAddress(caipAddress);
265
+ if (chain?.blockExplorers?.default?.url) {
266
+ const url = `${chain.blockExplorers.default.url}/address/${address}`;
267
+ this.setAddressExplorerUrl(url);
268
+ } else {
269
+ this.setAddressExplorerUrl(undefined);
270
+ }
271
+ if (this.hasSyncedConnectedAccount) {
272
+ await this.syncProfile(address, chainId);
273
+ await this.syncBalance(address, chainId);
274
+ }
275
+ }
276
+ }
277
+ }
278
+ async syncProfile(address, chainId) {
279
+ try {
280
+ const response = await this.fetchIdentity({
281
+ address
282
+ });
283
+ if (!response) {
284
+ throw new Error('Couldnt fetch idendity');
285
+ }
286
+ this.setProfileName(response.name);
287
+ this.setProfileImage(response.avatar);
288
+ } catch {
289
+ if (chainId === mainnet.id) {
290
+ const profileName = await getEnsName(this.wagmiConfig, {
291
+ address,
292
+ chainId
293
+ });
294
+ if (profileName) {
295
+ this.setProfileName(profileName);
296
+ const profileImage = await wagmiGetEnsAvatar(this.wagmiConfig, {
297
+ name: profileName,
298
+ chainId
299
+ });
300
+ if (profileImage) {
301
+ this.setProfileImage(profileImage);
302
+ }
303
+ }
304
+ } else {
305
+ this.setProfileName(undefined);
306
+ this.setProfileImage(undefined);
307
+ }
308
+ }
309
+ }
310
+ async syncBalance(address, chainId) {
311
+ const chain = this.wagmiConfig.chains.find(c => c.id === chainId);
312
+ if (chain) {
313
+ const balance = await getBalance(this.wagmiConfig, {
314
+ address,
315
+ chainId: chain.id
316
+ });
317
+ const formattedBalance = formatUnits(balance.value, balance.decimals);
318
+ this.setBalance(formattedBalance, balance.symbol);
319
+ return;
320
+ }
321
+ this.setBalance(undefined, undefined);
322
+ }
323
+ async syncConnectedWalletInfo(connector) {
324
+ if (!connector) {
325
+ throw Error('syncConnectedWalletInfo - connector is undefined');
326
+ }
327
+ if (connector.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID && connector.getProvider) {
328
+ const walletConnectProvider = await connector.getProvider();
329
+ if (walletConnectProvider.session) {
330
+ this.setConnectedWalletInfo({
331
+ ...walletConnectProvider.session.peer.metadata,
332
+ name: walletConnectProvider.session.peer.metadata.name,
333
+ icon: walletConnectProvider.session.peer.metadata.icons?.[0]
334
+ });
335
+ }
336
+ } else {
337
+ this.setConnectedWalletInfo({
338
+ name: connector.name,
339
+ icon: connector.icon
340
+ });
341
+ }
342
+ }
343
+ syncConnectors(connectors) {
344
+ const uniqueIds = new Set();
345
+ const filteredConnectors = connectors.filter(item => !uniqueIds.has(item.id) && uniqueIds.add(item.id));
346
+ const excludedConnectors = [ConstantsUtil.AUTH_CONNECTOR_ID];
347
+ const _connectors = [];
348
+ filteredConnectors.forEach(({
349
+ id,
350
+ name,
351
+ icon
352
+ }) => {
353
+ if (!excludedConnectors.includes(id)) {
354
+ _connectors.push({
355
+ id,
356
+ explorerId: PresetsUtil.ConnectorExplorerIds[id],
357
+ imageId: PresetsUtil.ConnectorImageIds[id] ?? icon,
358
+ imageUrl: this.options?.connectorImages?.[id],
359
+ name: PresetsUtil.ConnectorNamesMap[id] ?? name,
360
+ type: PresetsUtil.ConnectorTypesMap[id] ?? 'EXTERNAL'
361
+ });
362
+ }
363
+ });
364
+ this.setConnectors(_connectors);
365
+ this.syncAuthConnector(filteredConnectors);
366
+ }
367
+ async syncAuthConnector(connectors) {
368
+ const authConnector = connectors.find(({
369
+ id
370
+ }) => id === ConstantsUtil.AUTH_CONNECTOR_ID);
371
+ if (authConnector) {
372
+ const provider = await authConnector.getProvider();
373
+ this.addConnector({
374
+ id: ConstantsUtil.AUTH_CONNECTOR_ID,
375
+ type: 'AUTH',
376
+ name: 'Auth',
377
+ provider
378
+ });
379
+ }
380
+ }
381
+ async listenAuthConnector(connectors) {
382
+ const connector = connectors.find(c => c.id === ConstantsUtil.AUTH_CONNECTOR_ID);
383
+ const connectedConnector = await StorageUtil.getItem('@w3m/connected_connector');
384
+ if (connector && connectedConnector === 'AUTH') {
385
+ super.setLoading(true);
386
+ }
387
+ }
388
+ }
389
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["formatUnits","connect","disconnect","signMessage","switchChain","watchAccount","watchConnectors","getEnsName","getEnsAvatar","wagmiGetEnsAvatar","getBalance","mainnet","OPTIONAL_METHODS","AppKitScaffold","ConstantsUtil","HelpersUtil","PresetsUtil","StorageUtil","NetworkUtil","getCaipDefaultChain","getAuthCaipNetworks","getWalletConnectCaipNetworks","AppKit","hasSyncedConnectedAccount","options","undefined","constructor","wagmiConfig","siweConfig","defaultChain","tokens","_sdkVersion","appKitOptions","Error","projectId","networkControllerClient","switchCaipNetwork","caipNetwork","chainId","caipNetworkIdToNumber","id","getApprovedCaipNetworksData","walletChoice","getConnectedConnector","walletConnectType","ConnectorTypesMap","WALLET_CONNECT_CONNECTOR_ID","authType","AUTH_CONNECTOR_ID","includes","connector","connectors","find","c","approvedCaipNetworkIds","supportsAllNetworks","connectionControllerClient","connectWalletConnect","onUri","walletUniversalLink","provider","getProvider","on","data","clientId","signer","client","core","crypto","getClientId","setClientId","getCaipNetwork","siweParams","getMessageParams","enabled","authenticate","Object","keys","length","SIWEController","getDidChainId","getDidAddress","setRequestedChainsIds","chains","result","nonce","getNonce","methods","signedCacao","auths","p","s","cacaoChainId","iss","address","message","formatAuthMessage","request","verifyMessage","signature","cacao","session","parseInt","setSession","onSignIn","error","console","catch","signOut","state","current","connectExternal","signOutOnDisconnect","siweControllerClient","getCaipTokens","VERSION","syncRequestedNetworks","syncConnectors","listenAuthConnector","onChange","accountData","syncAccount","getState","selectedNetworkId","subscribeState","callback","requestedCaipNetworks","map","chain","EIP155","name","imageId","EIP155NetworkImageIds","imageUrl","chainImages","setRequestedCaipNetworks","isConnected","isConnecting","isReconnecting","resetAccount","syncNetwork","setLoading","caipAddress","setIsConnected","setCaipAddress","Promise","all","syncProfile","syncBalance","syncConnectedWalletInfo","resetWcConnection","resetNetwork","toString","Number","caipChainId","setCaipNetwork","blockExplorers","default","url","setAddressExplorerUrl","response","fetchIdentity","setProfileName","setProfileImage","avatar","profileName","profileImage","balance","formattedBalance","value","decimals","setBalance","symbol","walletConnectProvider","setConnectedWalletInfo","peer","metadata","icon","icons","uniqueIds","Set","filteredConnectors","filter","item","has","add","excludedConnectors","_connectors","forEach","push","explorerId","ConnectorExplorerIds","ConnectorImageIds","connectorImages","ConnectorNamesMap","type","setConnectors","syncAuthConnector","authConnector","addConnector","connectedConnector","getItem"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":"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"}