@reown/appkit-adapter-bitcoin 1.7.2-rc2 → 1.7.2

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 (45) hide show
  1. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  2. package/package.json +5 -5
  3. package/dist/esm/src/connectors/XverseConnector.js +0 -38
  4. package/dist/esm/src/connectors/XverseConnector.js.map +0 -1
  5. package/dist/esm/tests/BitcoinAdapter.test.js +0 -459
  6. package/dist/esm/tests/BitcoinAdapter.test.js.map +0 -1
  7. package/dist/esm/tests/connectors/LeatherConnector.test.js +0 -144
  8. package/dist/esm/tests/connectors/LeatherConnector.test.js.map +0 -1
  9. package/dist/esm/tests/connectors/OKXConnector.test.js +0 -172
  10. package/dist/esm/tests/connectors/OKXConnector.test.js.map +0 -1
  11. package/dist/esm/tests/connectors/SatsConnectConnector.test.js +0 -253
  12. package/dist/esm/tests/connectors/SatsConnectConnector.test.js.map +0 -1
  13. package/dist/esm/tests/connectors/WalletStandardConnector.test.js +0 -297
  14. package/dist/esm/tests/connectors/WalletStandardConnector.test.js.map +0 -1
  15. package/dist/esm/tests/connectors/XverseConnector.test.js +0 -71
  16. package/dist/esm/tests/connectors/XverseConnector.test.js.map +0 -1
  17. package/dist/esm/tests/mocks/mockSatsConnect.js +0 -60
  18. package/dist/esm/tests/mocks/mockSatsConnect.js.map +0 -1
  19. package/dist/esm/tests/mocks/mockUTXO.js +0 -15
  20. package/dist/esm/tests/mocks/mockUTXO.js.map +0 -1
  21. package/dist/esm/tests/mocks/mockUniversalProvider.js +0 -64
  22. package/dist/esm/tests/mocks/mockUniversalProvider.js.map +0 -1
  23. package/dist/esm/tests/mocks/mockWalletStandard.js +0 -47
  24. package/dist/esm/tests/mocks/mockWalletStandard.js.map +0 -1
  25. package/dist/esm/tests/utils/BitcoinApi.test.js +0 -48
  26. package/dist/esm/tests/utils/BitcoinApi.test.js.map +0 -1
  27. package/dist/esm/tests/utils/UnitsUtils.test.js +0 -21
  28. package/dist/esm/tests/utils/UnitsUtils.test.js.map +0 -1
  29. package/dist/esm/tests/utils/WalletConnectProvider.test.js +0 -275
  30. package/dist/esm/tests/utils/WalletConnectProvider.test.js.map +0 -1
  31. package/dist/esm/tsconfig.tsbuildinfo +0 -1
  32. package/dist/types/src/connectors/XverseConnector.d.ts +0 -7
  33. package/dist/types/tests/BitcoinAdapter.test.d.ts +0 -1
  34. package/dist/types/tests/connectors/LeatherConnector.test.d.ts +0 -1
  35. package/dist/types/tests/connectors/OKXConnector.test.d.ts +0 -1
  36. package/dist/types/tests/connectors/SatsConnectConnector.test.d.ts +0 -1
  37. package/dist/types/tests/connectors/WalletStandardConnector.test.d.ts +0 -1
  38. package/dist/types/tests/connectors/XverseConnector.test.d.ts +0 -1
  39. package/dist/types/tests/mocks/mockSatsConnect.d.ts +0 -27
  40. package/dist/types/tests/mocks/mockUTXO.d.ts +0 -2
  41. package/dist/types/tests/mocks/mockUniversalProvider.d.ts +0 -6
  42. package/dist/types/tests/mocks/mockWalletStandard.d.ts +0 -7
  43. package/dist/types/tests/utils/BitcoinApi.test.d.ts +0 -1
  44. package/dist/types/tests/utils/UnitsUtils.test.d.ts +0 -1
  45. package/dist/types/tests/utils/WalletConnectProvider.test.d.ts +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reown/appkit-adapter-bitcoin",
3
- "version": "1.7.2-rc2",
3
+ "version": "1.7.2",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist/esm/exports/index.js",
@@ -23,10 +23,10 @@
23
23
  "@walletconnect/universal-provider": "2.19.1",
24
24
  "bitcoinjs-lib": "6.1.7",
25
25
  "sats-connect": "3.2.0",
26
- "@reown/appkit": "1.7.2-rc2",
27
- "@reown/appkit-controllers": "1.7.2-rc2",
28
- "@reown/appkit-common": "1.7.2-rc2",
29
- "@reown/appkit-utils": "1.7.2-rc2"
26
+ "@reown/appkit": "1.7.2",
27
+ "@reown/appkit-common": "1.7.2",
28
+ "@reown/appkit-controllers": "1.7.2",
29
+ "@reown/appkit-utils": "1.7.2"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@leather.io/rpc": "2.1.21",
@@ -1,38 +0,0 @@
1
- import { BitcoinNetworkType } from 'sats-connect';
2
- import { SatsConnectConnector } from './SatsConnectConnector.js';
3
- export class XverseConnector extends SatsConnectConnector {
4
- constructor({ provider, requestedChains, getActiveNetwork }) {
5
- if (provider.id !== XverseConnector.PROVIDER_ID) {
6
- throw new Error('XverseConnector: provider must be XverseProvider');
7
- }
8
- super({ provider, requestedChains, getActiveNetwork });
9
- }
10
- async switchNetwork(caipNetworkId) {
11
- console.log('>>> caipNetworkId', caipNetworkId);
12
- const networkName = this.mapCaipNetworkToXverse(caipNetworkId);
13
- console.log('>>> networkName', networkName);
14
- // Access the provider directly to bypass type checking
15
- const provider = this.getWalletProvider();
16
- await provider
17
- .request('wallet_changeNetwork', { name: networkName })
18
- .catch(error => {
19
- if ('jsonrpc' in error && 'error' in error) {
20
- throw { ...error.error, name: 'RPCError' };
21
- }
22
- throw error;
23
- });
24
- }
25
- mapCaipNetworkToXverse(caipNetworkId) {
26
- switch (caipNetworkId) {
27
- case 'bip122:000000000019d6689c085ae165831e93':
28
- return BitcoinNetworkType.Mainnet;
29
- case 'bip122:000000000933ea01ad0ee984209779ba':
30
- return BitcoinNetworkType.Signet;
31
- // Add more networks as needed
32
- default:
33
- throw new Error(`Network ${caipNetworkId} not supported by Xverse wallet`);
34
- }
35
- }
36
- }
37
- XverseConnector.PROVIDER_ID = 'XverseProviders.BitcoinProvider';
38
- //# sourceMappingURL=XverseConnector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"XverseConnector.js","sourceRoot":"","sources":["../../../../src/connectors/XverseConnector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,OAAO,eAAgB,SAAQ,oBAAoB;IAGvD,YAAY,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EACuB;QACvC,IAAI,QAAQ,CAAC,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACrE,CAAC;QAED,KAAK,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACxD,CAAC;IAEe,KAAK,CAAC,aAAa,CAAC,aAAqB;QACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAA;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAA;QAE3C,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACzC,MAAM,QAAQ;aACX,OAAO,CAAC,sBAA6B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAS,CAAC;aACpE,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAW,CAAA;YACrD,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,sBAAsB,CAAC,aAAqB;QAClD,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,yCAAyC;gBAC5C,OAAO,kBAAkB,CAAC,OAAO,CAAA;YACnC,KAAK,yCAAyC;gBAC5C,OAAO,kBAAkB,CAAC,MAAM,CAAA;YAClC,8BAA8B;YAC9B;gBACE,MAAM,IAAI,KAAK,CAAC,WAAW,aAAa,iCAAiC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;;AAzCe,2BAAW,GAAG,iCAAiC,CAAA"}
@@ -1,459 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { ConstantsUtil } from '@reown/appkit-common';
3
- import { StorageUtil } from '@reown/appkit-controllers';
4
- import { bitcoin, bitcoinTestnet, mainnet } from '@reown/appkit/networks';
5
- import { BitcoinAdapter } from '../src';
6
- import { BitcoinWalletConnectConnector } from '../src/connectors/BitcoinWalletConnectProvider';
7
- import { LeatherConnector } from '../src/connectors/LeatherConnector';
8
- import { OKXConnector } from '../src/connectors/OKXConnector';
9
- import { SatsConnectConnector } from '../src/connectors/SatsConnectConnector';
10
- import { WalletStandardConnector } from '../src/connectors/WalletStandardConnector';
11
- import { mockSatsConnectProvider } from './mocks/mockSatsConnect';
12
- import { mockUTXO } from './mocks/mockUTXO';
13
- import { mockUniversalProvider } from './mocks/mockUniversalProvider';
14
- function mockBitcoinApi() {
15
- return {
16
- getUTXOs: vi.fn(async () => [])
17
- };
18
- }
19
- describe('BitcoinAdapter', () => {
20
- let adapter;
21
- let api;
22
- beforeEach(() => {
23
- api = mockBitcoinApi();
24
- adapter = new BitcoinAdapter({ api, networks: [bitcoin] });
25
- });
26
- describe('constructor', () => {
27
- it('should set adapterType', () => {
28
- expect(adapter.adapterType).toEqual(ConstantsUtil.ADAPTER_TYPES.BITCOIN);
29
- });
30
- it('should set namespace', () => {
31
- expect(adapter.namespace).toEqual(ConstantsUtil.CHAIN.BITCOIN);
32
- });
33
- });
34
- describe('connectWalletConnect', () => {
35
- let mockWalletConnect;
36
- beforeEach(() => {
37
- mockWalletConnect = vi.mocked(new BitcoinWalletConnectConnector({
38
- provider: mockUniversalProvider(),
39
- chains: [bitcoin],
40
- getActiveChain: () => bitcoin
41
- }));
42
- adapter.connectors.push(mockWalletConnect);
43
- });
44
- it('should call connect from WALLET_CONNECT connector', async () => {
45
- await adapter.connectWalletConnect();
46
- expect(mockWalletConnect.provider.connect).toHaveBeenCalled();
47
- });
48
- it('should throw if caipNetworks is not defined', async () => {
49
- adapter = new BitcoinAdapter({ api });
50
- await expect(adapter.connectWalletConnect()).rejects.toThrow();
51
- });
52
- it('should set BitcoinWalletConnectConnector', async () => {
53
- delete adapter.caipNetworks;
54
- adapter.setUniversalProvider(mockUniversalProvider());
55
- expect(adapter.connectors[0]).toBeInstanceOf(BitcoinWalletConnectConnector);
56
- expect(adapter.connectors[0]?.chains).toEqual([]);
57
- });
58
- });
59
- describe('connect', () => {
60
- it('should return the chainId of the available chain from connector', async () => {
61
- const connector = new SatsConnectConnector({
62
- provider: mockSatsConnectProvider().provider,
63
- requestedChains: [bitcoin],
64
- getActiveNetwork: () => bitcoin
65
- });
66
- vi.spyOn(connector, 'connect').mockResolvedValueOnce('mock_address');
67
- adapter.connectors.push(connector);
68
- const result = await adapter.connect({
69
- id: connector.id,
70
- chainId: 'bitcoin:any_chain_id',
71
- provider: connector.provider,
72
- type: 'mock_type'
73
- });
74
- expect(result).toEqual({
75
- id: connector.id,
76
- type: connector.type,
77
- address: 'mock_address',
78
- chainId: bitcoin.id,
79
- provider: connector.provider
80
- });
81
- });
82
- it('should throw if connector is not found', async () => {
83
- await expect(adapter.connect({ id: 'invalid_id', type: 'invalid_type' })).rejects.toThrow();
84
- });
85
- it('should throw if chain is not found', async () => {
86
- const connector = new SatsConnectConnector({
87
- provider: mockSatsConnectProvider().provider,
88
- requestedChains: [bitcoin],
89
- getActiveNetwork: () => bitcoin
90
- });
91
- vi.spyOn(connector, 'connect').mockResolvedValueOnce('mock_address');
92
- vi.spyOn(connector, 'chains', 'get').mockReturnValue([]);
93
- adapter.connectors.push(connector);
94
- await expect(adapter.connect({ id: connector.id, type: connector.type, chainId: 'invalid_chain_id' })).rejects.toThrow();
95
- });
96
- });
97
- describe('getAccounts', () => {
98
- let connector;
99
- beforeEach(() => {
100
- connector = new SatsConnectConnector({
101
- provider: mockSatsConnectProvider().provider,
102
- requestedChains: [bitcoin],
103
- getActiveNetwork: () => bitcoin
104
- });
105
- adapter.connectors.push(connector);
106
- });
107
- it('should return the accounts', async () => {
108
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
109
- {
110
- address: 'mock_address_1',
111
- purpose: 'payment',
112
- publicKey: 'mock_public_key_1',
113
- path: 'mock_path_1'
114
- },
115
- {
116
- address: 'mock_address_2',
117
- purpose: 'ordinal',
118
- publicKey: 'mock_public_key_2',
119
- path: 'mock_path_2'
120
- },
121
- {
122
- address: 'mock_address_3',
123
- purpose: 'stx',
124
- publicKey: 'mock_public_key_3',
125
- path: 'mock_path_3'
126
- }
127
- ]);
128
- const accounts = await adapter.getAccounts({ id: connector.id });
129
- accounts.accounts.forEach(account => {
130
- expect(account.namespace).toEqual(ConstantsUtil.CHAIN.BITCOIN);
131
- expect(account.publicKey).toBeDefined();
132
- expect(account.path).toBeDefined();
133
- });
134
- });
135
- it('should return empty accounts if no addresses', async () => {
136
- const connector = new SatsConnectConnector({
137
- provider: mockSatsConnectProvider().provider,
138
- requestedChains: [bitcoin],
139
- getActiveNetwork: () => bitcoin
140
- });
141
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([]);
142
- adapter.connectors.push(connector);
143
- const accounts = await adapter.getAccounts({ id: connector.id });
144
- expect(accounts).toEqual({ accounts: [] });
145
- });
146
- it('should return empty accounts if connector is not found', async () => {
147
- const accounts = await adapter.getAccounts({ id: 'invalid_id' });
148
- expect(accounts).toEqual({ accounts: [] });
149
- });
150
- it('should return empty accounts if connector.getAccountsAddresses throws', async () => {
151
- vi.spyOn(connector, 'getAccountAddresses').mockRejectedValueOnce(new Error('mock_error'));
152
- const accounts = await adapter.getAccounts({ id: connector.id });
153
- expect(accounts).toEqual({ accounts: [] });
154
- });
155
- it('should attach payment type if purpose is not found', async () => {
156
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
157
- { address: 'mock_address' }
158
- ]);
159
- const accounts = await adapter.getAccounts({ id: connector.id });
160
- expect(accounts).toEqual({
161
- accounts: [{ address: 'mock_address', type: 'payment', namespace: 'bip122' }]
162
- });
163
- });
164
- });
165
- describe('syncConnectors', () => {
166
- it('should get wallets from all the available connectors', () => {
167
- const walletStandardConnectorSpy = vi.spyOn(WalletStandardConnector, 'watchWallets');
168
- const satsConnectConnectorSpy = vi.spyOn(SatsConnectConnector, 'getWallets');
169
- const okxConnectorSpy = vi.spyOn(OKXConnector, 'getWallet');
170
- adapter.syncConnectors(undefined, undefined);
171
- expect(walletStandardConnectorSpy).toHaveBeenCalled();
172
- expect(satsConnectConnectorSpy).toHaveBeenCalled();
173
- expect(okxConnectorSpy).toHaveBeenCalled();
174
- });
175
- it('should add connectors from SatsConnectConnector', () => {
176
- mockSatsConnectProvider();
177
- adapter.syncConnectors(undefined, undefined);
178
- expect(adapter.connectors).toHaveLength(1);
179
- expect(adapter.connectors[0]).toBeInstanceOf(SatsConnectConnector);
180
- });
181
- it('should map LeatherConnector', () => {
182
- mockSatsConnectProvider({ id: LeatherConnector.ProviderId, name: 'Leather' });
183
- adapter.syncConnectors(undefined, undefined);
184
- expect(adapter.connectors[1]).toBeInstanceOf(LeatherConnector);
185
- });
186
- it('should add OKXConnector', () => {
187
- ;
188
- window.okxwallet = { bitcoin: { connect: vi.fn() } };
189
- adapter.syncConnectors(undefined, undefined);
190
- expect(adapter.connectors[0]).toBeInstanceOf(OKXConnector);
191
- });
192
- it('should pass correct getActiveNetwork to SatsConnectConnector', () => {
193
- const mocks = mockSatsConnectProvider({ id: LeatherConnector.ProviderId, name: 'Leather' });
194
- const getCaipNetwork = vi.fn(() => bitcoin);
195
- adapter.syncConnectors(undefined, { getCaipNetwork });
196
- vi.spyOn(mocks.wallet, 'request').mockResolvedValueOnce(mockSatsConnectProvider.mockRequestResolve({ hex: 'mock_hex', txid: 'mock_txid' }));
197
- const connector = adapter.connectors.find(c => c instanceof LeatherConnector);
198
- connector.signPSBT({ psbt: 'mock_psbt', signInputs: [] });
199
- expect(getCaipNetwork).toHaveBeenCalled();
200
- });
201
- });
202
- describe('syncConnection', () => {
203
- it('should forward the call to connect', async () => {
204
- const connectSpy = vi.spyOn(adapter, 'connect').mockResolvedValueOnce({
205
- id: 'mock_id',
206
- type: 'ANNOUNCED',
207
- address: 'mock_address',
208
- chainId: 'mock_chain_id',
209
- provider: undefined
210
- });
211
- await adapter.syncConnection({
212
- id: 'mock_id',
213
- chainId: 'mock_chain_id',
214
- namespace: 'bip122',
215
- rpcUrl: 'mock_rpc_url'
216
- });
217
- expect(connectSpy).toHaveBeenCalledWith({ id: 'mock_id', chainId: 'mock_chain_id', type: '' });
218
- });
219
- });
220
- describe('getBalance', () => {
221
- it('should return the balance', async () => {
222
- api.getUTXOs.mockResolvedValueOnce([
223
- mockUTXO({ value: 10000 }),
224
- mockUTXO({ value: 20000 }),
225
- mockUTXO({ value: 30000 }),
226
- mockUTXO({ value: 10000000000 })
227
- ]);
228
- const balance = await adapter.getBalance({
229
- address: 'mock_address',
230
- chainId: bitcoin.id,
231
- caipNetwork: bitcoin
232
- });
233
- expect(balance).toEqual({
234
- balance: '100.0006',
235
- symbol: 'BTC'
236
- });
237
- StorageUtil.clearAddressCache();
238
- });
239
- it('should call getBalance once even when multiple adapter requests are sent at the same time', async () => {
240
- // delay the response to simulate http request latency
241
- const latency = 1000;
242
- const numSimultaneousRequests = 10;
243
- const expectedSentRequests = 1;
244
- api.getUTXOs.mockResolvedValue(new Promise(resolve => {
245
- setTimeout(() => {
246
- resolve([
247
- mockUTXO({ value: 10000 }),
248
- mockUTXO({ value: 20000 }),
249
- mockUTXO({ value: 30000 }),
250
- mockUTXO({ value: 10000000000 })
251
- ]);
252
- }, latency);
253
- }));
254
- const result = await Promise.all([
255
- ...Array.from({ length: numSimultaneousRequests }).map(() => adapter.getBalance({
256
- address: 'mock_address',
257
- chainId: bitcoin.id,
258
- caipNetwork: bitcoin
259
- }))
260
- ]);
261
- expect(api.getUTXOs).toHaveBeenCalledTimes(expectedSentRequests);
262
- expect(result.length).toBe(numSimultaneousRequests);
263
- expect(expectedSentRequests).to.be.lt(numSimultaneousRequests);
264
- // verify all calls got the same balance
265
- for (const balance of result) {
266
- expect(balance).toEqual({
267
- balance: '100.0006',
268
- symbol: 'BTC'
269
- });
270
- }
271
- StorageUtil.clearAddressCache();
272
- });
273
- it('should return empty balance if no UTXOs', async () => {
274
- api.getUTXOs.mockResolvedValueOnce([]);
275
- const balance = await adapter.getBalance({
276
- address: 'mock_address',
277
- chainId: bitcoin.id,
278
- caipNetwork: bitcoin
279
- });
280
- expect(balance).toEqual({
281
- balance: '0',
282
- symbol: 'BTC'
283
- });
284
- });
285
- it('should return empty balance if chain is not bip122', async () => {
286
- const balance = await adapter.getBalance({
287
- address: 'mock_address',
288
- chainId: mainnet.id,
289
- caipNetwork: mainnet
290
- });
291
- expect(balance).toEqual({
292
- balance: '0',
293
- symbol: bitcoin.nativeCurrency.symbol
294
- });
295
- });
296
- it('should return empty balance if chain is not provided', async () => {
297
- const balance = await adapter.getBalance({
298
- address: 'mock_address',
299
- chainId: 'mock_chain_id'
300
- });
301
- expect(balance).toEqual({
302
- balance: '0',
303
- symbol: bitcoin.nativeCurrency.symbol
304
- });
305
- });
306
- });
307
- describe('signMessage', async () => {
308
- let connector;
309
- beforeEach(() => {
310
- connector = new SatsConnectConnector({
311
- provider: mockSatsConnectProvider().provider,
312
- requestedChains: [bitcoin],
313
- getActiveNetwork: () => bitcoin
314
- });
315
- });
316
- it('should return the signature', async () => {
317
- vi.spyOn(connector, 'signMessage').mockResolvedValueOnce('mock_signature');
318
- const result = await adapter.signMessage({
319
- message: 'mock_message',
320
- address: 'mock_address',
321
- provider: connector.provider
322
- });
323
- expect(result).toEqual({ signature: 'mock_signature' });
324
- });
325
- it('should throw if connector is not found', async () => {
326
- await expect(adapter.signMessage({
327
- address: 'mock_address',
328
- message: 'mock_message',
329
- provider: undefined
330
- })).rejects.toThrow();
331
- });
332
- });
333
- describe('getWalletConnectProvider', () => {
334
- it('should return the wallet connect provider', () => {
335
- const provider = adapter.getWalletConnectProvider({
336
- activeCaipNetwork: bitcoin,
337
- caipNetworks: [bitcoin],
338
- provider: undefined
339
- });
340
- expect(provider).toBeInstanceOf(BitcoinWalletConnectConnector);
341
- });
342
- });
343
- describe('disconnect', () => {
344
- it('should disconnect using param provider', async () => {
345
- const connector = new SatsConnectConnector({
346
- provider: mockSatsConnectProvider().provider,
347
- requestedChains: [bitcoin],
348
- getActiveNetwork: () => bitcoin
349
- });
350
- vi.spyOn(connector, 'disconnect');
351
- adapter.connectors.push(connector);
352
- await adapter.disconnect({ provider: connector });
353
- expect(connector.disconnect).toHaveBeenCalled();
354
- });
355
- it('should disconnect using connector from class', async () => {
356
- const mocks = mockSatsConnectProvider();
357
- const connector = new SatsConnectConnector({
358
- provider: mocks.provider,
359
- requestedChains: [bitcoin],
360
- getActiveNetwork: () => bitcoin
361
- });
362
- vi.spyOn(connector, 'disconnect');
363
- vi.spyOn(connector, 'getAccountAddresses').mockResolvedValueOnce([
364
- { address: 'mock_address', purpose: 'payment' }
365
- ]);
366
- adapter.connectors.push(connector);
367
- await adapter.connect({ id: connector.id, chainId: bitcoin.id, type: '' });
368
- await adapter.disconnect({});
369
- expect(connector.disconnect).toHaveBeenCalled();
370
- });
371
- });
372
- describe('connector events', () => {
373
- let mocks;
374
- const listeners = {
375
- accountChanged: vi.fn(),
376
- disconnect: vi.fn(),
377
- switchNetwork: vi.fn()
378
- };
379
- beforeEach(async () => {
380
- mocks = mockSatsConnectProvider();
381
- adapter.syncConnectors();
382
- vi.spyOn(mocks.wallet, 'request').mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({
383
- addresses: [{ address: 'mock_address' }]
384
- }));
385
- listeners.accountChanged = vi.fn(() => { });
386
- adapter.on('accountChanged', listeners.accountChanged);
387
- listeners.disconnect = vi.fn();
388
- adapter.on('disconnect', listeners.disconnect);
389
- listeners.switchNetwork = vi.fn();
390
- adapter.on('switchNetwork', listeners.switchNetwork);
391
- await adapter.connect({
392
- id: mocks.provider.name,
393
- chainId: bitcoin.id,
394
- type: ''
395
- });
396
- });
397
- it('should have bound events', () => {
398
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('accountChange', expect.any(Function));
399
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('disconnect', expect.any(Function));
400
- expect(mocks.wallet.addListener).toHaveBeenCalledWith('networkChange', expect.any(Function));
401
- });
402
- it('should emit accountsChanged on accountChange', async () => {
403
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'accountChange')[1];
404
- await callback({ type: 'accountChange' });
405
- expect(listeners.accountChanged).toHaveBeenCalled();
406
- });
407
- it('should emit disconnect on disconnect', () => {
408
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'disconnect')[1];
409
- callback({ type: 'disconnect' });
410
- expect(listeners.disconnect).toHaveBeenCalled();
411
- });
412
- it('should emit switchNetwork on networkChange', () => {
413
- const callback = mocks.wallet.addListener.mock.calls.find(([name]) => name === 'networkChange')[1];
414
- callback({
415
- type: 'networkChange',
416
- stacks: { name: 'mock_network' },
417
- bitcoin: { name: 'Mainnet' }
418
- });
419
- expect(listeners.switchNetwork).toHaveBeenCalled();
420
- });
421
- });
422
- describe('switchNetwork', () => {
423
- it('should execute switch network', async () => {
424
- const provider = new SatsConnectConnector({
425
- provider: mockSatsConnectProvider().provider,
426
- requestedChains: [bitcoin],
427
- getActiveNetwork: () => bitcoin
428
- });
429
- await expect(adapter.switchNetwork({
430
- caipNetwork: bitcoinTestnet,
431
- provider,
432
- providerType: provider.type
433
- })).resolves.toBeUndefined();
434
- });
435
- it('should execute switch network for WalletConnectConnector', async () => {
436
- const provider = mockUniversalProvider();
437
- const setDefaultChainSpy = provider.setDefaultChain;
438
- await adapter.switchNetwork({
439
- caipNetwork: bitcoinTestnet,
440
- provider,
441
- providerType: 'WALLET_CONNECT'
442
- });
443
- expect(setDefaultChainSpy).toHaveBeenCalledWith(bitcoinTestnet.caipNetworkId);
444
- });
445
- });
446
- it('should not throw for not used methods', async () => {
447
- expect(await adapter.getProfile({})).toEqual({});
448
- expect(await adapter.estimateGas({})).toEqual({});
449
- expect(await adapter.sendTransaction({})).toEqual({});
450
- expect(await adapter.writeContract({})).toEqual({});
451
- expect(await adapter.getEnsAddress({})).toEqual({});
452
- expect(adapter.parseUnits({})).toEqual(BigInt(0));
453
- expect(adapter.formatUnits({})).toEqual('');
454
- expect(await adapter.grantPermissions({})).toEqual({});
455
- expect(await adapter.getCapabilities({})).toEqual({});
456
- expect(await adapter.revokePermissions({})).toEqual('0x');
457
- });
458
- });
459
- //# 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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"}