@reown/appkit-ethers-react-native 0.0.0-feat-multichain-20250520183003 → 0.0.0-feat-onramp-20250602154313
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/client.js +861 -0
- package/lib/commonjs/client.js.map +1 -0
- package/lib/commonjs/index.js +174 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/defaultConfig.js +18 -0
- package/lib/commonjs/utils/defaultConfig.js.map +1 -0
- package/lib/commonjs/utils/helpers.js +27 -0
- package/lib/commonjs/utils/helpers.js.map +1 -0
- package/lib/module/client.js +853 -0
- package/lib/module/client.js.map +1 -0
- package/lib/module/index.js +133 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/defaultConfig.js +12 -0
- package/lib/module/utils/defaultConfig.js.map +1 -0
- package/lib/module/utils/helpers.js +20 -0
- package/lib/module/utils/helpers.js.map +1 -0
- package/lib/typescript/client.d.ts +65 -0
- package/lib/typescript/client.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +39 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/defaultConfig.d.ts +7 -0
- package/lib/typescript/utils/defaultConfig.d.ts.map +1 -0
- package/lib/typescript/utils/helpers.d.ts +10 -0
- package/lib/typescript/utils/helpers.d.ts.map +1 -0
- package/package.json +10 -6
- package/src/client.ts +1077 -0
- package/src/index.tsx +164 -2
- package/src/utils/defaultConfig.ts +19 -0
- package/src/utils/helpers.ts +27 -0
- package/lib/commonjs/adapter.js +0 -80
- package/lib/commonjs/adapter.js.map +0 -1
- package/lib/commonjs/helpers.js +0 -33
- package/lib/commonjs/helpers.js.map +0 -1
- package/lib/module/adapter.js +0 -73
- package/lib/module/adapter.js.map +0 -1
- package/lib/module/helpers.js +0 -25
- package/lib/module/helpers.js.map +0 -1
- package/lib/typescript/adapter.d.ts +0 -13
- package/lib/typescript/adapter.d.ts.map +0 -1
- package/lib/typescript/helpers.d.ts +0 -3
- package/lib/typescript/helpers.d.ts.map +0 -1
- package/src/adapter.ts +0 -98
- package/src/helpers.ts +0 -25
package/src/index.tsx
CHANGED
|
@@ -1,2 +1,164 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
2
|
+
import { useSnapshot } from 'valtio';
|
|
3
|
+
import { EthersStoreUtil, type Provider } from '@reown/appkit-scaffold-utils-react-native';
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
AccountButton,
|
|
7
|
+
AppKitButton,
|
|
8
|
+
ConnectButton,
|
|
9
|
+
NetworkButton,
|
|
10
|
+
AppKit
|
|
11
|
+
} from '@reown/appkit-scaffold-react-native';
|
|
12
|
+
import type { EventName, EventsControllerState } from '@reown/appkit-scaffold-react-native';
|
|
13
|
+
import { ConstantsUtil } from '@reown/appkit-common-react-native';
|
|
14
|
+
export { defaultConfig } from './utils/defaultConfig';
|
|
15
|
+
|
|
16
|
+
import { AppKit, type AppKitOptions } from './client';
|
|
17
|
+
|
|
18
|
+
// -- Types -------------------------------------------------------------------
|
|
19
|
+
export type { AppKitOptions } from './client';
|
|
20
|
+
|
|
21
|
+
type OpenOptions = Parameters<AppKit['open']>[0];
|
|
22
|
+
|
|
23
|
+
// -- Setup -------------------------------------------------------------------
|
|
24
|
+
let modal: AppKit | undefined;
|
|
25
|
+
|
|
26
|
+
export function createAppKit(options: AppKitOptions) {
|
|
27
|
+
if (!modal) {
|
|
28
|
+
modal = new AppKit({
|
|
29
|
+
...options,
|
|
30
|
+
_sdkVersion: `react-native-ethers-${ConstantsUtil.VERSION}`
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return modal;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// -- Hooks -------------------------------------------------------------------
|
|
38
|
+
export function useAppKit() {
|
|
39
|
+
if (!modal) {
|
|
40
|
+
throw new Error('Please call "createAppKit" before using "useAppKit" hook');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function open(options?: OpenOptions) {
|
|
44
|
+
await modal?.open(options);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function close() {
|
|
48
|
+
await modal?.close();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return { open, close };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function useAppKitState() {
|
|
55
|
+
if (!modal) {
|
|
56
|
+
throw new Error('Please call "createAppKit" before using "useAppKitState" hook');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const [state, setState] = useState(modal.getState());
|
|
60
|
+
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
const unsubscribe = modal?.subscribeState(newState => {
|
|
63
|
+
if (newState) setState({ ...newState });
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return () => {
|
|
67
|
+
unsubscribe?.();
|
|
68
|
+
};
|
|
69
|
+
}, []);
|
|
70
|
+
|
|
71
|
+
return state;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function useAppKitProvider() {
|
|
75
|
+
const { provider, providerType } = useSnapshot(EthersStoreUtil.state);
|
|
76
|
+
|
|
77
|
+
const walletProvider = provider as Provider | undefined;
|
|
78
|
+
const walletProviderType = providerType;
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
walletProvider,
|
|
82
|
+
walletProviderType
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function useDisconnect() {
|
|
87
|
+
async function disconnect() {
|
|
88
|
+
await modal?.disconnect();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
disconnect
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function useAppKitAccount() {
|
|
97
|
+
const { address, isConnected, chainId } = useSnapshot(EthersStoreUtil.state);
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
address,
|
|
101
|
+
isConnected,
|
|
102
|
+
chainId
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function useWalletInfo() {
|
|
107
|
+
if (!modal) {
|
|
108
|
+
throw new Error('Please call "createAppKit" before using "useWalletInfo" hook');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const walletInfo = useSyncExternalStore(
|
|
112
|
+
modal.subscribeWalletInfo,
|
|
113
|
+
modal.getWalletInfo,
|
|
114
|
+
modal.getWalletInfo
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
return { walletInfo };
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function useAppKitError() {
|
|
121
|
+
const { error } = useSnapshot(EthersStoreUtil.state);
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
error
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function useAppKitEvents(callback?: (newEvent: EventsControllerState) => void) {
|
|
129
|
+
if (!modal) {
|
|
130
|
+
throw new Error('Please call "createAppKit" before using "useAppKitEvents" hook');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const [event, setEvents] = useState(modal.getEvent());
|
|
134
|
+
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
const unsubscribe = modal?.subscribeEvents(newEvent => {
|
|
137
|
+
setEvents({ ...newEvent });
|
|
138
|
+
callback?.(newEvent);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
return () => {
|
|
142
|
+
unsubscribe?.();
|
|
143
|
+
};
|
|
144
|
+
}, [callback]);
|
|
145
|
+
|
|
146
|
+
return event;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function useAppKitEventSubscription(
|
|
150
|
+
event: EventName,
|
|
151
|
+
callback: (newEvent: EventsControllerState) => void
|
|
152
|
+
) {
|
|
153
|
+
if (!modal) {
|
|
154
|
+
throw new Error('Please call "createAppKit" before using "useAppKitEventSubscription" hook');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
useEffect(() => {
|
|
158
|
+
const unsubscribe = modal?.subscribeEvent(event, callback);
|
|
159
|
+
|
|
160
|
+
return () => {
|
|
161
|
+
unsubscribe?.();
|
|
162
|
+
};
|
|
163
|
+
}, [callback, event]);
|
|
164
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Metadata,
|
|
3
|
+
Provider,
|
|
4
|
+
ProviderType,
|
|
5
|
+
AppKitFrameProvider
|
|
6
|
+
} from '@reown/appkit-scaffold-utils-react-native';
|
|
7
|
+
|
|
8
|
+
export interface ConfigOptions {
|
|
9
|
+
metadata: Metadata;
|
|
10
|
+
extraConnectors?: (Provider | AppKitFrameProvider)[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function defaultConfig(options: ConfigOptions) {
|
|
14
|
+
const { metadata, extraConnectors } = options;
|
|
15
|
+
|
|
16
|
+
let providers: ProviderType = { metadata, extraConnectors };
|
|
17
|
+
|
|
18
|
+
return providers;
|
|
19
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CaipNetworkId } from '@reown/appkit-scaffold-react-native';
|
|
2
|
+
import { PresetsUtil, ConstantsUtil } from '@reown/appkit-common-react-native';
|
|
3
|
+
import EthereumProvider from '@walletconnect/ethereum-provider';
|
|
4
|
+
|
|
5
|
+
export async function getWalletConnectCaipNetworks(provider?: EthereumProvider) {
|
|
6
|
+
if (!provider) {
|
|
7
|
+
throw new Error('networkControllerClient:getApprovedCaipNetworks - provider is undefined');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const ns = provider.signer?.session?.namespaces;
|
|
11
|
+
const nsMethods = ns?.[ConstantsUtil.EIP155]?.methods;
|
|
12
|
+
const nsChains = ns?.[ConstantsUtil.EIP155]?.chains as CaipNetworkId[];
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
supportsAllNetworks: Boolean(nsMethods?.includes(ConstantsUtil.ADD_CHAIN_METHOD)),
|
|
16
|
+
approvedCaipNetworkIds: nsChains
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function getAuthCaipNetworks() {
|
|
21
|
+
return {
|
|
22
|
+
supportsAllNetworks: false,
|
|
23
|
+
approvedCaipNetworkIds: PresetsUtil.RpcChainIds.map(
|
|
24
|
+
id => `${ConstantsUtil.EIP155}:${id}`
|
|
25
|
+
) as CaipNetworkId[]
|
|
26
|
+
};
|
|
27
|
+
}
|
package/lib/commonjs/adapter.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.EthersAdapter = void 0;
|
|
7
|
-
var _appkitCommonReactNative = require("@reown/appkit-common-react-native");
|
|
8
|
-
var _appkitScaffoldUtilsReactNative = require("@reown/appkit-scaffold-utils-react-native");
|
|
9
|
-
var _helpers = require("./helpers");
|
|
10
|
-
class EthersAdapter extends _appkitCommonReactNative.EVMAdapter {
|
|
11
|
-
static supportedNamespace = 'eip155';
|
|
12
|
-
constructor(configParams) {
|
|
13
|
-
super({
|
|
14
|
-
projectId: configParams.projectId,
|
|
15
|
-
supportedNamespace: EthersAdapter.supportedNamespace
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
async getBalance(params) {
|
|
19
|
-
const {
|
|
20
|
-
network,
|
|
21
|
-
address
|
|
22
|
-
} = params;
|
|
23
|
-
if (!this.connector) throw new Error('No active connector');
|
|
24
|
-
if (!network) throw new Error('No network provided');
|
|
25
|
-
const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
26
|
-
const balance = {
|
|
27
|
-
amount: '0.00',
|
|
28
|
-
symbol: network.nativeCurrency.symbol || 'ETH'
|
|
29
|
-
};
|
|
30
|
-
if (!balanceAddress) return balance;
|
|
31
|
-
const account = balanceAddress.split(':')[2];
|
|
32
|
-
const rpcUrl = network.rpcUrls.default.http?.[0];
|
|
33
|
-
if (!rpcUrl || !account) return balance;
|
|
34
|
-
try {
|
|
35
|
-
const wei = await (0, _helpers.getEthBalance)(rpcUrl, account);
|
|
36
|
-
balance.amount = (0, _helpers.formatEther)(wei);
|
|
37
|
-
this.emit('balanceChanged', {
|
|
38
|
-
namespace: this.getSupportedNamespace(),
|
|
39
|
-
address: balanceAddress,
|
|
40
|
-
balance
|
|
41
|
-
});
|
|
42
|
-
return balance;
|
|
43
|
-
} catch {
|
|
44
|
-
return balance;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async switchNetwork(network) {
|
|
48
|
-
if (!this.connector) throw new Error('No active connector');
|
|
49
|
-
const provider = this.connector.getProvider();
|
|
50
|
-
if (!provider) throw new Error('No active provider');
|
|
51
|
-
try {
|
|
52
|
-
await provider.request({
|
|
53
|
-
method: 'wallet_switchEthereumChain',
|
|
54
|
-
params: [{
|
|
55
|
-
chainId: _appkitScaffoldUtilsReactNative.EthersHelpersUtil.numberToHexString(Number(network.id))
|
|
56
|
-
}] //TODO: check util
|
|
57
|
-
}, `${EthersAdapter.supportedNamespace}:${network.id}`);
|
|
58
|
-
} catch (switchError) {
|
|
59
|
-
const message = switchError?.message;
|
|
60
|
-
if (/(?<temp1>user rejected)/u.test(message?.toLowerCase())) {
|
|
61
|
-
throw new Error('Chain is not supported');
|
|
62
|
-
}
|
|
63
|
-
throw switchError;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
getAccounts() {
|
|
67
|
-
if (!this.connector) throw new Error('No active connector');
|
|
68
|
-
const namespaces = this.connector.getNamespaces();
|
|
69
|
-
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
70
|
-
}
|
|
71
|
-
disconnect() {
|
|
72
|
-
if (!this.connector) throw new Error('EthersAdapter:disconnect - No active connector');
|
|
73
|
-
return this.connector.disconnect();
|
|
74
|
-
}
|
|
75
|
-
getSupportedNamespace() {
|
|
76
|
-
return EthersAdapter.supportedNamespace;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
exports.EthersAdapter = EthersAdapter;
|
|
80
|
-
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_appkitCommonReactNative","require","_appkitScaffoldUtilsReactNative","_helpers","EthersAdapter","EVMAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","balance","amount","symbol","nativeCurrency","split","rpcUrl","rpcUrls","default","http","wei","getEthBalance","formatEther","emit","namespace","getSupportedNamespace","switchNetwork","provider","getProvider","request","method","chainId","EthersHelpersUtil","numberToHexString","Number","switchError","message","test","toLowerCase","namespaces","getNamespaces","accounts","disconnect","exports"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAQA,IAAAC,+BAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEO,MAAMG,aAAa,SAASC,mCAAU,CAAC;EAC5C,OAAeC,kBAAkB,GAAmB,QAAQ;EAE5DC,WAAWA,CAACC,YAAmC,EAAE;IAC/C,KAAK,CAAC;MACJC,SAAS,EAAED,YAAY,CAACC,SAAS;MACjCH,kBAAkB,EAAEF,aAAa,CAACE;IACpC,CAAC,CAAC;EACJ;EAEA,MAAMI,UAAUA,CAACC,MAAwB,EAA+B;IACtE,MAAM;MAAEC,OAAO;MAAEC;IAAQ,CAAC,GAAGF,MAAM;IAEnC,IAAI,CAAC,IAAI,CAACG,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,IAAI,CAACH,OAAO,EAAE,MAAM,IAAIG,KAAK,CAAC,qBAAqB,CAAC;IAEpD,MAAMC,cAAc,GAClBH,OAAO,IAAI,IAAI,CAACI,WAAW,CAAC,CAAC,EAAEC,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,QAAQ,CAACR,OAAO,CAACS,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAMC,OAA2B,GAAG;MAClCC,MAAM,EAAE,MAAM;MACdC,MAAM,EAAEb,OAAO,CAACc,cAAc,CAACD,MAAM,IAAI;IAC3C,CAAC;IAED,IAAI,CAACT,cAAc,EAAE,OAAOO,OAAO;IAEnC,MAAMJ,OAAO,GAAGH,cAAc,CAACW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAMC,MAAM,GAAGhB,OAAO,CAACiB,OAAO,CAACC,OAAO,CAACC,IAAI,GAAG,CAAC,CAAC;IAChD,IAAI,CAACH,MAAM,IAAI,CAACT,OAAO,EAAE,OAAOI,OAAO;IAEvC,IAAI;MACF,MAAMS,GAAG,GAAG,MAAM,IAAAC,sBAAa,EAACL,MAAM,EAAET,OAAO,CAAC;MAChDI,OAAO,CAACC,MAAM,GAAG,IAAAU,oBAAW,EAACF,GAAG,CAAC;MAEjC,IAAI,CAACG,IAAI,CAAC,gBAAgB,EAAE;QAC1BC,SAAS,EAAE,IAAI,CAACC,qBAAqB,CAAC,CAAC;QACvCxB,OAAO,EAAEG,cAAc;QACvBO;MACF,CAAC,CAAC;MAEF,OAAOA,OAAO;IAChB,CAAC,CAAC,MAAM;MACN,OAAOA,OAAO;IAChB;EACF;EAEA,MAAMe,aAAaA,CAAC1B,OAAsB,EAAiB;IACzD,IAAI,CAAC,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAE3D,MAAMwB,QAAQ,GAAG,IAAI,CAACzB,SAAS,CAAC0B,WAAW,CAAC,CAAC;IAC7C,IAAI,CAACD,QAAQ,EAAE,MAAM,IAAIxB,KAAK,CAAC,oBAAoB,CAAC;IAEpD,IAAI;MACF,MAAMwB,QAAQ,CAACE,OAAO,CACpB;QACEC,MAAM,EAAE,4BAA4B;QACpC/B,MAAM,EAAE,CAAC;UAAEgC,OAAO,EAAEC,iDAAiB,CAACC,iBAAiB,CAACC,MAAM,CAAClC,OAAO,CAACS,EAAE,CAAC;QAAE,CAAC,CAAC,CAAC;MACjF,CAAC,EACA,GAAEjB,aAAa,CAACE,kBAAmB,IAAGM,OAAO,CAACS,EAAG,EACpD,CAAC;IACH,CAAC,CAAC,OAAO0B,WAAgB,EAAE;MACzB,MAAMC,OAAO,GAAGD,WAAW,EAAEC,OAAiB;MAC9C,IAAI,0BAA0B,CAACC,IAAI,CAACD,OAAO,EAAEE,WAAW,CAAC,CAAC,CAAC,EAAE;QAC3D,MAAM,IAAInC,KAAK,CAAC,wBAAwB,CAAC;MAC3C;MAEA,MAAMgC,WAAW;IACnB;EACF;EAEA9B,WAAWA,CAAA,EAA8B;IACvC,IAAI,CAAC,IAAI,CAACH,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,qBAAqB,CAAC;IAC3D,MAAMoC,UAAU,GAAG,IAAI,CAACrC,SAAS,CAACsC,aAAa,CAAC,CAAC;IAEjD,OAAOD,UAAU,CAAC,IAAI,CAACd,qBAAqB,CAAC,CAAC,CAAC,EAAEgB,QAAQ;EAC3D;EAEAC,UAAUA,CAAA,EAAkB;IAC1B,IAAI,CAAC,IAAI,CAACxC,SAAS,EAAE,MAAM,IAAIC,KAAK,CAAC,gDAAgD,CAAC;IAEtF,OAAO,IAAI,CAACD,SAAS,CAACwC,UAAU,CAAC,CAAC;EACpC;EAEAjB,qBAAqBA,CAAA,EAAmB;IACtC,OAAOjC,aAAa,CAACE,kBAAkB;EACzC;AACF;AAACiD,OAAA,CAAAnD,aAAA,GAAAA,aAAA"}
|
package/lib/commonjs/helpers.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.formatEther = void 0;
|
|
7
|
-
exports.getEthBalance = getEthBalance;
|
|
8
|
-
// Helper to convert Wei (as string or bigint) to ETH
|
|
9
|
-
const formatEther = wei => {
|
|
10
|
-
return (Number(wei) / 1e18).toString();
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
// Raw JSON-RPC for balance lookup
|
|
14
|
-
exports.formatEther = formatEther;
|
|
15
|
-
async function getEthBalance(rpcUrl, address) {
|
|
16
|
-
const body = {
|
|
17
|
-
jsonrpc: '2.0',
|
|
18
|
-
method: 'eth_getBalance',
|
|
19
|
-
params: [address, 'latest'],
|
|
20
|
-
id: 1
|
|
21
|
-
};
|
|
22
|
-
const response = await fetch(rpcUrl, {
|
|
23
|
-
method: 'POST',
|
|
24
|
-
headers: {
|
|
25
|
-
'Content-Type': 'application/json'
|
|
26
|
-
},
|
|
27
|
-
body: JSON.stringify(body)
|
|
28
|
-
});
|
|
29
|
-
const json = await response.json();
|
|
30
|
-
if (json.error) throw new Error(json.error.message);
|
|
31
|
-
return BigInt(json.result); // result is hex string
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["formatEther","wei","Number","toString","exports","getEthBalance","rpcUrl","address","body","jsonrpc","method","params","id","response","fetch","headers","JSON","stringify","json","error","Error","message","BigInt","result"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":";;;;;;;AAAA;AACO,MAAMA,WAAW,GAAIC,GAAW,IAAa;EAClD,OAAO,CAACC,MAAM,CAACD,GAAG,CAAC,GAAG,IAAI,EAAEE,QAAQ,CAAC,CAAC;AACxC,CAAC;;AAED;AAAAC,OAAA,CAAAJ,WAAA,GAAAA,WAAA;AACO,eAAeK,aAAaA,CAACC,MAAc,EAAEC,OAAe,EAAmB;EACpF,MAAMC,IAAI,GAAG;IACXC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE,gBAAgB;IACxBC,MAAM,EAAE,CAACJ,OAAO,EAAE,QAAQ,CAAC;IAC3BK,EAAE,EAAE;EACN,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACR,MAAM,EAAE;IACnCI,MAAM,EAAE,MAAM;IACdK,OAAO,EAAE;MAAE,cAAc,EAAE;IAAmB,CAAC;IAC/CP,IAAI,EAAEQ,IAAI,CAACC,SAAS,CAACT,IAAI;EAC3B,CAAC,CAAC;EAEF,MAAMU,IAAI,GAAG,MAAML,QAAQ,CAACK,IAAI,CAAC,CAAC;EAClC,IAAIA,IAAI,CAACC,KAAK,EAAE,MAAM,IAAIC,KAAK,CAACF,IAAI,CAACC,KAAK,CAACE,OAAO,CAAC;EAEnD,OAAOC,MAAM,CAACJ,IAAI,CAACK,MAAM,CAAC,CAAC,CAAC;AAC9B"}
|
package/lib/module/adapter.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { EVMAdapter } from '@reown/appkit-common-react-native';
|
|
2
|
-
import { EthersHelpersUtil } from '@reown/appkit-scaffold-utils-react-native';
|
|
3
|
-
import { formatEther, getEthBalance } from './helpers';
|
|
4
|
-
export class EthersAdapter extends EVMAdapter {
|
|
5
|
-
static supportedNamespace = 'eip155';
|
|
6
|
-
constructor(configParams) {
|
|
7
|
-
super({
|
|
8
|
-
projectId: configParams.projectId,
|
|
9
|
-
supportedNamespace: EthersAdapter.supportedNamespace
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
async getBalance(params) {
|
|
13
|
-
const {
|
|
14
|
-
network,
|
|
15
|
-
address
|
|
16
|
-
} = params;
|
|
17
|
-
if (!this.connector) throw new Error('No active connector');
|
|
18
|
-
if (!network) throw new Error('No network provided');
|
|
19
|
-
const balanceAddress = address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
20
|
-
const balance = {
|
|
21
|
-
amount: '0.00',
|
|
22
|
-
symbol: network.nativeCurrency.symbol || 'ETH'
|
|
23
|
-
};
|
|
24
|
-
if (!balanceAddress) return balance;
|
|
25
|
-
const account = balanceAddress.split(':')[2];
|
|
26
|
-
const rpcUrl = network.rpcUrls.default.http?.[0];
|
|
27
|
-
if (!rpcUrl || !account) return balance;
|
|
28
|
-
try {
|
|
29
|
-
const wei = await getEthBalance(rpcUrl, account);
|
|
30
|
-
balance.amount = formatEther(wei);
|
|
31
|
-
this.emit('balanceChanged', {
|
|
32
|
-
namespace: this.getSupportedNamespace(),
|
|
33
|
-
address: balanceAddress,
|
|
34
|
-
balance
|
|
35
|
-
});
|
|
36
|
-
return balance;
|
|
37
|
-
} catch {
|
|
38
|
-
return balance;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async switchNetwork(network) {
|
|
42
|
-
if (!this.connector) throw new Error('No active connector');
|
|
43
|
-
const provider = this.connector.getProvider();
|
|
44
|
-
if (!provider) throw new Error('No active provider');
|
|
45
|
-
try {
|
|
46
|
-
await provider.request({
|
|
47
|
-
method: 'wallet_switchEthereumChain',
|
|
48
|
-
params: [{
|
|
49
|
-
chainId: EthersHelpersUtil.numberToHexString(Number(network.id))
|
|
50
|
-
}] //TODO: check util
|
|
51
|
-
}, `${EthersAdapter.supportedNamespace}:${network.id}`);
|
|
52
|
-
} catch (switchError) {
|
|
53
|
-
const message = switchError?.message;
|
|
54
|
-
if (/(?<temp1>user rejected)/u.test(message?.toLowerCase())) {
|
|
55
|
-
throw new Error('Chain is not supported');
|
|
56
|
-
}
|
|
57
|
-
throw switchError;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
getAccounts() {
|
|
61
|
-
if (!this.connector) throw new Error('No active connector');
|
|
62
|
-
const namespaces = this.connector.getNamespaces();
|
|
63
|
-
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
64
|
-
}
|
|
65
|
-
disconnect() {
|
|
66
|
-
if (!this.connector) throw new Error('EthersAdapter:disconnect - No active connector');
|
|
67
|
-
return this.connector.disconnect();
|
|
68
|
-
}
|
|
69
|
-
getSupportedNamespace() {
|
|
70
|
-
return EthersAdapter.supportedNamespace;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["EVMAdapter","EthersHelpersUtil","formatEther","getEthBalance","EthersAdapter","supportedNamespace","constructor","configParams","projectId","getBalance","params","network","address","connector","Error","balanceAddress","getAccounts","find","account","includes","id","toString","balance","amount","symbol","nativeCurrency","split","rpcUrl","rpcUrls","default","http","wei","emit","namespace","getSupportedNamespace","switchNetwork","provider","getProvider","request","method","chainId","numberToHexString","Number","switchError","message","test","toLowerCase","namespaces","getNamespaces","accounts","disconnect"],"sourceRoot":"../../src","sources":["adapter.ts"],"mappings":"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"}
|
package/lib/module/helpers.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// Helper to convert Wei (as string or bigint) to ETH
|
|
2
|
-
export const formatEther = wei => {
|
|
3
|
-
return (Number(wei) / 1e18).toString();
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
// Raw JSON-RPC for balance lookup
|
|
7
|
-
export async function getEthBalance(rpcUrl, address) {
|
|
8
|
-
const body = {
|
|
9
|
-
jsonrpc: '2.0',
|
|
10
|
-
method: 'eth_getBalance',
|
|
11
|
-
params: [address, 'latest'],
|
|
12
|
-
id: 1
|
|
13
|
-
};
|
|
14
|
-
const response = await fetch(rpcUrl, {
|
|
15
|
-
method: 'POST',
|
|
16
|
-
headers: {
|
|
17
|
-
'Content-Type': 'application/json'
|
|
18
|
-
},
|
|
19
|
-
body: JSON.stringify(body)
|
|
20
|
-
});
|
|
21
|
-
const json = await response.json();
|
|
22
|
-
if (json.error) throw new Error(json.error.message);
|
|
23
|
-
return BigInt(json.result); // result is hex string
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["formatEther","wei","Number","toString","getEthBalance","rpcUrl","address","body","jsonrpc","method","params","id","response","fetch","headers","JSON","stringify","json","error","Error","message","BigInt","result"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":"AAAA;AACA,OAAO,MAAMA,WAAW,GAAIC,GAAW,IAAa;EAClD,OAAO,CAACC,MAAM,CAACD,GAAG,CAAC,GAAG,IAAI,EAAEE,QAAQ,CAAC,CAAC;AACxC,CAAC;;AAED;AACA,OAAO,eAAeC,aAAaA,CAACC,MAAc,EAAEC,OAAe,EAAmB;EACpF,MAAMC,IAAI,GAAG;IACXC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE,gBAAgB;IACxBC,MAAM,EAAE,CAACJ,OAAO,EAAE,QAAQ,CAAC;IAC3BK,EAAE,EAAE;EACN,CAAC;EAED,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACR,MAAM,EAAE;IACnCI,MAAM,EAAE,MAAM;IACdK,OAAO,EAAE;MAAE,cAAc,EAAE;IAAmB,CAAC;IAC/CP,IAAI,EAAEQ,IAAI,CAACC,SAAS,CAACT,IAAI;EAC3B,CAAC,CAAC;EAEF,MAAMU,IAAI,GAAG,MAAML,QAAQ,CAACK,IAAI,CAAC,CAAC;EAClC,IAAIA,IAAI,CAACC,KAAK,EAAE,MAAM,IAAIC,KAAK,CAACF,IAAI,CAACC,KAAK,CAACE,OAAO,CAAC;EAEnD,OAAOC,MAAM,CAACJ,IAAI,CAACK,MAAM,CAAC,CAAC,CAAC;AAC9B"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { EVMAdapter, type AppKitNetwork, type CaipAddress, type ChainNamespace, type GetBalanceParams, type GetBalanceResponse } from '@reown/appkit-common-react-native';
|
|
2
|
-
export declare class EthersAdapter extends EVMAdapter {
|
|
3
|
-
private static supportedNamespace;
|
|
4
|
-
constructor(configParams: {
|
|
5
|
-
projectId: string;
|
|
6
|
-
});
|
|
7
|
-
getBalance(params: GetBalanceParams): Promise<GetBalanceResponse>;
|
|
8
|
-
switchNetwork(network: AppKitNetwork): Promise<void>;
|
|
9
|
-
getAccounts(): CaipAddress[] | undefined;
|
|
10
|
-
disconnect(): Promise<void>;
|
|
11
|
-
getSupportedNamespace(): ChainNamespace;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAI3C,qBAAa,aAAc,SAAQ,UAAU;IAC3C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;gBAEjD,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAOzC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoCjE,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1D,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAOxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,qBAAqB,IAAI,cAAc;CAGxC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,MAEzC,CAAC;AAGF,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBpF"}
|
package/src/adapter.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
EVMAdapter,
|
|
3
|
-
type AppKitNetwork,
|
|
4
|
-
type CaipAddress,
|
|
5
|
-
type ChainNamespace,
|
|
6
|
-
type GetBalanceParams,
|
|
7
|
-
type GetBalanceResponse
|
|
8
|
-
} from '@reown/appkit-common-react-native';
|
|
9
|
-
import { EthersHelpersUtil } from '@reown/appkit-scaffold-utils-react-native';
|
|
10
|
-
import { formatEther, getEthBalance } from './helpers';
|
|
11
|
-
|
|
12
|
-
export class EthersAdapter extends EVMAdapter {
|
|
13
|
-
private static supportedNamespace: ChainNamespace = 'eip155';
|
|
14
|
-
|
|
15
|
-
constructor(configParams: { projectId: string }) {
|
|
16
|
-
super({
|
|
17
|
-
projectId: configParams.projectId,
|
|
18
|
-
supportedNamespace: EthersAdapter.supportedNamespace
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async getBalance(params: GetBalanceParams): Promise<GetBalanceResponse> {
|
|
23
|
-
const { network, address } = params;
|
|
24
|
-
|
|
25
|
-
if (!this.connector) throw new Error('No active connector');
|
|
26
|
-
if (!network) throw new Error('No network provided');
|
|
27
|
-
|
|
28
|
-
const balanceAddress =
|
|
29
|
-
address || this.getAccounts()?.find(account => account.includes(network.id.toString()));
|
|
30
|
-
|
|
31
|
-
const balance: GetBalanceResponse = {
|
|
32
|
-
amount: '0.00',
|
|
33
|
-
symbol: network.nativeCurrency.symbol || 'ETH'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
if (!balanceAddress) return balance;
|
|
37
|
-
|
|
38
|
-
const account = balanceAddress.split(':')[2];
|
|
39
|
-
const rpcUrl = network.rpcUrls.default.http?.[0];
|
|
40
|
-
if (!rpcUrl || !account) return balance;
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
const wei = await getEthBalance(rpcUrl, account);
|
|
44
|
-
balance.amount = formatEther(wei);
|
|
45
|
-
|
|
46
|
-
this.emit('balanceChanged', {
|
|
47
|
-
namespace: this.getSupportedNamespace(),
|
|
48
|
-
address: balanceAddress,
|
|
49
|
-
balance
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
return balance;
|
|
53
|
-
} catch {
|
|
54
|
-
return balance;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async switchNetwork(network: AppKitNetwork): Promise<void> {
|
|
59
|
-
if (!this.connector) throw new Error('No active connector');
|
|
60
|
-
|
|
61
|
-
const provider = this.connector.getProvider();
|
|
62
|
-
if (!provider) throw new Error('No active provider');
|
|
63
|
-
|
|
64
|
-
try {
|
|
65
|
-
await provider.request(
|
|
66
|
-
{
|
|
67
|
-
method: 'wallet_switchEthereumChain',
|
|
68
|
-
params: [{ chainId: EthersHelpersUtil.numberToHexString(Number(network.id)) }] //TODO: check util
|
|
69
|
-
},
|
|
70
|
-
`${EthersAdapter.supportedNamespace}:${network.id}`
|
|
71
|
-
);
|
|
72
|
-
} catch (switchError: any) {
|
|
73
|
-
const message = switchError?.message as string;
|
|
74
|
-
if (/(?<temp1>user rejected)/u.test(message?.toLowerCase())) {
|
|
75
|
-
throw new Error('Chain is not supported');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
throw switchError;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
getAccounts(): CaipAddress[] | undefined {
|
|
83
|
-
if (!this.connector) throw new Error('No active connector');
|
|
84
|
-
const namespaces = this.connector.getNamespaces();
|
|
85
|
-
|
|
86
|
-
return namespaces[this.getSupportedNamespace()]?.accounts;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
disconnect(): Promise<void> {
|
|
90
|
-
if (!this.connector) throw new Error('EthersAdapter:disconnect - No active connector');
|
|
91
|
-
|
|
92
|
-
return this.connector.disconnect();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
getSupportedNamespace(): ChainNamespace {
|
|
96
|
-
return EthersAdapter.supportedNamespace;
|
|
97
|
-
}
|
|
98
|
-
}
|
package/src/helpers.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// Helper to convert Wei (as string or bigint) to ETH
|
|
2
|
-
export const formatEther = (wei: bigint): string => {
|
|
3
|
-
return (Number(wei) / 1e18).toString();
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
// Raw JSON-RPC for balance lookup
|
|
7
|
-
export async function getEthBalance(rpcUrl: string, address: string): Promise<bigint> {
|
|
8
|
-
const body = {
|
|
9
|
-
jsonrpc: '2.0',
|
|
10
|
-
method: 'eth_getBalance',
|
|
11
|
-
params: [address, 'latest'],
|
|
12
|
-
id: 1
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const response = await fetch(rpcUrl, {
|
|
16
|
-
method: 'POST',
|
|
17
|
-
headers: { 'Content-Type': 'application/json' },
|
|
18
|
-
body: JSON.stringify(body)
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const json = await response.json();
|
|
22
|
-
if (json.error) throw new Error(json.error.message);
|
|
23
|
-
|
|
24
|
-
return BigInt(json.result); // result is hex string
|
|
25
|
-
}
|