@reown/appkit-adapter-bitcoin 1.6.7-basic-test.8.0 → 1.6.7

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/tsconfig.build.tsbuildinfo +1 -1
  2. package/package.json +4 -5
  3. package/dist/esm/tests/BitcoinAdapter.test.js +0 -411
  4. package/dist/esm/tests/BitcoinAdapter.test.js.map +0 -1
  5. package/dist/esm/tests/connectors/LeatherConnector.test.js +0 -138
  6. package/dist/esm/tests/connectors/LeatherConnector.test.js.map +0 -1
  7. package/dist/esm/tests/connectors/OKXConnector.test.js +0 -172
  8. package/dist/esm/tests/connectors/OKXConnector.test.js.map +0 -1
  9. package/dist/esm/tests/connectors/SatsConnectConnector.test.js +0 -249
  10. package/dist/esm/tests/connectors/SatsConnectConnector.test.js.map +0 -1
  11. package/dist/esm/tests/connectors/WalletStandardConnector.test.js +0 -297
  12. package/dist/esm/tests/connectors/WalletStandardConnector.test.js.map +0 -1
  13. package/dist/esm/tests/mocks/mockSatsConnect.js +0 -60
  14. package/dist/esm/tests/mocks/mockSatsConnect.js.map +0 -1
  15. package/dist/esm/tests/mocks/mockUTXO.js +0 -15
  16. package/dist/esm/tests/mocks/mockUTXO.js.map +0 -1
  17. package/dist/esm/tests/mocks/mockUniversalProvider.js +0 -64
  18. package/dist/esm/tests/mocks/mockUniversalProvider.js.map +0 -1
  19. package/dist/esm/tests/mocks/mockWalletStandard.js +0 -47
  20. package/dist/esm/tests/mocks/mockWalletStandard.js.map +0 -1
  21. package/dist/esm/tests/utils/BitcoinApi.test.js +0 -48
  22. package/dist/esm/tests/utils/BitcoinApi.test.js.map +0 -1
  23. package/dist/esm/tests/utils/UnitsUtils.test.js +0 -21
  24. package/dist/esm/tests/utils/UnitsUtils.test.js.map +0 -1
  25. package/dist/esm/tests/utils/WalletConnectProvider.test.js +0 -275
  26. package/dist/esm/tests/utils/WalletConnectProvider.test.js.map +0 -1
  27. package/dist/esm/tsconfig.tsbuildinfo +0 -1
  28. package/dist/types/tests/BitcoinAdapter.test.d.ts +0 -1
  29. package/dist/types/tests/connectors/LeatherConnector.test.d.ts +0 -1
  30. package/dist/types/tests/connectors/OKXConnector.test.d.ts +0 -1
  31. package/dist/types/tests/connectors/SatsConnectConnector.test.d.ts +0 -1
  32. package/dist/types/tests/connectors/WalletStandardConnector.test.d.ts +0 -1
  33. package/dist/types/tests/mocks/mockSatsConnect.d.ts +0 -27
  34. package/dist/types/tests/mocks/mockUTXO.d.ts +0 -2
  35. package/dist/types/tests/mocks/mockUniversalProvider.d.ts +0 -6
  36. package/dist/types/tests/mocks/mockWalletStandard.d.ts +0 -7
  37. package/dist/types/tests/utils/BitcoinApi.test.d.ts +0 -1
  38. package/dist/types/tests/utils/UnitsUtils.test.d.ts +0 -1
  39. package/dist/types/tests/utils/WalletConnectProvider.test.d.ts +0 -1
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "@reown/appkit-adapter-bitcoin",
3
- "version": "1.6.7-basic-test.8.0",
4
- "sideEffects": false,
3
+ "version": "1.6.7",
5
4
  "type": "module",
6
5
  "main": "./dist/esm/exports/index.js",
7
6
  "types": "./dist/types/exports/index.d.ts",
@@ -23,9 +22,9 @@
23
22
  "@walletconnect/universal-provider": "2.18.0",
24
23
  "bitcoinjs-lib": "6.1.7",
25
24
  "sats-connect": "3.0.1",
26
- "@reown/appkit": "1.6.7-basic-test.8.0",
27
- "@reown/appkit-common": "1.6.7-basic-test.8.0",
28
- "@reown/appkit-core": "1.6.7-basic-test.8.0"
25
+ "@reown/appkit": "1.6.7",
26
+ "@reown/appkit-common": "1.6.7",
27
+ "@reown/appkit-core": "1.6.7"
29
28
  },
30
29
  "devDependencies": {
31
30
  "@leather.io/rpc": "2.1.21",
@@ -1,411 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { ConstantsUtil } from '@reown/appkit-common';
3
- import { bitcoin, bitcoinTestnet, mainnet } from '@reown/appkit/networks';
4
- import { BitcoinAdapter } from '../src';
5
- import { BitcoinWalletConnectConnector } from '../src/connectors/BitcoinWalletConnectProvider';
6
- import { LeatherConnector } from '../src/connectors/LeatherConnector';
7
- import { OKXConnector } from '../src/connectors/OKXConnector';
8
- import { SatsConnectConnector } from '../src/connectors/SatsConnectConnector';
9
- import { WalletStandardConnector } from '../src/connectors/WalletStandardConnector';
10
- import { mockSatsConnectProvider } from './mocks/mockSatsConnect';
11
- import { mockUTXO } from './mocks/mockUTXO';
12
- import { mockUniversalProvider } from './mocks/mockUniversalProvider';
13
- function mockBitcoinApi() {
14
- return {
15
- getUTXOs: vi.fn(async () => [])
16
- };
17
- }
18
- describe('BitcoinAdapter', () => {
19
- let adapter;
20
- let api;
21
- beforeEach(() => {
22
- api = mockBitcoinApi();
23
- adapter = new BitcoinAdapter({ api, networks: [bitcoin] });
24
- });
25
- describe('connectWalletConnect', () => {
26
- let mockWalletConnect;
27
- beforeEach(() => {
28
- mockWalletConnect = vi.mocked(new BitcoinWalletConnectConnector({
29
- provider: mockUniversalProvider(),
30
- chains: [bitcoin],
31
- getActiveChain: () => bitcoin
32
- }));
33
- adapter.connectors.push(mockWalletConnect);
34
- });
35
- it('should call connect from WALLET_CONNECT connector', async () => {
36
- await adapter.connectWalletConnect();
37
- expect(mockWalletConnect.provider.connect).toHaveBeenCalled();
38
- });
39
- it('should throw if caipNetworks is not defined', async () => {
40
- adapter = new BitcoinAdapter({ api });
41
- await expect(adapter.connectWalletConnect()).rejects.toThrow();
42
- });
43
- it('should set BitcoinWalletConnectConnector', async () => {
44
- delete adapter.caipNetworks;
45
- adapter.setUniversalProvider(mockUniversalProvider());
46
- expect(adapter.connectors[0]).toBeInstanceOf(BitcoinWalletConnectConnector);
47
- expect(adapter.connectors[0]?.chains).toEqual([]);
48
- });
49
- });
50
- describe('connect', () => {
51
- it('should return the chainId of the available chain from connector', async () => {
52
- const connector = new SatsConnectConnector({
53
- provider: mockSatsConnectProvider().provider,
54
- requestedChains: [bitcoin],
55
- getActiveNetwork: () => bitcoin
56
- });
57
- vi.spyOn(connector, 'connect').mockResolvedValueOnce('mock_address');
58
- adapter.connectors.push(connector);
59
- const result = await adapter.connect({
60
- id: connector.id,
61
- chainId: 'bitcoin:any_chain_id',
62
- provider: connector.provider,
63
- type: 'mock_type'
64
- });
65
- expect(result).toEqual({
66
- id: connector.id,
67
- type: connector.type,
68
- address: 'mock_address',
69
- chainId: bitcoin.id,
70
- provider: connector.provider
71
- });
72
- });
73
- it('should throw if connector is not found', async () => {
74
- await expect(adapter.connect({ id: 'invalid_id', type: 'invalid_type' })).rejects.toThrow();
75
- });
76
- it('should throw if chain is not found', async () => {
77
- const connector = new SatsConnectConnector({
78
- provider: mockSatsConnectProvider().provider,
79
- requestedChains: [bitcoin],
80
- getActiveNetwork: () => bitcoin
81
- });
82
- vi.spyOn(connector, 'connect').mockResolvedValueOnce('mock_address');
83
- vi.spyOn(connector, 'chains', 'get').mockReturnValue([]);
84
- adapter.connectors.push(connector);
85
- await expect(adapter.connect({ id: connector.id, type: connector.type, chainId: 'invalid_chain_id' })).rejects.toThrow();
86
- });
87
- });
88
- describe('getAccounts', () => {
89
- let connector;
90
- beforeEach(() => {
91
- connector = new SatsConnectConnector({
92
- provider: mockSatsConnectProvider().provider,
93
- requestedChains: [bitcoin],
94
- getActiveNetwork: () => bitcoin
95
- });
96
- adapter.connectors.push(connector);
97
- });
98
- it('should return the accounts', async () => {
99
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
100
- {
101
- address: 'mock_address_1',
102
- purpose: 'payment',
103
- publicKey: 'mock_public_key_1',
104
- path: 'mock_path_1'
105
- },
106
- {
107
- address: 'mock_address_2',
108
- purpose: 'ordinal',
109
- publicKey: 'mock_public_key_2',
110
- path: 'mock_path_2'
111
- },
112
- {
113
- address: 'mock_address_3',
114
- purpose: 'stx',
115
- publicKey: 'mock_public_key_3',
116
- path: 'mock_path_3'
117
- }
118
- ]);
119
- const accounts = await adapter.getAccounts({ id: connector.id });
120
- accounts.accounts.forEach(account => {
121
- expect(account.namespace).toEqual(ConstantsUtil.CHAIN.BITCOIN);
122
- expect(account.publicKey).toBeDefined();
123
- expect(account.path).toBeDefined();
124
- });
125
- });
126
- it('should return empty accounts if no addresses', async () => {
127
- const connector = new SatsConnectConnector({
128
- provider: mockSatsConnectProvider().provider,
129
- requestedChains: [bitcoin],
130
- getActiveNetwork: () => bitcoin
131
- });
132
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([]);
133
- adapter.connectors.push(connector);
134
- const accounts = await adapter.getAccounts({ id: connector.id });
135
- expect(accounts).toEqual({ accounts: [] });
136
- });
137
- it('should return empty accounts if connector is not found', async () => {
138
- const accounts = await adapter.getAccounts({ id: 'invalid_id' });
139
- expect(accounts).toEqual({ accounts: [] });
140
- });
141
- it('should return empty accounts if connector.getAccountsAddresses throws', async () => {
142
- vi.spyOn(connector, 'getAccountAddresses').mockRejectedValueOnce(new Error('mock_error'));
143
- const accounts = await adapter.getAccounts({ id: connector.id });
144
- expect(accounts).toEqual({ accounts: [] });
145
- });
146
- it('should attach payment type if purpose is not found', async () => {
147
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
148
- { address: 'mock_address' }
149
- ]);
150
- const accounts = await adapter.getAccounts({ id: connector.id });
151
- expect(accounts).toEqual({
152
- accounts: [{ address: 'mock_address', type: 'payment', namespace: 'bip122' }]
153
- });
154
- });
155
- });
156
- describe('syncConnectors', () => {
157
- it('should get wallets from all the available connectors', () => {
158
- const walletStandardConnectorSpy = vi.spyOn(WalletStandardConnector, 'watchWallets');
159
- const satsConnectConnectorSpy = vi.spyOn(SatsConnectConnector, 'getWallets');
160
- const okxConnectorSpy = vi.spyOn(OKXConnector, 'getWallet');
161
- adapter.syncConnectors(undefined, undefined);
162
- expect(walletStandardConnectorSpy).toHaveBeenCalled();
163
- expect(satsConnectConnectorSpy).toHaveBeenCalled();
164
- expect(okxConnectorSpy).toHaveBeenCalled();
165
- });
166
- it('should add connectors from SatsConnectConnector', () => {
167
- mockSatsConnectProvider();
168
- adapter.syncConnectors(undefined, undefined);
169
- expect(adapter.connectors).toHaveLength(1);
170
- expect(adapter.connectors[0]).toBeInstanceOf(SatsConnectConnector);
171
- });
172
- it('should map LeatherConnector', () => {
173
- mockSatsConnectProvider({ id: LeatherConnector.ProviderId, name: 'Leather' });
174
- adapter.syncConnectors(undefined, undefined);
175
- expect(adapter.connectors[1]).toBeInstanceOf(LeatherConnector);
176
- });
177
- it('should add OKXConnector', () => {
178
- ;
179
- window.okxwallet = { bitcoin: { connect: vi.fn() } };
180
- adapter.syncConnectors(undefined, undefined);
181
- expect(adapter.connectors[0]).toBeInstanceOf(OKXConnector);
182
- });
183
- it('should pass correct getActiveNetwork to SatsConnectConnector', () => {
184
- const mocks = mockSatsConnectProvider({ id: LeatherConnector.ProviderId, name: 'Leather' });
185
- const getCaipNetwork = vi.fn(() => bitcoin);
186
- adapter.syncConnectors(undefined, { getCaipNetwork });
187
- vi.spyOn(mocks.wallet, 'request').mockResolvedValueOnce(mockSatsConnectProvider.mockRequestResolve({ hex: 'mock_hex', txid: 'mock_txid' }));
188
- const connector = adapter.connectors.find(c => c instanceof LeatherConnector);
189
- connector.signPSBT({ psbt: 'mock_psbt', signInputs: [] });
190
- expect(getCaipNetwork).toHaveBeenCalled();
191
- });
192
- });
193
- describe('syncConnection', () => {
194
- it('should forward the call to connect', async () => {
195
- const connectSpy = vi.spyOn(adapter, 'connect').mockResolvedValueOnce({
196
- id: 'mock_id',
197
- type: 'ANNOUNCED',
198
- address: 'mock_address',
199
- chainId: 'mock_chain_id',
200
- provider: undefined
201
- });
202
- await adapter.syncConnection({
203
- id: 'mock_id',
204
- chainId: 'mock_chain_id',
205
- namespace: 'bip122',
206
- rpcUrl: 'mock_rpc_url'
207
- });
208
- expect(connectSpy).toHaveBeenCalledWith({ id: 'mock_id', chainId: 'mock_chain_id', type: '' });
209
- });
210
- });
211
- describe('getBalance', () => {
212
- it('should return the balance', async () => {
213
- api.getUTXOs.mockResolvedValueOnce([
214
- mockUTXO({ value: 10000 }),
215
- mockUTXO({ value: 20000 }),
216
- mockUTXO({ value: 30000 }),
217
- mockUTXO({ value: 10000000000 })
218
- ]);
219
- const balance = await adapter.getBalance({
220
- address: 'mock_address',
221
- chainId: bitcoin.id,
222
- caipNetwork: bitcoin
223
- });
224
- expect(balance).toEqual({
225
- balance: '100.0006',
226
- symbol: 'BTC'
227
- });
228
- });
229
- it('should return empty balance if no UTXOs', async () => {
230
- api.getUTXOs.mockResolvedValueOnce([]);
231
- const balance = await adapter.getBalance({
232
- address: 'mock_address',
233
- chainId: bitcoin.id,
234
- caipNetwork: bitcoin
235
- });
236
- expect(balance).toEqual({
237
- balance: '0',
238
- symbol: 'BTC'
239
- });
240
- });
241
- it('should return empty balance if chain is not bip122', async () => {
242
- const balance = await adapter.getBalance({
243
- address: 'mock_address',
244
- chainId: mainnet.id,
245
- caipNetwork: mainnet
246
- });
247
- expect(balance).toEqual({
248
- balance: '0',
249
- symbol: bitcoin.nativeCurrency.symbol
250
- });
251
- });
252
- it('should return empty balance if chain is not provided', async () => {
253
- const balance = await adapter.getBalance({
254
- address: 'mock_address',
255
- chainId: 'mock_chain_id'
256
- });
257
- expect(balance).toEqual({
258
- balance: '0',
259
- symbol: bitcoin.nativeCurrency.symbol
260
- });
261
- });
262
- });
263
- describe('signMessage', async () => {
264
- let connector;
265
- beforeEach(() => {
266
- connector = new SatsConnectConnector({
267
- provider: mockSatsConnectProvider().provider,
268
- requestedChains: [bitcoin],
269
- getActiveNetwork: () => bitcoin
270
- });
271
- });
272
- it('should return the signature', async () => {
273
- vi.spyOn(connector, 'signMessage').mockResolvedValueOnce('mock_signature');
274
- const result = await adapter.signMessage({
275
- message: 'mock_message',
276
- address: 'mock_address',
277
- provider: connector.provider
278
- });
279
- expect(result).toEqual({ signature: 'mock_signature' });
280
- });
281
- it('should throw if connector is not found', async () => {
282
- await expect(adapter.signMessage({
283
- address: 'mock_address',
284
- message: 'mock_message',
285
- provider: undefined
286
- })).rejects.toThrow();
287
- });
288
- });
289
- describe('getWalletConnectProvider', () => {
290
- it('should return the wallet connect provider', () => {
291
- const provider = adapter.getWalletConnectProvider({
292
- activeCaipNetwork: bitcoin,
293
- caipNetworks: [bitcoin],
294
- provider: undefined
295
- });
296
- expect(provider).toBeInstanceOf(BitcoinWalletConnectConnector);
297
- });
298
- });
299
- describe('disconnect', () => {
300
- it('should disconnect using param provider', async () => {
301
- const connector = new SatsConnectConnector({
302
- provider: mockSatsConnectProvider().provider,
303
- requestedChains: [bitcoin],
304
- getActiveNetwork: () => bitcoin
305
- });
306
- vi.spyOn(connector, 'disconnect');
307
- adapter.connectors.push(connector);
308
- await adapter.disconnect({ provider: connector });
309
- expect(connector.disconnect).toHaveBeenCalled();
310
- });
311
- it('should disconnect using connector from class', async () => {
312
- const mocks = mockSatsConnectProvider();
313
- const connector = new SatsConnectConnector({
314
- provider: mocks.provider,
315
- requestedChains: [bitcoin],
316
- getActiveNetwork: () => bitcoin
317
- });
318
- vi.spyOn(connector, 'disconnect');
319
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
320
- { address: 'mock_address', purpose: 'payment' }
321
- ]);
322
- adapter.connectors.push(connector);
323
- await adapter.connect({ id: connector.id, chainId: bitcoin.id, type: '' });
324
- await adapter.disconnect({});
325
- expect(connector.disconnect).toHaveBeenCalled();
326
- });
327
- });
328
- describe('connector events', () => {
329
- let mocks;
330
- const listeners = {
331
- accountChanged: vi.fn(),
332
- disconnect: vi.fn(),
333
- switchNetwork: vi.fn()
334
- };
335
- beforeEach(async () => {
336
- mocks = mockSatsConnectProvider();
337
- adapter.syncConnectors();
338
- vi.spyOn(mocks.wallet, 'request').mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({
339
- addresses: [{ address: 'mock_address' }]
340
- }));
341
- listeners.accountChanged = vi.fn(() => console.log('meu pau'));
342
- adapter.on('accountChanged', listeners.accountChanged);
343
- listeners.disconnect = vi.fn();
344
- adapter.on('disconnect', listeners.disconnect);
345
- listeners.switchNetwork = vi.fn();
346
- adapter.on('switchNetwork', listeners.switchNetwork);
347
- await adapter.connect({
348
- id: mocks.provider.name,
349
- chainId: bitcoin.id,
350
- type: ''
351
- });
352
- });
353
- it('should have bound events', () => {
354
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('accountChange', expect.any(Function));
355
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('disconnect', expect.any(Function));
356
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('networkChange', expect.any(Function));
357
- });
358
- it('should emit accountsChanged on accountChange', async () => {
359
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'accountChange')[1];
360
- await callback({ type: 'accountChange' });
361
- expect(listeners.accountChanged).toHaveBeenCalled();
362
- });
363
- it('should emit disconnect on disconnect', () => {
364
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'disconnect')[1];
365
- callback({ type: 'disconnect' });
366
- expect(listeners.disconnect).toHaveBeenCalled();
367
- });
368
- it('should emit switchNetwork on networkChange', () => {
369
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'networkChange')[1];
370
- callback({ type: 'networkChange' });
371
- expect(listeners.switchNetwork).toHaveBeenCalled();
372
- });
373
- });
374
- describe('switchNetwork', () => {
375
- it('should execute switch network', async () => {
376
- const provider = new SatsConnectConnector({
377
- provider: mockSatsConnectProvider().provider,
378
- requestedChains: [bitcoin],
379
- getActiveNetwork: () => bitcoin
380
- });
381
- await expect(adapter.switchNetwork({
382
- caipNetwork: bitcoinTestnet,
383
- provider,
384
- providerType: provider.type
385
- })).resolves.toBeUndefined();
386
- });
387
- it('should execute switch network for WalletConnectConnector', async () => {
388
- const provider = mockUniversalProvider();
389
- const setDefaultChainSpy = provider.setDefaultChain;
390
- await adapter.switchNetwork({
391
- caipNetwork: bitcoinTestnet,
392
- provider,
393
- providerType: 'WALLET_CONNECT'
394
- });
395
- expect(setDefaultChainSpy).toHaveBeenCalledWith(bitcoinTestnet.caipNetworkId);
396
- });
397
- });
398
- it('should not throw for not used methods', async () => {
399
- expect(await adapter.getProfile({})).toEqual({});
400
- expect(await adapter.estimateGas({})).toEqual({});
401
- expect(await adapter.sendTransaction({})).toEqual({});
402
- expect(await adapter.writeContract({})).toEqual({});
403
- expect(await adapter.getEnsAddress({})).toEqual({});
404
- expect(adapter.parseUnits({})).toEqual(BigInt(0));
405
- expect(adapter.formatUnits({})).toEqual('');
406
- expect(await adapter.grantPermissions({})).toEqual({});
407
- expect(await adapter.getCapabilities({})).toEqual({});
408
- expect(await adapter.revokePermissions({})).toEqual('0x');
409
- });
410
- });
411
- //# sourceMappingURL=BitcoinAdapter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitcoinAdapter.test.js","sourceRoot":"","sources":["../../../tests/BitcoinAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,138 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { bitcoin, bitcoinTestnet } from '@reown/appkit/networks';
3
- import { LeatherConnector } from '../../src/connectors/LeatherConnector';
4
- import { SatsConnectConnector } from '../../src/connectors/SatsConnectConnector';
5
- import { mockSatsConnectProvider } from '../mocks/mockSatsConnect';
6
- describe('LeatherConnector', () => {
7
- let satsConnectConnector;
8
- let connector;
9
- let mocks;
10
- let requestedChains;
11
- let getActiveNetwork;
12
- beforeEach(() => {
13
- requestedChains = [];
14
- getActiveNetwork = vi.fn(() => bitcoin);
15
- mocks = mockSatsConnectProvider({ id: 'LeatherProvider' });
16
- satsConnectConnector = new SatsConnectConnector({
17
- provider: mocks.provider,
18
- requestedChains,
19
- getActiveNetwork
20
- });
21
- connector = new LeatherConnector({ connector: satsConnectConnector });
22
- });
23
- it('should throw an error if the wallet is not a LeatherProvider', () => {
24
- mocks = mockSatsConnectProvider({ id: 'NotLeatherProvider' });
25
- satsConnectConnector = new SatsConnectConnector({
26
- provider: mocks.provider,
27
- requestedChains,
28
- getActiveNetwork
29
- });
30
- expect(() => {
31
- new LeatherConnector({ connector: satsConnectConnector });
32
- }).toThrowError('LeatherConnector: wallet must be a LeatherProvider');
33
- });
34
- it('should create a new instance', () => {
35
- expect(connector).toBeDefined();
36
- expect(connector).toBeInstanceOf(LeatherConnector);
37
- expect(connector).toBeInstanceOf(SatsConnectConnector);
38
- });
39
- it('should send a transfer', async () => {
40
- const txid = 'txid';
41
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
42
- requestSpy.mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({ txid }));
43
- const res = await connector.sendTransfer({ amount: '100', recipient: 'address' });
44
- expect(res).toBe(txid);
45
- expect(requestSpy).toHaveBeenCalledWith('sendTransfer', { address: 'address', amount: '100' });
46
- });
47
- it('should sign a PSBT', async () => {
48
- const psbt = 'psbt';
49
- const txid = 'txid';
50
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
51
- requestSpy.mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({ hex: '70736274', txid }));
52
- const res = await connector.signPSBT({ psbt, signInputs: [], broadcast: true });
53
- expect(res).toEqual({ psbt: 'cHNidA==', txid });
54
- expect(requestSpy).toHaveBeenCalledWith('signPsbt', {
55
- hex: 'a6c6ed',
56
- network: 'mainnet',
57
- broadcast: true
58
- });
59
- });
60
- it('should sign a PSBT for testnet', async () => {
61
- getActiveNetwork.mockReturnValueOnce(bitcoinTestnet);
62
- const psbt = 'psbt';
63
- const txid = 'txid';
64
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
65
- requestSpy.mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({ hex: '70736274', txid }));
66
- const res = await connector.signPSBT({ psbt, signInputs: [], broadcast: true });
67
- expect(res).toEqual({ psbt: 'cHNidA==', txid });
68
- expect(requestSpy).toHaveBeenCalledWith('signPsbt', {
69
- hex: 'a6c6ed',
70
- network: 'testnet',
71
- broadcast: true
72
- });
73
- });
74
- it('should throw an error if the network is unsupported', async () => {
75
- getActiveNetwork.mockReturnValueOnce(undefined);
76
- const psbt = 'psbt';
77
- const txid = 'txid';
78
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
79
- requestSpy.mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({ hex: '70736274', txid }));
80
- await expect(connector.signPSBT({ psbt, signInputs: [], broadcast: true })).rejects.toThrowError('LeatherConnector: unsupported network');
81
- });
82
- it('should disconnect', async () => {
83
- await expect(connector.disconnect()).resolves.not.toThrow();
84
- });
85
- it('should keep accounts and reuse if getAccountAddresses is called multiple times', async () => {
86
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
87
- requestSpy.mockResolvedValueOnce(mockSatsConnectProvider.mockRequestResolve({
88
- addresses: [
89
- {
90
- address: 'mock_address',
91
- purpose: 'receive',
92
- addressType: 'p2pkh',
93
- gaiaAppKey: 'mock_gaia_app_key',
94
- gaiaHubUrl: 'mock_gaia_hub_url',
95
- publicKey: 'mock_public_key'
96
- }
97
- ]
98
- }));
99
- const addressesFirstCall = await connector.getAccountAddresses();
100
- const addressesSecondCall = await connector.getAccountAddresses();
101
- expect(requestSpy).toHaveBeenCalledTimes(1);
102
- expect(addressesFirstCall).toEqual(addressesSecondCall);
103
- });
104
- it('should clean up accounts after disconnection', async () => {
105
- const requestSpy = vi.spyOn(mocks.wallet, 'request');
106
- requestSpy.mockResolvedValueOnce(mockSatsConnectProvider.mockRequestResolve({
107
- addresses: [
108
- {
109
- address: 'mock_address',
110
- purpose: 'receive',
111
- addressType: 'p2pkh',
112
- gaiaAppKey: 'mock_gaia_app_key',
113
- gaiaHubUrl: 'mock_gaia_hub_url',
114
- publicKey: 'mock_public_key'
115
- }
116
- ]
117
- }));
118
- const addressesFirstCall = await connector.getAccountAddresses();
119
- await connector.disconnect();
120
- requestSpy.mockResolvedValueOnce(mockSatsConnectProvider.mockRequestResolve({
121
- addresses: [
122
- {
123
- address: 'mock_address_2',
124
- purpose: 'receive',
125
- addressType: 'p2pkh',
126
- gaiaAppKey: 'mock_gaia_app_key',
127
- gaiaHubUrl: 'mock_gaia_hub_url',
128
- publicKey: 'mock_public_key'
129
- }
130
- ]
131
- }));
132
- const addressesSecondCall = await connector.getAccountAddresses();
133
- expect(requestSpy).toHaveBeenCalledTimes(2);
134
- expect(addressesFirstCall).not.toBe(addressesSecondCall);
135
- requestSpy.mockRestore();
136
- });
137
- });
138
- //# sourceMappingURL=LeatherConnector.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LeatherConnector.test.js","sourceRoot":"","sources":["../../../../tests/connectors/LeatherConnector.test.ts"],"names":[],"mappings":"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"}