@reown/appkit-adapter-bitcoin 1.6.6 → 1.6.7-basic-test.7.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.
Files changed (39) hide show
  1. package/dist/esm/tests/BitcoinAdapter.test.js +411 -0
  2. package/dist/esm/tests/BitcoinAdapter.test.js.map +1 -0
  3. package/dist/esm/tests/connectors/LeatherConnector.test.js +138 -0
  4. package/dist/esm/tests/connectors/LeatherConnector.test.js.map +1 -0
  5. package/dist/esm/tests/connectors/OKXConnector.test.js +172 -0
  6. package/dist/esm/tests/connectors/OKXConnector.test.js.map +1 -0
  7. package/dist/esm/tests/connectors/SatsConnectConnector.test.js +249 -0
  8. package/dist/esm/tests/connectors/SatsConnectConnector.test.js.map +1 -0
  9. package/dist/esm/tests/connectors/WalletStandardConnector.test.js +297 -0
  10. package/dist/esm/tests/connectors/WalletStandardConnector.test.js.map +1 -0
  11. package/dist/esm/tests/mocks/mockSatsConnect.js +60 -0
  12. package/dist/esm/tests/mocks/mockSatsConnect.js.map +1 -0
  13. package/dist/esm/tests/mocks/mockUTXO.js +15 -0
  14. package/dist/esm/tests/mocks/mockUTXO.js.map +1 -0
  15. package/dist/esm/tests/mocks/mockUniversalProvider.js +64 -0
  16. package/dist/esm/tests/mocks/mockUniversalProvider.js.map +1 -0
  17. package/dist/esm/tests/mocks/mockWalletStandard.js +47 -0
  18. package/dist/esm/tests/mocks/mockWalletStandard.js.map +1 -0
  19. package/dist/esm/tests/utils/BitcoinApi.test.js +48 -0
  20. package/dist/esm/tests/utils/BitcoinApi.test.js.map +1 -0
  21. package/dist/esm/tests/utils/UnitsUtils.test.js +21 -0
  22. package/dist/esm/tests/utils/UnitsUtils.test.js.map +1 -0
  23. package/dist/esm/tests/utils/WalletConnectProvider.test.js +275 -0
  24. package/dist/esm/tests/utils/WalletConnectProvider.test.js.map +1 -0
  25. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  26. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  27. package/dist/types/tests/BitcoinAdapter.test.d.ts +1 -0
  28. package/dist/types/tests/connectors/LeatherConnector.test.d.ts +1 -0
  29. package/dist/types/tests/connectors/OKXConnector.test.d.ts +1 -0
  30. package/dist/types/tests/connectors/SatsConnectConnector.test.d.ts +1 -0
  31. package/dist/types/tests/connectors/WalletStandardConnector.test.d.ts +1 -0
  32. package/dist/types/tests/mocks/mockSatsConnect.d.ts +27 -0
  33. package/dist/types/tests/mocks/mockUTXO.d.ts +2 -0
  34. package/dist/types/tests/mocks/mockUniversalProvider.d.ts +6 -0
  35. package/dist/types/tests/mocks/mockWalletStandard.d.ts +7 -0
  36. package/dist/types/tests/utils/BitcoinApi.test.d.ts +1 -0
  37. package/dist/types/tests/utils/UnitsUtils.test.d.ts +1 -0
  38. package/dist/types/tests/utils/WalletConnectProvider.test.d.ts +1 -0
  39. package/package.json +5 -4
@@ -0,0 +1,275 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { ConstantsUtil } from '@reown/appkit-common';
3
+ import { bitcoin, bitcoinTestnet } from '@reown/appkit/networks';
4
+ import { BitcoinWalletConnectConnector } from '../../src/connectors/BitcoinWalletConnectProvider';
5
+ import { mockUniversalProvider } from '../mocks/mockUniversalProvider';
6
+ describe('LeatherConnector', () => {
7
+ let requestedChains;
8
+ let provider;
9
+ let getActiveChain;
10
+ let universalProvider;
11
+ beforeEach(() => {
12
+ requestedChains = [bitcoin, bitcoinTestnet];
13
+ universalProvider = mockUniversalProvider();
14
+ getActiveChain = vi.fn(() => bitcoin);
15
+ provider = new BitcoinWalletConnectConnector({
16
+ provider: universalProvider,
17
+ chains: requestedChains,
18
+ getActiveChain: getActiveChain
19
+ });
20
+ });
21
+ it('should validate the metadata', async () => {
22
+ expect(provider.chain).toBe('bip122');
23
+ expect(provider.type).toBe('WALLET_CONNECT');
24
+ expect(provider.id).toBe(ConstantsUtil.CONNECTOR_ID.WALLET_CONNECT);
25
+ expect(provider.name).toBe('WalletConnect');
26
+ });
27
+ it('should return the chains filtered by the requested chains', async () => {
28
+ universalProvider.session = mockUniversalProvider.mockSession({
29
+ namespaces: {
30
+ bip122: {
31
+ accounts: [`${bitcoin.caipNetworkId}:address`],
32
+ events: [],
33
+ methods: []
34
+ },
35
+ eip155: {
36
+ accounts: [`eip155:1:evm_address`],
37
+ events: [],
38
+ methods: []
39
+ }
40
+ }
41
+ });
42
+ expect(provider.chains).toEqual([bitcoin]);
43
+ });
44
+ describe('connect', () => {
45
+ it('should reject the connection', async () => {
46
+ await expect(provider.connect()).rejects.toThrow('Connection of WalletConnectProvider should be done via UniversalAdapter');
47
+ });
48
+ });
49
+ describe('disconnect', () => {
50
+ it('should disconnect the provider', async () => {
51
+ await provider.disconnect();
52
+ expect(universalProvider.disconnect).toHaveBeenCalled();
53
+ });
54
+ });
55
+ describe('signMessage', () => {
56
+ beforeEach(() => {
57
+ universalProvider.session = mockUniversalProvider.mockSession();
58
+ });
59
+ it('should sign the message and parse response', async () => {
60
+ const requestSpy = vi.spyOn(universalProvider, 'request');
61
+ requestSpy.mockResolvedValueOnce({
62
+ signature: '6d6f636b5f7369676e6174757265'
63
+ });
64
+ const result = await provider.signMessage({
65
+ message: 'mock_message',
66
+ address: 'mock_address'
67
+ });
68
+ expect(requestSpy).toHaveBeenCalledWith({
69
+ method: 'signMessage',
70
+ params: {
71
+ message: 'mock_message',
72
+ account: 'mock_address',
73
+ address: 'mock_address'
74
+ }
75
+ }, bitcoin.caipNetworkId);
76
+ expect(result).toBe('bW9ja19zaWduYXR1cmU=');
77
+ });
78
+ it('should throw an error if the method is not supported', async () => {
79
+ universalProvider.session = mockUniversalProvider.mockSession({
80
+ namespaces: {
81
+ bip122: {
82
+ accounts: [`${bitcoin.caipNetworkId}:address`],
83
+ events: [],
84
+ methods: []
85
+ }
86
+ }
87
+ });
88
+ await expect(provider.signMessage({ message: 'mock_message', address: 'mock_address' })).rejects.toThrow('Method signMessage is not supported');
89
+ });
90
+ });
91
+ describe('sendTransfer', () => {
92
+ beforeEach(() => {
93
+ universalProvider.session = mockUniversalProvider.mockSession();
94
+ });
95
+ it('should send the transfer and parse response', async () => {
96
+ const requestSpy = vi.spyOn(universalProvider, 'request');
97
+ requestSpy.mockResolvedValueOnce({ txid: 'mock_txid' });
98
+ const result = await provider.sendTransfer({
99
+ recipient: 'mock_recipient',
100
+ amount: 'mock_amount'
101
+ });
102
+ expect(requestSpy).toHaveBeenCalledWith({
103
+ method: 'sendTransfer',
104
+ params: {
105
+ account: 'address',
106
+ recipientAddress: 'mock_recipient',
107
+ amount: 'mock_amount'
108
+ }
109
+ }, bitcoin.caipNetworkId);
110
+ expect(result).toBe('mock_txid');
111
+ });
112
+ it('should throw an error if the method is not supported', async () => {
113
+ universalProvider.session = mockUniversalProvider.mockSession({
114
+ namespaces: {
115
+ bip122: {
116
+ accounts: [`${bitcoin.caipNetworkId}:address`],
117
+ events: [],
118
+ methods: []
119
+ }
120
+ }
121
+ });
122
+ await expect(provider.sendTransfer({ recipient: 'mock_recipient', amount: 'mock_amount' })).rejects.toThrow('Method sendTransfer is not supported');
123
+ });
124
+ it('should throw an error if the account is not found', async () => {
125
+ universalProvider.session = mockUniversalProvider.mockSession({
126
+ namespaces: {
127
+ bip122: {
128
+ accounts: [],
129
+ events: [],
130
+ methods: ['sendTransfer']
131
+ }
132
+ }
133
+ });
134
+ await expect(provider.sendTransfer({ recipient: 'mock_recipient', amount: 'mock_amount' })).rejects.toThrow('Account not found');
135
+ });
136
+ it('should throw an error if account is malformed', async () => {
137
+ universalProvider.session = mockUniversalProvider.mockSession({
138
+ namespaces: {
139
+ bip122: {
140
+ accounts: ['address'],
141
+ events: [],
142
+ methods: ['sendTransfer']
143
+ }
144
+ }
145
+ });
146
+ await expect(provider.sendTransfer({ recipient: 'mock_recipient', amount: 'mock_amount' })).rejects.toThrow('Address not found');
147
+ });
148
+ });
149
+ describe('getAccountAddresses', () => {
150
+ beforeEach(() => {
151
+ universalProvider.session = mockUniversalProvider.mockSession();
152
+ });
153
+ it('should get the account addresses and parse response', async () => {
154
+ const requestSpy = vi.spyOn(universalProvider, 'request');
155
+ requestSpy.mockResolvedValueOnce(['mock_address']);
156
+ const result = await provider.getAccountAddresses();
157
+ expect(requestSpy).toHaveBeenCalledWith({
158
+ method: 'getAccountAddresses',
159
+ params: undefined
160
+ }, bitcoin.caipNetworkId);
161
+ expect(result).toEqual([{ address: 'mock_address', purpose: 'payment' }]);
162
+ });
163
+ it('should throw an error if the method is not supported', async () => {
164
+ universalProvider.session = mockUniversalProvider.mockSession({
165
+ namespaces: {
166
+ bip122: {
167
+ accounts: [`${bitcoin.caipNetworkId}:address`],
168
+ events: [],
169
+ methods: []
170
+ }
171
+ }
172
+ });
173
+ await expect(provider.getAccountAddresses()).rejects.toThrow('Method getAccountAddresses is not supported');
174
+ });
175
+ });
176
+ describe('signPSBT', () => {
177
+ beforeEach(() => {
178
+ universalProvider.session = mockUniversalProvider.mockSession();
179
+ });
180
+ it('should sign the PSBT and parse response', async () => {
181
+ const requestSpy = vi.spyOn(universalProvider, 'request');
182
+ requestSpy.mockResolvedValueOnce({ psbt: 'mock_psbt', txid: 'mock_txid' });
183
+ const result = await provider.signPSBT({
184
+ psbt: 'mock_psbt',
185
+ signInputs: [],
186
+ broadcast: true
187
+ });
188
+ expect(requestSpy).toHaveBeenCalledWith({
189
+ method: 'signPsbt',
190
+ params: {
191
+ account: 'address',
192
+ psbt: 'mock_psbt',
193
+ signInputs: [],
194
+ broadcast: true
195
+ }
196
+ }, bitcoin.caipNetworkId);
197
+ expect(result).toEqual({ psbt: 'mock_psbt', txid: 'mock_txid' });
198
+ });
199
+ it('should throw an error if the method is not supported', async () => {
200
+ universalProvider.session = mockUniversalProvider.mockSession({
201
+ namespaces: {
202
+ bip122: {
203
+ accounts: [`${bitcoin.caipNetworkId}:address`],
204
+ events: [],
205
+ methods: []
206
+ }
207
+ }
208
+ });
209
+ await expect(provider.signPSBT({ psbt: 'mock_psbt', signInputs: [], broadcast: true })).rejects.toThrow('Method signPsbt is not supported');
210
+ });
211
+ it('should throw an error if the account is not found', async () => {
212
+ universalProvider.session = mockUniversalProvider.mockSession({
213
+ namespaces: {
214
+ bip122: {
215
+ accounts: [],
216
+ events: [],
217
+ methods: ['signPsbt']
218
+ }
219
+ }
220
+ });
221
+ await expect(provider.signPSBT({ psbt: 'mock_psbt', signInputs: [], broadcast: true })).rejects.toThrow('Account not found');
222
+ });
223
+ });
224
+ describe('request', () => {
225
+ it('should forward request to the universal provider', async () => {
226
+ const requestSpy = vi.spyOn(universalProvider, 'request');
227
+ requestSpy.mockResolvedValueOnce({ result: 'mock_result' });
228
+ const result = await provider.request({ method: 'mock_method', params: {} });
229
+ expect(requestSpy).toHaveBeenCalledWith({ method: 'mock_method', params: {} }, bitcoin.caipNetworkId);
230
+ expect(result).toEqual({ result: 'mock_result' });
231
+ });
232
+ it('should throw if there is no active chain', async () => {
233
+ getActiveChain.mockReturnValueOnce(undefined);
234
+ await expect(provider.request({ method: 'mock_method', params: {} })).rejects.toThrow('Chain not found');
235
+ });
236
+ });
237
+ describe('getAccount', () => {
238
+ /**
239
+ * These tests are to verify `getAccount` method without the `required` parameter.
240
+ * As `getAccount` is private method, these tests should be removed when there is a
241
+ * call to this method internally without the `required` parameter and the method
242
+ * should be tested through public methods that call it.
243
+ **/
244
+ it('should return the account address', () => {
245
+ universalProvider.session = mockUniversalProvider.mockSession();
246
+ const result = provider.getAccount();
247
+ expect(result).toBe('address');
248
+ });
249
+ it('should throw an error if the account is not found', () => {
250
+ universalProvider.session = mockUniversalProvider.mockSession({
251
+ namespaces: {
252
+ bip122: {
253
+ accounts: [],
254
+ events: [],
255
+ methods: []
256
+ }
257
+ }
258
+ });
259
+ expect(provider.getAccount()).toBeUndefined();
260
+ });
261
+ it('should throw an error if the account is malformed', () => {
262
+ universalProvider.session = mockUniversalProvider.mockSession({
263
+ namespaces: {
264
+ bip122: {
265
+ accounts: ['address'],
266
+ events: [],
267
+ methods: []
268
+ }
269
+ }
270
+ });
271
+ expect(provider.getAccount()).toBeUndefined();
272
+ });
273
+ });
274
+ });
275
+ //# sourceMappingURL=WalletConnectProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletConnectProvider.test.js","sourceRoot":"","sources":["../../../../tests/utils/WalletConnectProvider.test.ts"],"names":[],"mappings":"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"}