@reown/appkit-adapter-ethers 1.6.9 → 1.7.0-alpha.0
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/dist/esm/src/tests/EthersMethods.test.js +313 -0
- package/dist/esm/src/tests/EthersMethods.test.js.map +1 -0
- package/dist/esm/src/tests/client.test.js +515 -0
- package/dist/esm/src/tests/client.test.js.map +1 -0
- package/dist/esm/src/tests/mocks/AppKit.js +69 -0
- package/dist/esm/src/tests/mocks/AppKit.js.map +1 -0
- package/dist/esm/src/tests/mocks/AuthConnector.js +36 -0
- package/dist/esm/src/tests/mocks/AuthConnector.js.map +1 -0
- package/dist/esm/src/tests/mocks/EthersConfig.js +29 -0
- package/dist/esm/src/tests/mocks/EthersConfig.js.map +1 -0
- package/dist/esm/src/tests/mocks/Options.js +17 -0
- package/dist/esm/src/tests/mocks/Options.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/types/src/tests/EthersMethods.test.d.ts +1 -0
- package/dist/types/src/tests/client.test.d.ts +1 -0
- package/dist/types/src/tests/mocks/AppKit.d.ts +3 -0
- package/dist/types/src/tests/mocks/AuthConnector.d.ts +20 -0
- package/dist/types/src/tests/mocks/EthersConfig.d.ts +3 -0
- package/dist/types/src/tests/mocks/Options.d.ts +3 -0
- package/package.json +21 -10
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { BrowserProvider, Contract, InfuraProvider, JsonRpcSigner, hexlify, isHexString, toUtf8Bytes } from 'ethers';
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { WcHelpersUtil } from '@reown/appkit';
|
|
4
|
+
import { isReownName } from '@reown/appkit-common';
|
|
5
|
+
import { EthersMethods } from '../utils/EthersMethods';
|
|
6
|
+
vi.mock('ethers', async () => {
|
|
7
|
+
const actual = await vi.importActual('ethers');
|
|
8
|
+
return {
|
|
9
|
+
...actual,
|
|
10
|
+
BrowserProvider: vi.fn(),
|
|
11
|
+
Contract: vi.fn(),
|
|
12
|
+
InfuraProvider: vi.fn(),
|
|
13
|
+
JsonRpcSigner: vi.fn(),
|
|
14
|
+
hexlify: vi.fn(() => '0xmockedhex'),
|
|
15
|
+
isHexString: vi.fn(),
|
|
16
|
+
toUtf8Bytes: vi.fn(() => 'mockedBytes'),
|
|
17
|
+
parseUnits: actual['parseUnits'],
|
|
18
|
+
formatUnits: actual['formatUnits']
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
vi.mock('@reown/appkit', () => ({
|
|
22
|
+
WcHelpersUtil: {
|
|
23
|
+
resolveReownName: vi.fn()
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
vi.mock('@reown/appkit-common', () => ({
|
|
27
|
+
isReownName: vi.fn()
|
|
28
|
+
}));
|
|
29
|
+
describe('EthersMethods', () => {
|
|
30
|
+
const mockProvider = {
|
|
31
|
+
request: vi.fn()
|
|
32
|
+
};
|
|
33
|
+
const mockTxResponse = {
|
|
34
|
+
wait: vi.fn()
|
|
35
|
+
};
|
|
36
|
+
const mockSigner = {
|
|
37
|
+
estimateGas: vi.fn(),
|
|
38
|
+
sendTransaction: vi.fn()
|
|
39
|
+
};
|
|
40
|
+
const mockContract = {};
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
vi.resetAllMocks();
|
|
43
|
+
mockProvider.request.mockResolvedValue('0xsignature');
|
|
44
|
+
mockTxResponse.wait.mockResolvedValue({ hash: '0xtxhash' });
|
|
45
|
+
mockSigner.estimateGas.mockResolvedValue(BigInt(21000));
|
|
46
|
+
mockSigner.sendTransaction.mockResolvedValue(mockTxResponse);
|
|
47
|
+
BrowserProvider.mockImplementation(() => ({
|
|
48
|
+
getSigner: vi.fn()
|
|
49
|
+
}));
|
|
50
|
+
JsonRpcSigner.mockImplementation(() => mockSigner);
|
|
51
|
+
InfuraProvider.mockImplementation(() => ({
|
|
52
|
+
resolveName: vi.fn().mockResolvedValue('0xmockaddress'),
|
|
53
|
+
getAvatar: vi.fn().mockResolvedValue('https://example.com/avatar.png')
|
|
54
|
+
}));
|
|
55
|
+
});
|
|
56
|
+
afterEach(() => {
|
|
57
|
+
vi.clearAllMocks();
|
|
58
|
+
});
|
|
59
|
+
describe('signMessage', () => {
|
|
60
|
+
it('should sign a message using personal_sign', async () => {
|
|
61
|
+
const message = 'Hello, world!';
|
|
62
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
63
|
+
const expectedSignature = '0xsignature';
|
|
64
|
+
vi.mocked(isHexString).mockReturnValue(true);
|
|
65
|
+
const result = await EthersMethods.signMessage(message, mockProvider, address);
|
|
66
|
+
expect(isHexString).toHaveBeenCalledWith(message);
|
|
67
|
+
expect(mockProvider.request).toHaveBeenCalledWith({
|
|
68
|
+
method: 'personal_sign',
|
|
69
|
+
params: [message, address]
|
|
70
|
+
});
|
|
71
|
+
expect(result).toBe(expectedSignature);
|
|
72
|
+
});
|
|
73
|
+
it('should handle hex messages correctly', async () => {
|
|
74
|
+
const hexMessage = '0x48656c6c6f2c20776f726c6421';
|
|
75
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
76
|
+
vi.mocked(isHexString).mockReturnValue(true);
|
|
77
|
+
await EthersMethods.signMessage(hexMessage, mockProvider, address);
|
|
78
|
+
expect(isHexString).toHaveBeenCalledWith(hexMessage);
|
|
79
|
+
expect(toUtf8Bytes).not.toHaveBeenCalled();
|
|
80
|
+
expect(hexlify).not.toHaveBeenCalled();
|
|
81
|
+
expect(mockProvider.request).toHaveBeenCalledWith({
|
|
82
|
+
method: 'personal_sign',
|
|
83
|
+
params: [hexMessage, address]
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('should throw an error if provider is undefined', async () => {
|
|
87
|
+
const message = 'Hello, world!';
|
|
88
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
89
|
+
await expect(EthersMethods.signMessage(message, undefined, address)).rejects.toThrow('signMessage - provider is undefined');
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('estimateGas', () => {
|
|
93
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
94
|
+
const networkId = 1;
|
|
95
|
+
const transactionData = {
|
|
96
|
+
address,
|
|
97
|
+
to: '0x0987654321098765432109876543210987654321',
|
|
98
|
+
data: '0xdata',
|
|
99
|
+
chainNamespace: 'eip155'
|
|
100
|
+
};
|
|
101
|
+
it('should estimate gas for a transaction', async () => {
|
|
102
|
+
const expectedGas = BigInt(21000);
|
|
103
|
+
const result = await EthersMethods.estimateGas(transactionData, mockProvider, address, networkId);
|
|
104
|
+
expect(BrowserProvider).toHaveBeenCalledWith(mockProvider, networkId);
|
|
105
|
+
expect(JsonRpcSigner).toHaveBeenCalled();
|
|
106
|
+
expect(mockSigner.estimateGas).toHaveBeenCalledWith({
|
|
107
|
+
from: address,
|
|
108
|
+
to: transactionData.to,
|
|
109
|
+
data: transactionData.data,
|
|
110
|
+
type: 0
|
|
111
|
+
});
|
|
112
|
+
expect(result).toBe(expectedGas);
|
|
113
|
+
});
|
|
114
|
+
it('should throw an error if provider is undefined', async () => {
|
|
115
|
+
await expect(EthersMethods.estimateGas(transactionData, undefined, address, networkId)).rejects.toThrow('estimateGas - provider is undefined');
|
|
116
|
+
});
|
|
117
|
+
it('should throw an error if address is undefined', async () => {
|
|
118
|
+
await expect(EthersMethods.estimateGas(transactionData, mockProvider, '', networkId)).rejects.toThrow('estimateGas - address is undefined');
|
|
119
|
+
});
|
|
120
|
+
it('should throw an error if chainNamespace is not eip155', async () => {
|
|
121
|
+
const invalidData = {
|
|
122
|
+
...transactionData,
|
|
123
|
+
chainNamespace: 'solana'
|
|
124
|
+
};
|
|
125
|
+
await expect(EthersMethods.estimateGas(invalidData, mockProvider, address, networkId)).rejects.toThrow('estimateGas - chainNamespace is not eip155');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('sendTransaction', () => {
|
|
129
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
130
|
+
const networkId = 1;
|
|
131
|
+
const transactionData = {
|
|
132
|
+
to: '0x0987654321098765432109876543210987654321',
|
|
133
|
+
value: '0x123',
|
|
134
|
+
gas: '0x5208',
|
|
135
|
+
gasPrice: '0x4a817c800',
|
|
136
|
+
data: '0xdata',
|
|
137
|
+
chainNamespace: 'eip155'
|
|
138
|
+
};
|
|
139
|
+
it('should send a transaction and return the transaction hash', async () => {
|
|
140
|
+
const expectedHash = '0xtxhash';
|
|
141
|
+
const result = await EthersMethods.sendTransaction(transactionData, mockProvider, address, networkId);
|
|
142
|
+
expect(BrowserProvider).toHaveBeenCalledWith(mockProvider, networkId);
|
|
143
|
+
expect(JsonRpcSigner).toHaveBeenCalled();
|
|
144
|
+
expect(mockSigner.sendTransaction).toHaveBeenCalledWith({
|
|
145
|
+
to: transactionData.to,
|
|
146
|
+
value: transactionData.value,
|
|
147
|
+
gasLimit: transactionData.gas,
|
|
148
|
+
gasPrice: transactionData.gasPrice,
|
|
149
|
+
data: transactionData.data,
|
|
150
|
+
type: 0
|
|
151
|
+
});
|
|
152
|
+
expect(mockTxResponse.wait).toHaveBeenCalled();
|
|
153
|
+
expect(result).toBe(expectedHash);
|
|
154
|
+
});
|
|
155
|
+
it('should return null if transaction receipt has no hash', async () => {
|
|
156
|
+
mockTxResponse.wait.mockResolvedValue({});
|
|
157
|
+
const result = await EthersMethods.sendTransaction(transactionData, mockProvider, address, networkId);
|
|
158
|
+
expect(result).toBeNull();
|
|
159
|
+
});
|
|
160
|
+
it('should throw an error if provider is undefined', async () => {
|
|
161
|
+
await expect(EthersMethods.sendTransaction(transactionData, undefined, address, networkId)).rejects.toThrow('sendTransaction - provider is undefined');
|
|
162
|
+
});
|
|
163
|
+
it('should throw an error if address is undefined', async () => {
|
|
164
|
+
await expect(EthersMethods.sendTransaction(transactionData, mockProvider, '', networkId)).rejects.toThrow('sendTransaction - address is undefined');
|
|
165
|
+
});
|
|
166
|
+
it('should throw an error if chainNamespace is not eip155', async () => {
|
|
167
|
+
const invalidData = {
|
|
168
|
+
...transactionData,
|
|
169
|
+
chainNamespace: 'solana'
|
|
170
|
+
};
|
|
171
|
+
await expect(EthersMethods.sendTransaction(invalidData, mockProvider, address, networkId)).rejects.toThrow('sendTransaction - chainNamespace is not eip155');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('writeContract', () => {
|
|
175
|
+
const address = '0x1234567890123456789012345678901234567890';
|
|
176
|
+
const chainId = 1;
|
|
177
|
+
const contractData = {
|
|
178
|
+
tokenAddress: '0xcontractAddress',
|
|
179
|
+
abi: ['function transfer(address to, uint256 amount)'],
|
|
180
|
+
method: 'transfer',
|
|
181
|
+
args: ['0xrecipient', '1000000000000000000']
|
|
182
|
+
};
|
|
183
|
+
it('should execute a contract method successfully', async () => {
|
|
184
|
+
const expectedResult = { hash: '0xtxhash' };
|
|
185
|
+
const mockTransfer = vi.fn().mockResolvedValue(expectedResult);
|
|
186
|
+
Object.assign(mockContract, { transfer: mockTransfer });
|
|
187
|
+
Contract.mockImplementation(() => mockContract);
|
|
188
|
+
const result = await EthersMethods.writeContract(contractData, mockProvider, address, chainId);
|
|
189
|
+
expect(BrowserProvider).toHaveBeenCalledWith(mockProvider, chainId);
|
|
190
|
+
expect(JsonRpcSigner).toHaveBeenCalled();
|
|
191
|
+
expect(Contract).toHaveBeenCalledWith(contractData.tokenAddress, contractData.abi, mockSigner);
|
|
192
|
+
expect(mockTransfer).toHaveBeenCalledWith(...contractData.args);
|
|
193
|
+
expect(result).toEqual(expectedResult);
|
|
194
|
+
});
|
|
195
|
+
it('should throw an error if provider is undefined', async () => {
|
|
196
|
+
await expect(EthersMethods.writeContract(contractData, undefined, address, chainId)).rejects.toThrow('writeContract - provider is undefined');
|
|
197
|
+
});
|
|
198
|
+
it('should throw an error if address is undefined', async () => {
|
|
199
|
+
await expect(EthersMethods.writeContract(contractData, mockProvider, '', chainId)).rejects.toThrow('writeContract - address is undefined');
|
|
200
|
+
});
|
|
201
|
+
it('should throw an error if contract method is undefined', async () => {
|
|
202
|
+
const invalidData = {
|
|
203
|
+
...contractData,
|
|
204
|
+
method: undefined
|
|
205
|
+
};
|
|
206
|
+
Contract.mockImplementation(() => ({}));
|
|
207
|
+
await expect(EthersMethods.writeContract(invalidData, mockProvider, address, chainId)).rejects.toThrow('Contract method is undefined');
|
|
208
|
+
});
|
|
209
|
+
it('should throw if the method does not exist on the contract', async () => {
|
|
210
|
+
const invalidMethodData = {
|
|
211
|
+
...contractData,
|
|
212
|
+
method: 'nonExistentMethod'
|
|
213
|
+
};
|
|
214
|
+
Contract.mockImplementation(() => ({}));
|
|
215
|
+
await expect(EthersMethods.writeContract(invalidMethodData, mockProvider, address, chainId)).rejects.toThrow('Contract method is undefined');
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('getEnsAddress', () => {
|
|
219
|
+
const caipNetwork = { id: '1' };
|
|
220
|
+
it('should resolve an ENS name on mainnet', async () => {
|
|
221
|
+
const ensName = 'vitalik.eth';
|
|
222
|
+
const resolvedAddress = '0xmockaddress';
|
|
223
|
+
vi.mocked(isReownName).mockReturnValue(false);
|
|
224
|
+
const mockResolveName = vi.fn().mockResolvedValue(resolvedAddress);
|
|
225
|
+
InfuraProvider.mockImplementation(() => ({
|
|
226
|
+
resolveName: mockResolveName
|
|
227
|
+
}));
|
|
228
|
+
const result = await EthersMethods.getEnsAddress(ensName, caipNetwork);
|
|
229
|
+
expect(isReownName).toHaveBeenCalledWith(ensName);
|
|
230
|
+
expect(InfuraProvider).toHaveBeenCalledWith('mainnet');
|
|
231
|
+
expect(mockResolveName).toHaveBeenCalledWith(ensName);
|
|
232
|
+
expect(result).toBe(resolvedAddress);
|
|
233
|
+
});
|
|
234
|
+
it('should resolve a ReownName if available', async () => {
|
|
235
|
+
const wcName = 'user.reown';
|
|
236
|
+
const resolvedAddress = '0xwcaddress';
|
|
237
|
+
vi.mocked(isReownName).mockReturnValue(true);
|
|
238
|
+
vi.spyOn(WcHelpersUtil, 'resolveReownName').mockResolvedValue(resolvedAddress);
|
|
239
|
+
const mockResolveName = vi.fn().mockResolvedValue(null);
|
|
240
|
+
InfuraProvider.mockImplementation(() => ({
|
|
241
|
+
resolveName: mockResolveName
|
|
242
|
+
}));
|
|
243
|
+
const result = await EthersMethods.getEnsAddress(wcName, caipNetwork);
|
|
244
|
+
expect(isReownName).toHaveBeenCalledWith(wcName);
|
|
245
|
+
expect(WcHelpersUtil.resolveReownName).toHaveBeenCalledWith(wcName);
|
|
246
|
+
expect(result).toBe(resolvedAddress);
|
|
247
|
+
});
|
|
248
|
+
it('should return false if neither ENS nor ReownName resolves', async () => {
|
|
249
|
+
const invalidName = 'nonexistent.xyz';
|
|
250
|
+
vi.mocked(isReownName).mockReturnValue(false);
|
|
251
|
+
const mockResolveName = vi.fn().mockResolvedValue(null);
|
|
252
|
+
InfuraProvider.mockImplementation(() => ({
|
|
253
|
+
resolveName: mockResolveName
|
|
254
|
+
}));
|
|
255
|
+
const result = await EthersMethods.getEnsAddress(invalidName, caipNetwork);
|
|
256
|
+
expect(result).toBe(false);
|
|
257
|
+
});
|
|
258
|
+
it('should return false if there is an error', async () => {
|
|
259
|
+
const ensName = 'vitalik.eth';
|
|
260
|
+
vi.mocked(isReownName).mockReturnValue(false);
|
|
261
|
+
InfuraProvider.mockImplementation(() => {
|
|
262
|
+
throw new Error('Network error');
|
|
263
|
+
});
|
|
264
|
+
const result = await EthersMethods.getEnsAddress(ensName, caipNetwork);
|
|
265
|
+
expect(result).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
describe('getEnsAvatar', () => {
|
|
269
|
+
it('should get an ENS avatar on mainnet', async () => {
|
|
270
|
+
const ensName = 'vitalik.eth';
|
|
271
|
+
const avatarUrl = 'https://example.com/avatar.png';
|
|
272
|
+
const chainId = 1;
|
|
273
|
+
const mockGetAvatar = vi.fn().mockResolvedValue(avatarUrl);
|
|
274
|
+
InfuraProvider.mockImplementation(() => ({
|
|
275
|
+
getAvatar: mockGetAvatar
|
|
276
|
+
}));
|
|
277
|
+
const result = await EthersMethods.getEnsAvatar(ensName, chainId);
|
|
278
|
+
expect(InfuraProvider).toHaveBeenCalledWith('mainnet');
|
|
279
|
+
expect(mockGetAvatar).toHaveBeenCalledWith(ensName);
|
|
280
|
+
expect(result).toBe(avatarUrl);
|
|
281
|
+
});
|
|
282
|
+
it('should return false if no avatar is found', async () => {
|
|
283
|
+
const ensName = 'vitalik.eth';
|
|
284
|
+
const chainId = 1;
|
|
285
|
+
const mockGetAvatar = vi.fn().mockResolvedValue(null);
|
|
286
|
+
InfuraProvider.mockImplementation(() => ({
|
|
287
|
+
getAvatar: mockGetAvatar
|
|
288
|
+
}));
|
|
289
|
+
const result = await EthersMethods.getEnsAvatar(ensName, chainId);
|
|
290
|
+
expect(result).toBe(false);
|
|
291
|
+
});
|
|
292
|
+
it('should return false for non-mainnet chains', async () => {
|
|
293
|
+
const ensName = 'vitalik.eth';
|
|
294
|
+
const chainId = 5;
|
|
295
|
+
const result = await EthersMethods.getEnsAvatar(ensName, chainId);
|
|
296
|
+
expect(InfuraProvider).not.toHaveBeenCalled();
|
|
297
|
+
expect(result).toBe(false);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
describe('parseWalletCapabilities', () => {
|
|
301
|
+
it('should parse valid JSON string', () => {
|
|
302
|
+
const validJson = '{"method1":true,"method2":false}';
|
|
303
|
+
const expected = { method1: true, method2: false };
|
|
304
|
+
const result = EthersMethods.parseWalletCapabilities(validJson);
|
|
305
|
+
expect(result).toEqual(expected);
|
|
306
|
+
});
|
|
307
|
+
it('should throw an error for invalid JSON', () => {
|
|
308
|
+
const invalidJson = '{method1:true,method2:false}';
|
|
309
|
+
expect(() => EthersMethods.parseWalletCapabilities(invalidJson)).toThrow('Error parsing wallet capabilities');
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
//# sourceMappingURL=EthersMethods.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EthersMethods.test.js","sourceRoot":"","sources":["../../../../src/tests/EthersMethods.test.ts"],"names":[],"mappings":"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"}
|