@reown/appkit-adapter-bitcoin 1.6.6 → 1.6.7-basic-test.8.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,297 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { bitcoin, bitcoinTestnet, mainnet } from '@reown/appkit/networks';
3
+ import { WalletStandardConnector } from '../../src/connectors/WalletStandardConnector';
4
+ import { MethodNotSupportedError } from '../../src/errors/MethodNotSupportedError';
5
+ import { mockWalletStandardProvider } from '../mocks/mockWalletStandard';
6
+ vi.mock('@wallet-standard/app', async () => Promise.resolve({
7
+ getWallets: () => ({
8
+ get: () => [mockWalletStandardProvider()],
9
+ on: () => { }
10
+ })
11
+ }));
12
+ describe('WalletStandardConnector', () => {
13
+ let connector;
14
+ let wallet;
15
+ let requestedChains;
16
+ beforeEach(() => {
17
+ // requested chains may contain not bip122 chains
18
+ requestedChains = [
19
+ { ...mainnet, caipNetworkId: 'eip155:1', chainNamespace: 'eip155' },
20
+ bitcoin,
21
+ bitcoinTestnet
22
+ ];
23
+ wallet = mockWalletStandardProvider();
24
+ connector = new WalletStandardConnector({
25
+ wallet,
26
+ requestedChains
27
+ });
28
+ });
29
+ it('should validate the test fixture', async () => {
30
+ expect(connector).toBeInstanceOf(WalletStandardConnector);
31
+ });
32
+ it('should validate the metadata', async () => {
33
+ expect(connector.chain).toBe('bip122');
34
+ expect(connector.type).toBe('ANNOUNCED');
35
+ expect(connector.id).toBe(wallet.name);
36
+ expect(connector.name).toBe(wallet.name);
37
+ expect(connector.imageUrl).toBe(wallet.icon);
38
+ });
39
+ it('should throw if feature is not available', async () => {
40
+ wallet = mockWalletStandardProvider({
41
+ features: {}
42
+ });
43
+ connector = new WalletStandardConnector({
44
+ wallet,
45
+ requestedChains
46
+ });
47
+ await expect(connector.connect()).rejects.toThrow(MethodNotSupportedError);
48
+ });
49
+ describe('chains', () => {
50
+ it('should map correctly only chains that are requested and the wallet supports', async () => {
51
+ expect(connector.chains).toEqual([bitcoin]);
52
+ });
53
+ it('should map network id aliases', async () => {
54
+ vi.spyOn(wallet, 'chains', 'get').mockReturnValueOnce(['bitcoin:mainnet', 'bitcoin:testnet']);
55
+ expect(connector.chains).toEqual([bitcoin, bitcoinTestnet]);
56
+ });
57
+ });
58
+ describe('watchWallets', () => {
59
+ it('should get wallets using the callback', async () => {
60
+ const callbackMock = vi.fn((...args) => {
61
+ expect(args[0]).toBeInstanceOf(WalletStandardConnector);
62
+ });
63
+ WalletStandardConnector.watchWallets({
64
+ callback: callbackMock,
65
+ requestedChains
66
+ });
67
+ expect(callbackMock).toHaveBeenCalled();
68
+ });
69
+ });
70
+ describe('connect', () => {
71
+ it('connect correctly', async () => {
72
+ await expect(connector.connect()).resolves.not.toThrow();
73
+ });
74
+ it('should throw if account is not found', async () => {
75
+ wallet = mockWalletStandardProvider({
76
+ features: {
77
+ 'bitcoin:connect': {
78
+ connect: async () => Promise.resolve({ accounts: [] }),
79
+ version: '1.0.0'
80
+ }
81
+ }
82
+ });
83
+ connector = new WalletStandardConnector({
84
+ wallet,
85
+ requestedChains
86
+ });
87
+ await expect(connector.connect()).rejects.toThrow('No account found');
88
+ });
89
+ it('should bind events', async () => {
90
+ const eventsFeatureSpy = vi.spyOn(wallet.features['standard:events'], 'on');
91
+ await connector.connect();
92
+ expect(eventsFeatureSpy).toHaveBeenCalledWith('change', expect.any(Function));
93
+ });
94
+ });
95
+ describe('getAccountAddresses', () => {
96
+ it('should map accounts correctly', async () => {
97
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([
98
+ mockWalletStandardProvider.mockAccount({
99
+ address: 'address1',
100
+ publicKey: Buffer.from('publicKey1')
101
+ })
102
+ ]);
103
+ const accounts = await connector.getAccountAddresses();
104
+ expect(accounts).toEqual([
105
+ {
106
+ address: 'address1',
107
+ publicKey: '7075626c69634b657931',
108
+ purpose: 'payment'
109
+ }
110
+ ]);
111
+ });
112
+ it('should filter duplicate addresses', async () => {
113
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([
114
+ mockWalletStandardProvider.mockAccount({
115
+ address: 'address1',
116
+ publicKey: Buffer.from('publicKey1')
117
+ }),
118
+ mockWalletStandardProvider.mockAccount({
119
+ address: 'address1',
120
+ publicKey: Buffer.from('publicKey2')
121
+ })
122
+ ]);
123
+ const accounts = await connector.getAccountAddresses();
124
+ expect(accounts).toEqual([
125
+ {
126
+ address: 'address1',
127
+ publicKey: '7075626c69634b657931',
128
+ purpose: 'payment'
129
+ }
130
+ ]);
131
+ });
132
+ });
133
+ describe('signMessage', () => {
134
+ it('should sign message correctly', async () => {
135
+ const accountMock = mockWalletStandardProvider.mockAccount({
136
+ address: 'address',
137
+ publicKey: Buffer.from('publicKey1')
138
+ });
139
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([accountMock]);
140
+ const signMessageFeatureSpy = vi.spyOn(wallet.features['bitcoin:signMessage'], 'signMessage');
141
+ await connector.signMessage({ address: 'address', message: 'message1' });
142
+ expect(signMessageFeatureSpy).toHaveBeenCalledWith({
143
+ message: expect.objectContaining(Uint8Array.from([109, 101, 115, 115, 97, 103, 101, 49])),
144
+ account: expect.objectContaining(accountMock)
145
+ });
146
+ });
147
+ it('should throw if account is not found', async () => {
148
+ wallet = mockWalletStandardProvider({
149
+ features: {
150
+ 'bitcoin:signMessage': {
151
+ signMessage: async () => Promise.reject(new Error('Account not found')),
152
+ version: '1.0.0'
153
+ }
154
+ }
155
+ });
156
+ connector = new WalletStandardConnector({
157
+ wallet,
158
+ requestedChains
159
+ });
160
+ await expect(connector.signMessage({ address: 'address1', message: 'message1' })).rejects.toThrow('Account not found');
161
+ });
162
+ it('should throw if response is empty', async () => {
163
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([
164
+ mockWalletStandardProvider.mockAccount({
165
+ address: 'address'
166
+ })
167
+ ]);
168
+ vi.spyOn(wallet.features['bitcoin:signMessage'], 'signMessage').mockReturnValueOnce(Promise.resolve([]));
169
+ await expect(connector.signMessage({ address: 'address', message: 'message1' })).rejects.toThrow('No response from wallet');
170
+ });
171
+ });
172
+ describe('signPSBT', () => {
173
+ it('should sign PSBT correctly', async () => {
174
+ const accountMock = mockWalletStandardProvider.mockAccount({
175
+ address: 'address',
176
+ publicKey: Buffer.from('publicKey1')
177
+ });
178
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([accountMock]);
179
+ const signPsbtFeatureSpy = vi.spyOn(wallet.features['bitcoin:signTransaction'], 'signTransaction');
180
+ signPsbtFeatureSpy.mockReturnValueOnce([{ signedPsbt: Buffer.from('mock_signed_psbt') }]);
181
+ const response = await connector.signPSBT({
182
+ psbt: 'psbt1',
183
+ signInputs: [
184
+ {
185
+ address: 'address',
186
+ index: 0,
187
+ sighashTypes: [1]
188
+ }
189
+ ]
190
+ });
191
+ expect(signPsbtFeatureSpy).toHaveBeenCalledWith({
192
+ psbt: expect.objectContaining(Uint8Array.from([])),
193
+ inputsToSign: expect.arrayContaining([
194
+ expect.objectContaining({
195
+ account: accountMock,
196
+ signingIndexes: [0],
197
+ sigHash: undefined
198
+ })
199
+ ])
200
+ });
201
+ expect(response).toEqual({ psbt: 'bW9ja19zaWduZWRfcHNidA==', txid: undefined });
202
+ });
203
+ it('should throw if account is not found', async () => {
204
+ await expect(connector.signPSBT({
205
+ psbt: 'psbt1',
206
+ signInputs: [
207
+ {
208
+ address: 'mock_address',
209
+ index: 0,
210
+ sighashTypes: [1]
211
+ }
212
+ ]
213
+ })).rejects.toThrow('Account with address mock_address not found');
214
+ });
215
+ it('should throw if response is empty', async () => {
216
+ vi.spyOn(wallet, 'accounts', 'get').mockReturnValueOnce([
217
+ mockWalletStandardProvider.mockAccount({
218
+ address: 'address'
219
+ })
220
+ ]);
221
+ vi.spyOn(wallet.features['bitcoin:signTransaction'], 'signTransaction').mockReturnValueOnce(Promise.resolve([]));
222
+ await expect(connector.signPSBT({
223
+ psbt: 'psbt1',
224
+ signInputs: [
225
+ {
226
+ address: 'address',
227
+ index: 0,
228
+ sighashTypes: [1]
229
+ }
230
+ ]
231
+ })).rejects.toThrow('No response from wallet');
232
+ });
233
+ it('should throw if broadcast is true', async () => {
234
+ await expect(connector.signPSBT({
235
+ psbt: 'psbt1',
236
+ signInputs: [
237
+ {
238
+ address: 'address',
239
+ index: 0,
240
+ sighashTypes: [1]
241
+ }
242
+ ],
243
+ broadcast: true
244
+ })).rejects.toThrow(MethodNotSupportedError);
245
+ });
246
+ });
247
+ describe('sendTransfer', () => {
248
+ it('should throw MethodNotSupportedError', async () => {
249
+ await expect(connector.sendTransfer({
250
+ amount: '1000',
251
+ recipient: 'address'
252
+ })).rejects.toThrow(MethodNotSupportedError);
253
+ });
254
+ });
255
+ describe('disconnect', () => {
256
+ it('should disconnect correctly', async () => {
257
+ await expect(connector.disconnect()).resolves.not.toThrow();
258
+ });
259
+ it('should unbind events', async () => {
260
+ const unsubscribeCallbackMock = vi.fn(() => { });
261
+ vi.spyOn(wallet.features['standard:events'], 'on').mockReturnValueOnce(unsubscribeCallbackMock);
262
+ await connector.connect();
263
+ await connector.disconnect();
264
+ expect(unsubscribeCallbackMock).toHaveBeenCalled();
265
+ });
266
+ });
267
+ describe('request', () => {
268
+ it('should throw MethodNotSupportedError', async () => {
269
+ await expect(connector.request({})).rejects.toThrow(MethodNotSupportedError);
270
+ });
271
+ });
272
+ describe('events', () => {
273
+ it('should not throw if events feature is not available', async () => {
274
+ delete wallet.features['standard:events'];
275
+ await expect(connector.connect()).resolves.not.toThrow();
276
+ });
277
+ it('should emit disconnect if change event has no accounts', async () => {
278
+ const eventsFeatureSpy = vi.spyOn(wallet.features['standard:events'], 'on');
279
+ await connector.connect();
280
+ const changeCallback = eventsFeatureSpy.mock.calls[0][1];
281
+ const disconnectCallback = vi.fn(() => { });
282
+ connector.on('disconnect', disconnectCallback);
283
+ changeCallback({ accounts: [] });
284
+ expect(disconnectCallback).toHaveBeenCalled();
285
+ });
286
+ it('should emit accountsChanged if change event has accounts', async () => {
287
+ const eventsFeatureSpy = vi.spyOn(wallet.features['standard:events'], 'on');
288
+ await connector.connect();
289
+ const changeCallback = eventsFeatureSpy.mock.calls[0][1];
290
+ const accountsChangedCallback = vi.fn(() => { });
291
+ connector.on('accountsChanged', accountsChangedCallback);
292
+ changeCallback({ accounts: [{ address: 'address1' }, { address: 'address2' }] });
293
+ expect(accountsChangedCallback).toHaveBeenCalledWith(['address1', 'address2']);
294
+ });
295
+ });
296
+ });
297
+ //# sourceMappingURL=WalletStandardConnector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletStandardConnector.test.js","sourceRoot":"","sources":["../../../../tests/connectors/WalletStandardConnector.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAG7D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAA;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAA;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAExE,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CACzC,OAAO,CAAC,OAAO,CAAC;IACd,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACjB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,0BAA0B,EAAE,CAAC;QACzC,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC;KACb,CAAC;CACH,CAAC,CACH,CAAA;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,SAAkC,CAAA;IACtC,IAAI,MAAqD,CAAA;IACzD,IAAI,eAA8B,CAAA;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,iDAAiD;QACjD,eAAe,GAAG;YAChB,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE;YACnE,OAAO;YACP,cAAc;SACf,CAAA;QACD,MAAM,GAAG,0BAA0B,EAAE,CAAA;QACrC,SAAS,GAAG,IAAI,uBAAuB,CAAC;YACtC,MAAM;YACN,eAAe;SAChB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,0BAA0B,CAAC;YAClC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;QACF,SAAS,GAAG,IAAI,uBAAuB,CAAC;YACtC,MAAM;YACN,eAAe;SAChB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;YAC3F,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAA;YAE7F,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACzD,CAAC,CAAC,CAAA;YAEF,uBAAuB,CAAC,YAAY,CAAC;gBACnC,QAAQ,EAAE,YAAY;gBACtB,eAAe;aAChB,CAAC,CAAA;YAEF,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,GAAG,0BAA0B,CAAC;gBAClC,QAAQ,EAAE;oBACR,iBAAiB,EAAE;wBACjB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;wBACtD,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YACF,SAAS,GAAG,IAAI,uBAAuB,CAAC;gBACtC,MAAM;gBACN,eAAe;aAChB,CAAC,CAAA;YAEF,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QACvE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ,EAAE,IAAI,CAAC,CAAA;YAClF,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;YACzB,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBACtD,0BAA0B,CAAC,WAAW,CAAC;oBACrC,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;iBACrC,CAAC;aACH,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,CAAA;YACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;gBACvB;oBACE,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,sBAAsB;oBACjC,OAAO,EAAE,SAAS;iBACnB;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBACtD,0BAA0B,CAAC,WAAW,CAAC;oBACrC,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;iBACrC,CAAC;gBACF,0BAA0B,CAAC,WAAW,CAAC;oBACrC,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;iBACrC,CAAC;aACH,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,CAAA;YACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;gBACvB;oBACE,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,sBAAsB;oBACjC,OAAO,EAAE,SAAS;iBACnB;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,WAAW,GAAG,0BAA0B,CAAC,WAAW,CAAC;gBACzD,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aACrC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;YAEtE,MAAM,qBAAqB,GAAG,EAAE,CAAC,KAAK,CACpC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ,EAC7C,aAAa,CACd,CAAA;YACD,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;YACxE,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC;gBACjD,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzF,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;aAC9C,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,GAAG,0BAA0B,CAAC;gBAClC,QAAQ,EAAE;oBACR,qBAAqB,EAAE;wBACrB,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;wBACvE,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YACF,SAAS,GAAG,IAAI,uBAAuB,CAAC;gBACtC,MAAM;gBACN,eAAe;aAChB,CAAC,CAAA;YAEF,MAAM,MAAM,CACV,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CACpE,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBACtD,0BAA0B,CAAC,WAAW,CAAC;oBACrC,OAAO,EAAE,SAAS;iBACnB,CAAC;aACH,CAAC,CAAA;YAEF,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ,EAAE,aAAa,CAAC,CAAC,mBAAmB,CACxF,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CACpB,CAAA;YAED,MAAM,MAAM,CACV,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CACnE,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,WAAW,GAAG,0BAA0B,CAAC,WAAW,CAAC;gBACzD,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aACrC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;YAEtE,MAAM,kBAAkB,GAAG,EAAE,CAAC,KAAK,CACjC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAQ,EACjD,iBAAiB,CAClB,CAAA;YACD,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAA;YAEzF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC;gBACxC,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,CAAC,CAAC,CAAC;qBAClB;iBACF;aACF,CAAC,CAAA;YACF,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC;gBAC9C,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClD,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC;oBACnC,MAAM,CAAC,gBAAgB,CAAC;wBACtB,OAAO,EAAE,WAAW;wBACpB,cAAc,EAAE,CAAC,CAAC,CAAC;wBACnB,OAAO,EAAE,SAAS;qBACnB,CAAC;iBACH,CAAC;aACH,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CACV,SAAS,CAAC,QAAQ,CAAC;gBACjB,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,cAAc;wBACvB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,CAAC,CAAC,CAAC;qBAClB;iBACF;aACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,mBAAmB,CAAC;gBACtD,0BAA0B,CAAC,WAAW,CAAC;oBACrC,OAAO,EAAE,SAAS;iBACnB,CAAC;aACH,CAAC,CAAA;YAEF,EAAE,CAAC,KAAK,CACN,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAQ,EACjD,iBAAiB,CAClB,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;YAE1C,MAAM,MAAM,CACV,SAAS,CAAC,QAAQ,CAAC;gBACjB,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,CAAC,CAAC,CAAC;qBAClB;iBACF;aACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,MAAM,CACV,SAAS,CAAC,QAAQ,CAAC;gBACjB,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE;oBACV;wBACE,OAAO,EAAE,SAAS;wBAClB,KAAK,EAAE,CAAC;wBACR,YAAY,EAAE,CAAC,CAAC,CAAC;qBAClB;iBACF;gBACD,SAAS,EAAE,IAAI;aAChB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CACV,SAAS,CAAC,YAAY,CAAC;gBACrB,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,SAAS;aACrB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC7D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,uBAAuB,GAAG,EAAE,CAAC,EAAE,CAAa,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC3D,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ,EAAE,IAAI,CAAC,CAAC,mBAAmB,CAC3E,uBAAuB,CACxB,CAAA;YACD,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;YACzB,MAAM,SAAS,CAAC,UAAU,EAAE,CAAA;YAC5B,MAAM,CAAC,uBAAuB,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,OAAQ,MAAM,CAAC,QAAgB,CAAC,iBAAiB,CAAC,CAAA;YAClD,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ,EAAE,IAAI,CAAC,CAAA;YAClF,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;YACzB,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAwB,CAAA;YAChF,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC1C,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;YAE9C,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;YAChC,MAAM,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,gBAAgB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ,EAAE,IAAI,CAAC,CAAA;YAClF,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;YACzB,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAwB,CAAA;YAChF,MAAM,uBAAuB,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC/C,SAAS,CAAC,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAA;YAExD,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;YAChF,MAAM,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { vi } from 'vitest';
2
+ export function mockSatsConnectProvider(replaces = {}) {
3
+ const id = replaces.id || 'mock_provider_id';
4
+ const wallet = mockSatsConnectWindowProvider(id);
5
+ const provider = {
6
+ id,
7
+ icon: 'mock_icon',
8
+ name: 'mock_provider_name',
9
+ chromeWebStoreUrl: '',
10
+ googlePlayStoreUrl: '',
11
+ iOSAppStoreUrl: '',
12
+ methods: ['getAddresses', 'signPsbt', 'sendTransfer', 'signMessage'],
13
+ mozillaAddOnsUrl: '',
14
+ webUrl: '',
15
+ ...replaces
16
+ };
17
+ if (window.btc_providers) {
18
+ window.btc_providers = window.btc_providers.filter(p => p.id !== id);
19
+ window.btc_providers.push(provider);
20
+ }
21
+ else {
22
+ window.btc_providers = [provider];
23
+ }
24
+ return { provider, wallet };
25
+ }
26
+ mockSatsConnectProvider.mockRequestResolve = (result) => ({
27
+ id: 'mock_request_id',
28
+ jsonrpc: '2.0',
29
+ result
30
+ });
31
+ mockSatsConnectProvider.mockRequestReject = (error = {}) => ({
32
+ id: 'mock_request_id',
33
+ jsonrpc: '2.0',
34
+ error: {
35
+ code: -32000,
36
+ message: 'Mocked error',
37
+ ...error
38
+ }
39
+ });
40
+ export function mockSatsConnectWindowProvider(id) {
41
+ const windowProvider = {
42
+ addListener: vi.fn(() => () => undefined),
43
+ connect: vi.fn(),
44
+ createInscription: vi.fn(),
45
+ createRepeatInscriptions: vi.fn(),
46
+ request: vi.fn(() => Promise.resolve({
47
+ id: 'mock_request_id',
48
+ jsonrpc: '2.0',
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ result: {}
51
+ })),
52
+ sendBtcTransaction: vi.fn(),
53
+ signMessage: vi.fn(),
54
+ signMultipleTransactions: vi.fn(),
55
+ signTransaction: vi.fn()
56
+ };
57
+ window[id] = windowProvider;
58
+ return windowProvider;
59
+ }
60
+ //# sourceMappingURL=mockSatsConnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockSatsConnect.js","sourceRoot":"","sources":["../../../../tests/mocks/mockSatsConnect.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,EAAE,EAAE,MAAM,QAAQ,CAAA;AAMtC,MAAM,UAAU,uBAAuB,CAAC,WAAyC,EAAE;IAIjF,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,kBAAkB,CAAA;IAE5C,MAAM,MAAM,GAAG,6BAA6B,CAAC,EAAE,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAwB;QACpC,EAAE;QACF,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,oBAAoB;QAC1B,iBAAiB,EAAE,EAAE;QACrB,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC;QACpE,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,EAAE;QACV,GAAG,QAAQ;KACZ,CAAA;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAC7B,CAAC;AAED,uBAAuB,CAAC,kBAAkB,GAAG,CAAI,MAAS,EAAE,EAAE,CAAC,CAAC;IAC9D,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,KAAc;IACvB,MAAM;CACP,CAAC,CAAA;AAEF,uBAAuB,CAAC,iBAAiB,GAAG,CAAC,QAA2B,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,KAAc;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,KAAK;QACZ,OAAO,EAAE,cAAc;QACvB,GAAG,KAAK;KACU;CACrB,CAAC,CAAA;AAEF,MAAM,UAAU,6BAA6B,CAAC,EAAU;IACtD,MAAM,cAAc,GAAG;QACrB,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACzC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC1B,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;QACjC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAClB,OAAO,CAAC,OAAO,CAAC;YACd,EAAE,EAAE,iBAAiB;YACrB,OAAO,EAAE,KAAc;YACvB,8DAA8D;YAC9D,MAAM,EAAE,EAAS;SAClB,CAAC,CACH;QACD,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,wBAAwB,EAAE,EAAE,CAAC,EAAE,EAAE;QACjC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;KACzB,CAGA;IAAC,MAAc,CAAC,EAAE,CAAC,GAAG,cAAc,CAAA;IAErC,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export function mockUTXO(replaces = {}) {
2
+ return {
3
+ txid: 'mock_txid',
4
+ vout: 0,
5
+ value: 1000,
6
+ status: {
7
+ confirmed: true,
8
+ block_height: 1,
9
+ block_hash: 'mock_block_hash',
10
+ block_time: 1
11
+ },
12
+ ...replaces
13
+ };
14
+ }
15
+ //# sourceMappingURL=mockUTXO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockUTXO.js","sourceRoot":"","sources":["../../../../tests/mocks/mockUTXO.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,WAAqC,EAAE;IAC9D,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,CAAC;SACd;QACD,GAAG,QAAQ;KACZ,CAAA;AACH,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { vi } from 'vitest';
2
+ import { bitcoin } from '@reown/appkit/networks';
3
+ export function mockUniversalProvider(replaces = {}) {
4
+ return {
5
+ connect: vi.fn(),
6
+ disconnect: vi.fn(),
7
+ request: vi.fn(),
8
+ on: vi.fn(),
9
+ client: {
10
+ core: {
11
+ crypto: {
12
+ getClientId: vi.fn(() => Promise.resolve('client-id'))
13
+ }
14
+ }
15
+ },
16
+ setDefaultChain: vi.fn(),
17
+ ...replaces
18
+ };
19
+ }
20
+ mockUniversalProvider.mockSession = (replaces = {}) => ({
21
+ acknowledged: false,
22
+ authentication: [],
23
+ controller: '',
24
+ expiry: 0,
25
+ namespaces: {
26
+ bip122: {
27
+ accounts: [`${bitcoin.caipNetworkId}:address`],
28
+ events: [],
29
+ methods: ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
30
+ }
31
+ },
32
+ optionalNamespaces: {},
33
+ pairingTopic: '',
34
+ peer: {
35
+ metadata: {
36
+ description: '',
37
+ url: '',
38
+ icons: [],
39
+ name: '',
40
+ redirect: undefined,
41
+ verifyUrl: ''
42
+ },
43
+ publicKey: ''
44
+ },
45
+ relay: {
46
+ protocol: '',
47
+ data: undefined
48
+ },
49
+ requiredNamespaces: {},
50
+ self: {
51
+ metadata: {
52
+ description: '',
53
+ url: '',
54
+ icons: [],
55
+ name: '',
56
+ redirect: undefined,
57
+ verifyUrl: ''
58
+ },
59
+ publicKey: ''
60
+ },
61
+ topic: '',
62
+ ...replaces
63
+ });
64
+ //# sourceMappingURL=mockUniversalProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockUniversalProvider.js","sourceRoot":"","sources":["../../../../tests/mocks/mockUniversalProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,MAAM,UAAU,qBAAqB,CACnC,WAAuC,EAAE;IAEzC,OAAO;QACL,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QACX,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;iBACvD;aACF;SACF;QACD,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;QACxB,GAAG,QAAQ;KACS,CAAA;AACxB,CAAC;AAED,qBAAqB,CAAC,WAAW,GAAG,CAClC,WAAyC,EAAE,EACtB,EAAE,CAAC,CAAC;IACzB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC;IACT,UAAU,EAAE;QACV,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,UAAU,CAAC;YAC9C,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,qBAAqB,CAAC;SAC5E;KACF;IACD,kBAAkB,EAAE,EAAE;IACtB,YAAY,EAAE,EAAE;IAChB,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE;SACd;QACD,SAAS,EAAE,EAAE;KACd;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,SAAS;KAChB;IACD,kBAAkB,EAAE,EAAE;IACtB,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE;SACd;QACD,SAAS,EAAE,EAAE;KACd;IACD,KAAK,EAAE,EAAE;IACT,GAAG,QAAQ;CACZ,CAAC,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { vi } from 'vitest';
2
+ import { bitcoin } from '@reown/appkit/networks';
3
+ export function mockWalletStandardProvider(replaces = {}) {
4
+ return {
5
+ accounts: [],
6
+ features: mockWalletStandardProvider.mockFeatures(),
7
+ chains: [bitcoin.caipNetworkId],
8
+ icon: 'data:image/svg+xml;base64,mock',
9
+ name: 'mock_wallet',
10
+ version: '1.0.0',
11
+ ...replaces
12
+ };
13
+ }
14
+ mockWalletStandardProvider.mockFeatures = (replaces = {}) => ({
15
+ 'bitcoin:connect': {
16
+ connect: async () => Promise.resolve({ accounts: [mockWalletStandardProvider.mockAccount()] }),
17
+ version: '1.0.0'
18
+ },
19
+ 'bitcoin:signMessage': {
20
+ signMessage: async () => Promise.resolve([{ signature: Uint8Array.from([]), signedMessage: Uint8Array.from([]) }]),
21
+ version: '1.0.0'
22
+ },
23
+ 'bitcoin:signTransaction': {
24
+ signTransaction: async () => Promise.resolve([{ signedPsbt: Uint8Array.from([]) }]),
25
+ version: '1.0.0'
26
+ },
27
+ 'standard:events': {
28
+ on: vi.fn(),
29
+ version: '1.0.0'
30
+ },
31
+ ...replaces
32
+ });
33
+ mockWalletStandardProvider.mockAccount = (replaces = {}) => ({
34
+ address: 'mock_address',
35
+ chains: [bitcoin.caipNetworkId],
36
+ features: [
37
+ 'bitcoin:connect',
38
+ 'bitcoin:signMessage',
39
+ 'bitcoin:signTransaction',
40
+ 'standard:events'
41
+ ],
42
+ icon: 'data:image/svg+xml;base64,mock',
43
+ publicKey: Uint8Array.from([]),
44
+ label: 'mock_label',
45
+ ...replaces
46
+ });
47
+ //# sourceMappingURL=mockWalletStandard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockWalletStandard.js","sourceRoot":"","sources":["../../../../tests/mocks/mockWalletStandard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAIhD,MAAM,UAAU,0BAA0B,CAAC,WAA4B,EAAE;IACvE,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,0BAA0B,CAAC,YAAY,EAAE;QACnD,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;QAC/B,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;QAChB,GAAG,QAAQ;KACZ,CAAA;AACH,CAAC;AAED,0BAA0B,CAAC,YAAY,GAAG,CACxC,WAAqC,EAAE,EACtB,EAAE,CAAC,CAAC;IACrB,iBAAiB,EAAE;QACjB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9F,OAAO,EAAE,OAAO;KACjB;IACD,qBAAqB,EAAE;QACrB,WAAW,EAAE,KAAK,IAAI,EAAE,CACtB,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO;KACjB;IACD,yBAAyB,EAAE;QACzB,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,OAAO;KACjB;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,EAAE,CAAC,EAAE,EAA0B;QACnC,OAAO,EAAE,OAAO;KACjB;IACD,GAAG,QAAQ;CACZ,CAAC,CAAA;AAEF,0BAA0B,CAAC,WAAW,GAAG,CACvC,WAAmC,EAAE,EACtB,EAAE,CAAC,CAAC;IACnB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/B,QAAQ,EAAE;QACR,iBAAiB;QACjB,qBAAqB;QACrB,yBAAyB;QACzB,iBAAiB;KAClB;IACD,IAAI,EAAE,gCAAgC;IACtC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B,KAAK,EAAE,YAAY;IACnB,GAAG,QAAQ;CACZ,CAAC,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { bitcoin, bitcoinTestnet } from '@reown/appkit/networks';
3
+ import { BitcoinApi } from '../../src/utils/BitcoinApi';
4
+ import { mockUTXO } from '../mocks/mockUTXO';
5
+ describe('BitcoinApi', () => {
6
+ describe('getUTXOs', () => {
7
+ it('should fetch UTXOs', async () => {
8
+ const fetchSpy = vi.spyOn(global, 'fetch');
9
+ const mockedUTXOs = [mockUTXO(), mockUTXO({ txid: 'mock_txid2' })];
10
+ fetchSpy.mockResolvedValueOnce({
11
+ ok: true,
12
+ json: vi.fn(() => Promise.resolve(mockedUTXOs))
13
+ });
14
+ const response = await BitcoinApi.getUTXOs({
15
+ network: bitcoin,
16
+ address: 'mock_address'
17
+ });
18
+ expect(response).toEqual(mockedUTXOs);
19
+ expect(fetchSpy).toHaveBeenCalledWith('https://mempool.space/api/address/mock_address/utxo');
20
+ });
21
+ it('should use testnet endpoint', async () => {
22
+ const fetchSpy = vi.spyOn(global, 'fetch');
23
+ const mockedUTXOs = [mockUTXO({})];
24
+ fetchSpy.mockResolvedValueOnce({
25
+ ok: true,
26
+ json: vi.fn(() => Promise.resolve(mockedUTXOs))
27
+ });
28
+ const response = await BitcoinApi.getUTXOs({
29
+ network: bitcoinTestnet,
30
+ address: 'mock_address'
31
+ });
32
+ expect(response).toEqual(mockedUTXOs);
33
+ expect(fetchSpy).toHaveBeenCalledWith('https://mempool.space/testnet/api/address/mock_address/utxo');
34
+ });
35
+ it('should throw an error if the request fails', async () => {
36
+ const fetchSpy = vi.spyOn(global, 'fetch');
37
+ fetchSpy.mockResolvedValueOnce({
38
+ ok: false,
39
+ text: vi.fn(() => Promise.resolve('mock_error'))
40
+ });
41
+ await expect(BitcoinApi.getUTXOs({
42
+ network: bitcoin,
43
+ address: 'mock_address'
44
+ })).rejects.toThrow('Failed to fetch UTXOs: mock_error');
45
+ });
46
+ });
47
+ });
48
+ //# sourceMappingURL=BitcoinApi.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinApi.test.js","sourceRoot":"","sources":["../../../../tests/utils/BitcoinApi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC1C,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;YAElE,QAAQ,CAAC,qBAAqB,CAAC;gBAC7B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aACzC,CAAC,CAAA;YAET,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;gBACzC,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,cAAc;aACxB,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,qDAAqD,CAAC,CAAA;QAC9F,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC1C,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YAElC,QAAQ,CAAC,qBAAqB,CAAC;gBAC7B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aACzC,CAAC,CAAA;YAET,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;gBACzC,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,cAAc;aACxB,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,6DAA6D,CAC9D,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAE1C,QAAQ,CAAC,qBAAqB,CAAC;gBAC7B,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aAC1C,CAAC,CAAA;YAET,MAAM,MAAM,CACV,UAAU,CAAC,QAAQ,CAAC;gBAClB,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,cAAc;aACxB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { bitcoin } from '@reown/appkit/networks';
3
+ import { UnitsUtil } from '../../src/utils/UnitsUtil';
4
+ describe('UnitsUtils', () => {
5
+ describe('parseSatoshis', () => {
6
+ it.each([
7
+ ['100000000', '1'],
8
+ ['10000000', '0.1'],
9
+ ['1000000', '0.01'],
10
+ ['100000', '0.001'],
11
+ ['10000', '0.0001'],
12
+ ['1000', '0.00001'],
13
+ ['100', '0.000001'],
14
+ ['10', '0.0000001'],
15
+ ['1', '0.00000001']
16
+ ])('should parse %s satoshis to %s btc', (satoshis, expected) => {
17
+ expect(UnitsUtil.parseSatoshis(satoshis, bitcoin)).toEqual(expected);
18
+ });
19
+ });
20
+ });
21
+ //# sourceMappingURL=UnitsUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnitsUtils.test.js","sourceRoot":"","sources":["../../../../tests/utils/UnitsUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,IAAI,CAAC;YACN,CAAC,WAAW,EAAE,GAAG,CAAC;YAClB,CAAC,UAAU,EAAE,KAAK,CAAC;YACnB,CAAC,SAAS,EAAE,MAAM,CAAC;YACnB,CAAC,QAAQ,EAAE,OAAO,CAAC;YACnB,CAAC,OAAO,EAAE,QAAQ,CAAC;YACnB,CAAC,MAAM,EAAE,SAAS,CAAC;YACnB,CAAC,KAAK,EAAE,UAAU,CAAC;YACnB,CAAC,IAAI,EAAE,WAAW,CAAC;YACnB,CAAC,GAAG,EAAE,YAAY,CAAC;SACpB,CAAC,CAAC,oCAAoC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC9D,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}