@reown/appkit 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 (83) hide show
  1. package/dist/esm/exports/constants.js +1 -1
  2. package/dist/esm/exports/constants.js.map +1 -1
  3. package/dist/esm/package.json +1 -1
  4. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  5. package/dist/types/exports/constants.d.ts +1 -1
  6. package/dist/types/src/client/appkit-base-client.d.ts +1 -1
  7. package/package.json +9 -9
  8. package/dist/esm/tests/client/adapter-management.test.js +0 -85
  9. package/dist/esm/tests/client/adapter-management.test.js.map +0 -1
  10. package/dist/esm/tests/client/appkit-core.test.js +0 -88
  11. package/dist/esm/tests/client/appkit-core.test.js.map +0 -1
  12. package/dist/esm/tests/client/balance.test.js +0 -56
  13. package/dist/esm/tests/client/balance.test.js.map +0 -1
  14. package/dist/esm/tests/client/connection.test.js +0 -191
  15. package/dist/esm/tests/client/connection.test.js.map +0 -1
  16. package/dist/esm/tests/client/debug-mode.test.js +0 -64
  17. package/dist/esm/tests/client/debug-mode.test.js.map +0 -1
  18. package/dist/esm/tests/client/estimate-gas.test.js +0 -117
  19. package/dist/esm/tests/client/estimate-gas.test.js.map +0 -1
  20. package/dist/esm/tests/client/initialization.test.js +0 -121
  21. package/dist/esm/tests/client/initialization.test.js.map +0 -1
  22. package/dist/esm/tests/client/listeners.test.js +0 -130
  23. package/dist/esm/tests/client/listeners.test.js.map +0 -1
  24. package/dist/esm/tests/client/public-methods.test.js +0 -823
  25. package/dist/esm/tests/client/public-methods.test.js.map +0 -1
  26. package/dist/esm/tests/client/universal-adapter.test.js +0 -46
  27. package/dist/esm/tests/client/universal-adapter.test.js.map +0 -1
  28. package/dist/esm/tests/client/walletconnect-events.test.js +0 -82
  29. package/dist/esm/tests/client/walletconnect-events.test.js.map +0 -1
  30. package/dist/esm/tests/connectors/WalletConnectConnector.test.js +0 -63
  31. package/dist/esm/tests/connectors/WalletConnectConnector.test.js.map +0 -1
  32. package/dist/esm/tests/library/vue.test.js +0 -75
  33. package/dist/esm/tests/library/vue.test.js.map +0 -1
  34. package/dist/esm/tests/mocks/Account.js +0 -13
  35. package/dist/esm/tests/mocks/Account.js.map +0 -1
  36. package/dist/esm/tests/mocks/Adapter.js +0 -100
  37. package/dist/esm/tests/mocks/Adapter.js.map +0 -1
  38. package/dist/esm/tests/mocks/AppKit.js +0 -24
  39. package/dist/esm/tests/mocks/AppKit.js.map +0 -1
  40. package/dist/esm/tests/mocks/LocalStorage.js +0 -37
  41. package/dist/esm/tests/mocks/LocalStorage.js.map +0 -1
  42. package/dist/esm/tests/mocks/Networks.js +0 -17
  43. package/dist/esm/tests/mocks/Networks.js.map +0 -1
  44. package/dist/esm/tests/mocks/Options.js +0 -17
  45. package/dist/esm/tests/mocks/Options.js.map +0 -1
  46. package/dist/esm/tests/mocks/Providers.js +0 -46
  47. package/dist/esm/tests/mocks/Providers.js.map +0 -1
  48. package/dist/esm/tests/mocks/UniversalProvider.js +0 -139
  49. package/dist/esm/tests/mocks/UniversalProvider.js.map +0 -1
  50. package/dist/esm/tests/siwe.test.js +0 -261
  51. package/dist/esm/tests/siwe.test.js.map +0 -1
  52. package/dist/esm/tests/test-utils.js +0 -53
  53. package/dist/esm/tests/test-utils.js.map +0 -1
  54. package/dist/esm/tests/universal-adapter.test.js +0 -246
  55. package/dist/esm/tests/universal-adapter.test.js.map +0 -1
  56. package/dist/esm/tests/utils/HelpersUtil.test.js +0 -416
  57. package/dist/esm/tests/utils/HelpersUtil.test.js.map +0 -1
  58. package/dist/esm/tsconfig.tsbuildinfo +0 -1
  59. package/dist/types/tests/client/adapter-management.test.d.ts +0 -1
  60. package/dist/types/tests/client/appkit-core.test.d.ts +0 -1
  61. package/dist/types/tests/client/balance.test.d.ts +0 -1
  62. package/dist/types/tests/client/connection.test.d.ts +0 -1
  63. package/dist/types/tests/client/debug-mode.test.d.ts +0 -1
  64. package/dist/types/tests/client/estimate-gas.test.d.ts +0 -1
  65. package/dist/types/tests/client/initialization.test.d.ts +0 -1
  66. package/dist/types/tests/client/listeners.test.d.ts +0 -1
  67. package/dist/types/tests/client/public-methods.test.d.ts +0 -1
  68. package/dist/types/tests/client/universal-adapter.test.d.ts +0 -1
  69. package/dist/types/tests/client/walletconnect-events.test.d.ts +0 -1
  70. package/dist/types/tests/connectors/WalletConnectConnector.test.d.ts +0 -1
  71. package/dist/types/tests/library/vue.test.d.ts +0 -1
  72. package/dist/types/tests/mocks/Account.d.ts +0 -12
  73. package/dist/types/tests/mocks/Adapter.d.ts +0 -8
  74. package/dist/types/tests/mocks/AppKit.d.ts +0 -3
  75. package/dist/types/tests/mocks/LocalStorage.d.ts +0 -12
  76. package/dist/types/tests/mocks/Networks.d.ts +0 -4
  77. package/dist/types/tests/mocks/Options.d.ts +0 -6
  78. package/dist/types/tests/mocks/Providers.d.ts +0 -42
  79. package/dist/types/tests/mocks/UniversalProvider.d.ts +0 -3
  80. package/dist/types/tests/siwe.test.d.ts +0 -1
  81. package/dist/types/tests/test-utils.d.ts +0 -5
  82. package/dist/types/tests/universal-adapter.test.d.ts +0 -1
  83. package/dist/types/tests/utils/HelpersUtil.test.d.ts +0 -1
@@ -1,823 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { ConstantsUtil, SafeLocalStorage, SafeLocalStorageKeys, getSafeConnectorIdKey } from '@reown/appkit-common';
3
- import { AccountController, ApiController, AssetUtil, BlockchainApiController, ChainController, ConnectionController, ConnectorController, CoreHelperUtil, EnsController, EventsController, ModalController, OptionsController, PublicStateController, RouterController, SnackController, StorageUtil, ThemeController } from '@reown/appkit-controllers';
4
- import { CaipNetworksUtil } from '@reown/appkit-utils';
5
- import { ProviderUtil } from '@reown/appkit-utils';
6
- import { AppKit } from '../../src/client/appkit.js';
7
- import { mockEvmAdapter, mockSolanaAdapter, mockUniversalAdapter } from '../mocks/Adapter.js';
8
- import { base, mainnet, polygon, sepolia, solana } from '../mocks/Networks.js';
9
- import { mockOptions } from '../mocks/Options.js';
10
- import { mockAuthProvider, mockProvider, mockUniversalProvider } from '../mocks/Providers.js';
11
- import { mockBlockchainApiController, mockStorageUtil, mockWindowAndDocument } from '../test-utils.js';
12
- describe('Base Public methods', () => {
13
- beforeEach(() => {
14
- mockWindowAndDocument();
15
- mockStorageUtil();
16
- mockBlockchainApiController();
17
- });
18
- it('should open modal', async () => {
19
- const prefetch = vi.spyOn(ApiController, 'prefetch').mockResolvedValueOnce([]);
20
- const open = vi.spyOn(ModalController, 'open');
21
- const appKit = new AppKit(mockOptions);
22
- await appKit.open();
23
- expect(open).toHaveBeenCalled();
24
- expect(prefetch).toHaveBeenCalled();
25
- });
26
- it('should open different views', async () => {
27
- const modelOpen = vi.spyOn(ModalController, 'open');
28
- const views = [
29
- 'Account',
30
- 'Connect',
31
- 'Networks',
32
- 'ApproveTransaction',
33
- 'OnRampProviders',
34
- 'ConnectingWalletConnectBasic',
35
- 'Swap',
36
- 'WhatIsAWallet',
37
- 'WhatIsANetwork',
38
- 'AllWallets',
39
- 'WalletSend'
40
- ];
41
- const appkit = new AppKit(mockOptions);
42
- for (const view of views) {
43
- await appkit.open({ view });
44
- expect(modelOpen).toHaveBeenCalledWith({ view });
45
- }
46
- });
47
- it('should filter connectors by namespace when opening modal', async () => {
48
- const openSpy = vi.spyOn(ModalController, 'open');
49
- const setFilterByNamespaceSpy = vi.spyOn(ConnectorController, 'setFilterByNamespace');
50
- const appKit = new AppKit(mockOptions);
51
- await appKit.open({ view: 'Connect', namespace: 'eip155' });
52
- expect(openSpy).toHaveBeenCalled();
53
- expect(setFilterByNamespaceSpy).toHaveBeenCalledWith('eip155');
54
- });
55
- it('should close modal', async () => {
56
- const close = vi.spyOn(ModalController, 'close');
57
- const appKit = new AppKit(mockOptions);
58
- await appKit.close();
59
- expect(close).toHaveBeenCalled();
60
- });
61
- it('should set loading state', () => {
62
- const setLoading = vi.spyOn(ModalController, 'setLoading');
63
- const appKit = new AppKit(mockOptions);
64
- appKit.setLoading(true);
65
- expect(setLoading).toHaveBeenCalledWith(true, undefined);
66
- });
67
- it('should get theme mode', () => {
68
- vi.spyOn(ThemeController.state, 'themeMode', 'get').mockReturnValueOnce('dark');
69
- const appKit = new AppKit(mockOptions);
70
- expect(appKit.getThemeMode()).toBe('dark');
71
- });
72
- it('should set theme mode', () => {
73
- const setThemeMode = vi.spyOn(ThemeController, 'setThemeMode');
74
- const appKit = new AppKit(mockOptions);
75
- appKit.setThemeMode('light');
76
- expect(setThemeMode).toHaveBeenCalledWith('light');
77
- });
78
- it('should get theme variables', () => {
79
- vi.spyOn(ThemeController.state, 'themeVariables', 'get').mockReturnValueOnce({
80
- '--w3m-accent': '#000'
81
- });
82
- const appKit = new AppKit(mockOptions);
83
- expect(appKit.getThemeVariables()).toEqual({ '--w3m-accent': '#000' });
84
- });
85
- it('should set theme variables', () => {
86
- const setThemeVariables = vi.spyOn(ThemeController, 'setThemeVariables');
87
- const appKit = new AppKit(mockOptions);
88
- const themeVariables = { '--w3m-accent': '#fff' };
89
- appKit.setThemeVariables(themeVariables);
90
- expect(setThemeVariables).toHaveBeenCalledWith(themeVariables);
91
- });
92
- it('should subscribe to theme changes', () => {
93
- const subscribe = vi.spyOn(ThemeController, 'subscribe');
94
- const callback = vi.fn();
95
- const appKit = new AppKit(mockOptions);
96
- appKit.subscribeTheme(callback);
97
- expect(subscribe).toHaveBeenCalledWith(callback);
98
- });
99
- it('should get wallet info', () => {
100
- const appKit = new AppKit(mockOptions);
101
- appKit.setConnectedWalletInfo({ name: 'Test Wallet' }, 'eip155');
102
- expect(appKit.getWalletInfo()).toEqual({ name: 'Test Wallet' });
103
- });
104
- it('should subscribe to wallet info changes', () => {
105
- const subscribe = vi.spyOn(AccountController, 'subscribeKey');
106
- const callback = vi.fn();
107
- const appKit = new AppKit(mockOptions);
108
- appKit.subscribeWalletInfo(callback);
109
- expect(subscribe).toHaveBeenCalledWith('connectedWalletInfo', callback);
110
- });
111
- it('should subscribe to address updates', () => {
112
- const subscribe = vi.spyOn(AccountController, 'subscribeKey');
113
- const callback = vi.fn();
114
- const appKit = new AppKit(mockOptions);
115
- appKit.subscribeShouldUpdateToAddress(callback);
116
- expect(subscribe).toHaveBeenCalledWith('shouldUpdateToAddress', callback);
117
- });
118
- it('should subscribe to CAIP network changes', () => {
119
- const subscribeKey = vi.spyOn(ChainController, 'subscribeKey');
120
- const callback = vi.fn();
121
- const appKit = new AppKit(mockOptions);
122
- appKit.subscribeCaipNetworkChange(callback);
123
- expect(subscribeKey).toHaveBeenCalledWith('activeCaipNetwork', callback);
124
- });
125
- it('should subscribe to state changes', () => {
126
- const subscribe = vi.spyOn(PublicStateController, 'subscribe');
127
- const callback = vi.fn();
128
- const appKit = new AppKit(mockOptions);
129
- appKit.subscribeState(callback);
130
- expect(subscribe).toHaveBeenCalledWith(callback);
131
- });
132
- it('should show error message', () => {
133
- const showError = vi.spyOn(SnackController, 'showError');
134
- const appKit = new AppKit(mockOptions);
135
- appKit.showErrorMessage('Test error');
136
- expect(showError).toHaveBeenCalledWith('Test error');
137
- });
138
- it('should show success message', () => {
139
- const showSuccess = vi.spyOn(SnackController, 'showSuccess');
140
- const appKit = new AppKit(mockOptions);
141
- appKit.showSuccessMessage('Test success');
142
- expect(showSuccess).toHaveBeenCalledWith('Test success');
143
- });
144
- it('should get event', () => {
145
- const appKit = new AppKit(mockOptions);
146
- expect(appKit.getEvent()).toEqual(EventsController.state);
147
- });
148
- it('should subscribe to events', () => {
149
- const subscribe = vi.spyOn(EventsController, 'subscribe');
150
- const callback = vi.fn();
151
- const appKit = new AppKit(mockOptions);
152
- appKit.subscribeEvents(callback);
153
- expect(subscribe).toHaveBeenCalledWith(callback);
154
- });
155
- it('should replace route', () => {
156
- const replace = vi.spyOn(RouterController, 'replace');
157
- const appKit = new AppKit(mockOptions);
158
- appKit.replace('Connect');
159
- expect(replace).toHaveBeenCalledWith('Connect');
160
- });
161
- it('should redirect to route', () => {
162
- const push = vi.spyOn(RouterController, 'push');
163
- const appKit = new AppKit(mockOptions);
164
- appKit.redirect('Networks');
165
- expect(push).toHaveBeenCalledWith('Networks');
166
- });
167
- it('should pop transaction stack', () => {
168
- const popTransactionStack = vi.spyOn(RouterController, 'popTransactionStack');
169
- const appKit = new AppKit(mockOptions);
170
- appKit.popTransactionStack(true);
171
- expect(popTransactionStack).toHaveBeenCalledWith(true);
172
- });
173
- it('should check if modal is open', async () => {
174
- vi.spyOn(AppKit.prototype, 'injectModalUi').mockResolvedValueOnce(vi.fn());
175
- const appKit = new AppKit(mockOptions);
176
- await appKit.open();
177
- expect(appKit.isOpen()).toBe(true);
178
- });
179
- it('should check if transaction stack is empty', () => {
180
- const appKit = new AppKit(mockOptions);
181
- expect(appKit.isTransactionStackEmpty()).toBe(true);
182
- });
183
- it('should set status', () => {
184
- const setStatus = vi.spyOn(AccountController, 'setStatus');
185
- const appKit = new AppKit(mockOptions);
186
- appKit.setStatus('connected', 'eip155');
187
- expect(setStatus).toHaveBeenCalledWith('connected', 'eip155');
188
- });
189
- it('should set all accounts', () => {
190
- const setAllAccounts = vi.spyOn(AccountController, 'setAllAccounts');
191
- const setHasMultipleAddresses = vi.spyOn(OptionsController, 'setHasMultipleAddresses');
192
- const evmAddresses = [
193
- { address: '0x1', namespace: 'eip155', type: 'eoa' },
194
- { address: '0x2', namespace: 'eip155', type: 'smartAccount' }
195
- ];
196
- const solanaAddresses = [{ address: 'asdbjk', namespace: 'solana', type: 'eoa' }];
197
- const bip122Addresses = [
198
- { address: 'asdasd1', namespace: 'bip122', type: 'payment' },
199
- { address: 'asdasd2', namespace: 'bip122', type: 'ordinal' },
200
- { address: 'ASDASD3', namespace: 'bip122', type: 'stx' }
201
- ];
202
- const appKit = new AppKit(mockOptions);
203
- appKit.setAllAccounts(evmAddresses, 'eip155');
204
- appKit.setAllAccounts(solanaAddresses, 'solana');
205
- appKit.setAllAccounts(bip122Addresses, 'bip122');
206
- expect(setAllAccounts).toHaveBeenCalledWith(evmAddresses, 'eip155');
207
- expect(setAllAccounts).toHaveBeenCalledWith(solanaAddresses, 'solana');
208
- expect(setAllAccounts).toHaveBeenCalledWith(bip122Addresses, 'bip122');
209
- expect(setHasMultipleAddresses).toHaveBeenCalledWith(true);
210
- });
211
- it('should add address label', () => {
212
- const addAddressLabel = vi.spyOn(AccountController, 'addAddressLabel');
213
- const appKit = new AppKit(mockOptions);
214
- appKit.addAddressLabel('0x123', 'eip155 Address', 'eip155');
215
- expect(addAddressLabel).toHaveBeenCalledWith('0x123', 'eip155 Address', 'eip155');
216
- });
217
- it('should remove address label', () => {
218
- const removeAddressLabel = vi.spyOn(AccountController, 'removeAddressLabel');
219
- const appKit = new AppKit(mockOptions);
220
- appKit.removeAddressLabel('0x123', 'eip155');
221
- expect(removeAddressLabel).toHaveBeenCalledWith('0x123', 'eip155');
222
- });
223
- it('should get address and CAIP address', async () => {
224
- const mockAccountData = {
225
- address: '0x123',
226
- chainId: mainnet.id,
227
- chainNamespace: mainnet.chainNamespace
228
- };
229
- const appKit = new AppKit(mockOptions);
230
- await appKit['syncAccount'](mockAccountData);
231
- expect(appKit.getAddress()).toBe('0x123');
232
- expect(appKit.getCaipAddress()).toBe('eip155:1:0x123');
233
- });
234
- it('should get provider', () => {
235
- vi.spyOn(ProviderUtil, 'getProvider').mockReturnValue(mockProvider);
236
- const appKit = new AppKit(mockOptions);
237
- expect(appKit.getProvider('eip155')).toBe(mockProvider);
238
- vi.spyOn(ProviderUtil, 'getProvider').mockClear();
239
- });
240
- it('should get preferred account type', () => {
241
- const appKit = new AppKit(mockOptions);
242
- appKit.setPreferredAccountType('eoa', mainnet.chainNamespace);
243
- expect(appKit.getPreferredAccountType()).toBe('eoa');
244
- });
245
- it('should set CAIP address', () => {
246
- const setCaipAddress = vi.spyOn(AccountController, 'setCaipAddress');
247
- const appKit = new AppKit(mockOptions);
248
- appKit.setCaipAddress('eip155:1:0x123', 'eip155');
249
- expect(setCaipAddress).toHaveBeenCalledWith('eip155:1:0x123', 'eip155');
250
- expect(appKit.getIsConnectedState()).toBe(true);
251
- });
252
- it('should set balance', () => {
253
- const setBalance = vi.spyOn(AccountController, 'setBalance');
254
- const appKit = new AppKit(mockOptions);
255
- appKit.setBalance('1.5', 'ETH', 'eip155');
256
- expect(setBalance).toHaveBeenCalledWith('1.5', 'ETH', 'eip155');
257
- });
258
- it('should set profile name', () => {
259
- const setProfileName = vi.spyOn(AccountController, 'setProfileName');
260
- const appKit = new AppKit(mockOptions);
261
- appKit.setProfileName('John Doe', 'eip155');
262
- expect(setProfileName).toHaveBeenCalledWith('John Doe', 'eip155');
263
- });
264
- it('should set profile image', () => {
265
- const setProfileImage = vi.spyOn(AccountController, 'setProfileImage');
266
- const appKit = new AppKit(mockOptions);
267
- appKit.setProfileImage('https://example.com/image.png', 'eip155');
268
- expect(setProfileImage).toHaveBeenCalledWith('https://example.com/image.png', 'eip155');
269
- });
270
- it('should reset account', () => {
271
- const resetAccount = vi.spyOn(AccountController, 'resetAccount');
272
- const appKit = new AppKit(mockOptions);
273
- appKit.resetAccount('eip155');
274
- expect(resetAccount).toHaveBeenCalledWith('eip155');
275
- });
276
- it('should set CAIP network', () => {
277
- const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
278
- const appKit = new AppKit(mockOptions);
279
- appKit.setCaipNetwork(mainnet);
280
- expect(setActiveCaipNetwork).toHaveBeenCalledWith(mainnet);
281
- });
282
- it('should get CAIP network', () => {
283
- const appKit = new AppKit(mockOptions);
284
- expect(appKit.getCaipNetwork()).toEqual(mainnet);
285
- });
286
- it('should set requested CAIP networks', () => {
287
- const setRequestedCaipNetworks = vi.spyOn(ChainController, 'setRequestedCaipNetworks');
288
- const requestedNetworks = [mainnet];
289
- const appKit = new AppKit(mockOptions);
290
- appKit.setRequestedCaipNetworks(requestedNetworks, mainnet.chainNamespace);
291
- expect(setRequestedCaipNetworks).toHaveBeenCalledWith(requestedNetworks, mainnet.chainNamespace);
292
- });
293
- it('should set connectors', () => {
294
- const getConnectors = vi.spyOn(ConnectorController, 'getConnectors');
295
- const setConnectors = vi.spyOn(ConnectorController, 'setConnectors');
296
- const existingConnectors = [
297
- { id: 'phantom', name: 'Phantom', chain: 'eip155', type: 'INJECTED' }
298
- ];
299
- // Mock getConnectors to return existing connectors
300
- vi.mocked(getConnectors).mockReturnValue(existingConnectors);
301
- const newConnectors = [
302
- { id: 'metamask', name: 'MetaMask', chain: 'eip155', type: 'INJECTED' }
303
- ];
304
- const appKit = new AppKit(mockOptions);
305
- appKit.setConnectors(newConnectors);
306
- // Verify that setConnectors was called with combined array
307
- expect(setConnectors).toHaveBeenCalledWith([...existingConnectors, ...newConnectors]);
308
- });
309
- it('should add connector', () => {
310
- const addConnector = vi.spyOn(ConnectorController, 'addConnector');
311
- const connector = {
312
- id: 'metamask',
313
- name: 'MetaMask',
314
- chain: 'eip155',
315
- type: 'INJECTED'
316
- };
317
- const appKit = new AppKit(mockOptions);
318
- appKit.addConnector(connector);
319
- expect(addConnector).toHaveBeenCalledWith(connector);
320
- });
321
- it('should get connectors', () => {
322
- const getConnectors = vi.spyOn(ConnectorController, 'getConnectors');
323
- const mockConnectors = [
324
- { id: 'metamask', name: 'MetaMask', chain: 'eip155:1', type: 'INJECTED' }
325
- ];
326
- vi.mocked(getConnectors).mockReturnValue(mockConnectors);
327
- const appKit = new AppKit(mockOptions);
328
- expect(appKit.getConnectors()).toEqual(mockConnectors);
329
- });
330
- it('should get approved CAIP network IDs', () => {
331
- const getAllApprovedCaipNetworkIds = vi.spyOn(ChainController, 'getAllApprovedCaipNetworkIds');
332
- getAllApprovedCaipNetworkIds.mockReturnValueOnce([mainnet.caipNetworkId]);
333
- const appKit = new AppKit(mockOptions);
334
- expect(appKit.getApprovedCaipNetworkIds()).toEqual(['eip155:1']);
335
- });
336
- it('should set approved CAIP networks data', () => {
337
- const setApprovedCaipNetworksData = vi.spyOn(ChainController, 'setApprovedCaipNetworksData');
338
- const appKit = new AppKit(mockOptions);
339
- appKit.setApprovedCaipNetworksData('eip155');
340
- expect(setApprovedCaipNetworksData).toHaveBeenCalledWith('eip155');
341
- });
342
- it('should reset network', () => {
343
- const resetNetwork = vi.spyOn(ChainController, 'resetNetwork');
344
- const appKit = new AppKit(mockOptions);
345
- appKit.resetNetwork(mainnet.chainNamespace);
346
- expect(resetNetwork).toHaveBeenCalled();
347
- });
348
- it('should reset WC connection', () => {
349
- const resetWcConnection = vi.spyOn(ConnectionController, 'resetWcConnection');
350
- const appKit = new AppKit(mockOptions);
351
- appKit.resetWcConnection();
352
- expect(resetWcConnection).toHaveBeenCalled();
353
- });
354
- it('should fetch identity', async () => {
355
- const mockRequest = {
356
- caipNetworkId: mainnet.caipNetworkId,
357
- address: '0x123'
358
- };
359
- const fetchIdentity = vi.spyOn(BlockchainApiController, 'fetchIdentity');
360
- fetchIdentity.mockResolvedValue({
361
- name: 'John Doe',
362
- avatar: null
363
- });
364
- const appKit = new AppKit(mockOptions);
365
- const result = await appKit.fetchIdentity(mockRequest);
366
- expect(fetchIdentity).toHaveBeenCalledWith(mockRequest);
367
- expect(result).toEqual({ name: 'John Doe', avatar: null });
368
- });
369
- it('should set address explorer URL', () => {
370
- const setAddressExplorerUrl = vi.spyOn(AccountController, 'setAddressExplorerUrl');
371
- const appKit = new AppKit(mockOptions);
372
- appKit.setAddressExplorerUrl('https://etherscan.io/address/0x123', mainnet.chainNamespace);
373
- expect(setAddressExplorerUrl).toHaveBeenCalledWith('https://etherscan.io/address/0x123', mainnet.chainNamespace);
374
- });
375
- it('should set smart account deployed', () => {
376
- const setSmartAccountDeployed = vi.spyOn(AccountController, 'setSmartAccountDeployed');
377
- const appKit = new AppKit(mockOptions);
378
- appKit.setSmartAccountDeployed(true, mainnet.chainNamespace);
379
- expect(setSmartAccountDeployed).toHaveBeenCalledWith(true, mainnet.chainNamespace);
380
- });
381
- it('should set connected wallet info', () => {
382
- const walletInfo = { name: 'MetaMask', icon: 'icon-url' };
383
- const setConnectedWalletInfo = vi.spyOn(AccountController, 'setConnectedWalletInfo');
384
- const appKit = new AppKit(mockOptions);
385
- appKit.setConnectedWalletInfo(walletInfo, mainnet.chainNamespace);
386
- expect(setConnectedWalletInfo).toHaveBeenCalledWith(walletInfo, mainnet.chainNamespace);
387
- });
388
- it('should set connected wallet info with type', () => {
389
- const walletInfo = { name: 'MetaMask', icon: 'icon-url' };
390
- const setConnectedWalletInfo = vi.spyOn(AccountController, 'setConnectedWalletInfo');
391
- vi.spyOn(ProviderUtil, 'getProviderId').mockReturnValueOnce('WALLET_CONNECT');
392
- const appKit = new AppKit(mockOptions);
393
- appKit.setConnectedWalletInfo(walletInfo, mainnet.chainNamespace);
394
- expect(setConnectedWalletInfo).toHaveBeenCalledWith({ ...walletInfo, type: 'WALLET_CONNECT' }, mainnet.chainNamespace);
395
- });
396
- it('should set smart account enabled networks', () => {
397
- const networks = [1, 137];
398
- const setSmartAccountEnabledNetworks = vi.spyOn(ChainController, 'setSmartAccountEnabledNetworks');
399
- const appKit = new AppKit(mockOptions);
400
- appKit.setSmartAccountEnabledNetworks(networks, mainnet.chainNamespace);
401
- expect(setSmartAccountEnabledNetworks).toHaveBeenCalledWith(networks, mainnet.chainNamespace);
402
- });
403
- it('should set preferred account type', () => {
404
- const setPreferredAccountType = vi.spyOn(AccountController, 'setPreferredAccountType');
405
- const appKit = new AppKit(mockOptions);
406
- appKit.setPreferredAccountType('eoa', mainnet.chainNamespace);
407
- expect(setPreferredAccountType).toHaveBeenCalledWith('eoa', mainnet.chainNamespace);
408
- });
409
- it('should create accounts with correct account types from user accounts', async () => {
410
- const createAccount = vi.spyOn(CoreHelperUtil, 'createAccount');
411
- const setAllAccounts = vi.spyOn(AccountController, 'setAllAccounts');
412
- const setPreferredAccountType = vi.spyOn(AccountController, 'setPreferredAccountType');
413
- const appKitWithAuth = new AppKit(mockOptions);
414
- appKitWithAuth.authProvider = mockAuthProvider;
415
- await appKitWithAuth.syncAuthConnector(mockAuthProvider, mainnet.chainNamespace);
416
- await vi.waitFor(() => {
417
- expect(createAccount).toHaveBeenCalledWith(mainnet.chainNamespace, '0x1', 'eoa');
418
- expect(createAccount).toHaveBeenCalledWith(mainnet.chainNamespace, '0x2', 'smartAccount');
419
- expect(setAllAccounts).toHaveBeenCalledWith([
420
- { address: '0x1', type: 'eoa', namespace: mainnet.chainNamespace },
421
- { address: '0x2', type: 'smartAccount', namespace: mainnet.chainNamespace }
422
- ], mainnet.chainNamespace);
423
- expect(setPreferredAccountType).toHaveBeenCalledWith('eoa', mainnet.chainNamespace);
424
- }, { interval: 100, timeout: 2000 });
425
- });
426
- it('should get Reown name', async () => {
427
- const getNamesForAddress = vi.spyOn(EnsController, 'getNamesForAddress');
428
- getNamesForAddress.mockResolvedValue([
429
- {
430
- name: 'john.reown.id',
431
- addresses: { eip155: { address: '0x123', created: '0' } },
432
- attributes: [],
433
- registered: 0,
434
- updated: 0
435
- }
436
- ]);
437
- const appKit = new AppKit(mockOptions);
438
- const result = await appKit.getReownName('john.reown.id');
439
- expect(getNamesForAddress).toHaveBeenCalledWith('john.reown.id');
440
- expect(result).toEqual([
441
- {
442
- name: 'john.reown.id',
443
- addresses: { eip155: { address: '0x123', created: '0' } },
444
- attributes: [],
445
- registered: 0,
446
- updated: 0
447
- }
448
- ]);
449
- });
450
- it('should set EIP6963 enabled', () => {
451
- const setEIP6963Enabled = vi.spyOn(OptionsController, 'setEIP6963Enabled');
452
- const appKit = new AppKit(mockOptions);
453
- appKit.setEIP6963Enabled(true);
454
- expect(setEIP6963Enabled).toHaveBeenCalledWith(true);
455
- });
456
- it('should set client ID', () => {
457
- const setClientId = vi.spyOn(BlockchainApiController, 'setClientId');
458
- const appKit = new AppKit(mockOptions);
459
- appKit.setClientId('client-123');
460
- expect(setClientId).toHaveBeenCalledWith('client-123');
461
- });
462
- it('should get connector image', () => {
463
- const getConnectorImage = vi.spyOn(AssetUtil, 'getConnectorImage');
464
- getConnectorImage.mockReturnValue('connector-image-url');
465
- const appKit = new AppKit(mockOptions);
466
- const result = appKit.getConnectorImage({
467
- id: 'metamask',
468
- type: 'INJECTED',
469
- chain: 'eip155',
470
- name: 'Metamask'
471
- });
472
- expect(AssetUtil.getConnectorImage).toHaveBeenCalledWith({
473
- id: 'metamask',
474
- type: 'INJECTED',
475
- chain: 'eip155',
476
- name: 'Metamask'
477
- });
478
- expect(result).toBe('connector-image-url');
479
- });
480
- it('should switch network when requested', async () => {
481
- const switchActiveNetwork = vi.spyOn(ChainController, 'switchActiveNetwork');
482
- vi.mocked(ChainController.switchActiveNetwork).mockResolvedValueOnce(undefined);
483
- const appKit = new AppKit(mockOptions);
484
- await appKit.switchNetwork(mainnet);
485
- expect(switchActiveNetwork).toHaveBeenCalledWith(expect.objectContaining({
486
- id: mainnet.id,
487
- name: mainnet.name
488
- }));
489
- await appKit.switchNetwork(polygon);
490
- expect(switchActiveNetwork).toHaveBeenCalledTimes(1);
491
- });
492
- it('should use the correct network when syncing account if it does not allow all networks and network is not allowed', async () => {
493
- const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
494
- const fetchTokenBalance = vi.spyOn(AccountController, 'fetchTokenBalance');
495
- const getActiveNetworkProps = vi.spyOn(StorageUtil, 'getActiveNetworkProps');
496
- const getNetworkProp = vi.spyOn(ChainController, 'getNetworkProp');
497
- const appKit = new AppKit(mockOptions);
498
- getActiveNetworkProps.mockReturnValue({
499
- namespace: mainnet.chainNamespace,
500
- chainId: mainnet.id,
501
- caipNetworkId: mainnet.caipNetworkId
502
- });
503
- fetchTokenBalance.mockResolvedValue([
504
- {
505
- quantity: { numeric: '0.00', decimals: '18' },
506
- chainId: mainnet.caipNetworkId,
507
- symbol: 'ETH'
508
- }
509
- ]);
510
- const mockAccountData = {
511
- address: '0x123',
512
- chainId: polygon.id,
513
- chainNamespace: polygon.chainNamespace
514
- };
515
- await appKit['syncAccount'](mockAccountData);
516
- expect(setActiveCaipNetwork).toHaveBeenCalledWith(mainnet);
517
- expect(getNetworkProp).toHaveBeenCalledWith('supportsAllNetworks', mainnet.chainNamespace);
518
- });
519
- it('should set connected wallet info when syncing account', async () => {
520
- const setConnectedWalletInfo = vi.spyOn(AccountController, 'setConnectedWalletInfo');
521
- const getActiveNetworkProps = vi.spyOn(StorageUtil, 'getActiveNetworkProps');
522
- const fetchTokenBalance = vi.spyOn(AccountController, 'fetchTokenBalance');
523
- const mockConnector = {
524
- id: 'test-wallet',
525
- name: 'Test Wallet',
526
- imageUrl: 'test-wallet-icon'
527
- };
528
- ConnectorController.state.connectors = [mockConnector];
529
- vi.spyOn(ConnectorController, 'getConnectorId').mockReturnValueOnce(mockConnector.id);
530
- const mockAccountData = {
531
- address: '0x123',
532
- chainId: mainnet.id,
533
- chainNamespace: mainnet.chainNamespace
534
- };
535
- fetchTokenBalance.mockResolvedValueOnce([
536
- {
537
- quantity: { numeric: '0.00', decimals: '18' },
538
- chainId: 'eip155:1',
539
- symbol: 'ETH'
540
- }
541
- ]);
542
- getActiveNetworkProps.mockReturnValueOnce({
543
- namespace: mainnet.chainNamespace,
544
- chainId: mainnet.id,
545
- caipNetworkId: mainnet.caipNetworkId
546
- });
547
- const appKit = new AppKit(mockOptions);
548
- await appKit['syncAccount'](mockAccountData);
549
- expect(setConnectedWalletInfo).toHaveBeenCalledWith({ name: mockConnector.id }, 'eip155');
550
- });
551
- it('should sync identity only if address changed', async () => {
552
- const fetchIdentity = vi.spyOn(BlockchainApiController, 'fetchIdentity');
553
- const mockAccountData = {
554
- address: '0x123',
555
- chainId: mainnet.id,
556
- chainNamespace: mainnet.chainNamespace
557
- };
558
- const appKit = new AppKit(mockOptions);
559
- await appKit['syncAccount'](mockAccountData);
560
- expect(fetchIdentity).not.toHaveBeenCalled();
561
- await appKit['syncAccount']({ ...mockAccountData, address: '0x456' });
562
- expect(fetchIdentity).toHaveBeenCalledOnce();
563
- });
564
- it('should not sync identity on non-evm network', async () => {
565
- const fetchIdentity = vi.spyOn(BlockchainApiController, 'fetchIdentity');
566
- const appKit = new AppKit({
567
- ...mockOptions,
568
- adapters: [mockSolanaAdapter],
569
- networks: [solana]
570
- });
571
- vi.spyOn(AccountController, 'fetchTokenBalance').mockResolvedValue([
572
- {
573
- quantity: { numeric: '0.00', decimals: '18' },
574
- chainId: solana.caipNetworkId,
575
- symbol: 'SOL'
576
- }
577
- ]);
578
- const mockAccountData = {
579
- address: '7y523k4jsh90d',
580
- chainId: solana.id,
581
- chainNamespace: solana.chainNamespace
582
- };
583
- vi.spyOn(StorageUtil, 'getActiveNetworkProps').mockReturnValueOnce({
584
- namespace: solana.chainNamespace,
585
- chainId: solana.id,
586
- caipNetworkId: solana.caipNetworkId
587
- });
588
- await appKit['syncAccount'](mockAccountData);
589
- expect(fetchIdentity).not.toHaveBeenCalled();
590
- });
591
- it('should not sync identity on a test network', async () => {
592
- const fetchIdentity = vi.spyOn(BlockchainApiController, 'fetchIdentity');
593
- const mockAdapter = {
594
- ...mockEvmAdapter,
595
- getBalance: vi.fn().mockResolvedValue({ balance: '1.00', symbol: 'sETH' })
596
- };
597
- const mockAccountData = {
598
- address: '0x123',
599
- chainId: sepolia.id,
600
- chainNamespace: sepolia.chainNamespace
601
- };
602
- const appKit = new AppKit({
603
- ...mockOptions,
604
- adapters: [mockEvmAdapter],
605
- networks: [sepolia]
606
- });
607
- /**
608
- * Caution: Even though real getAdapter returning mocked adapter, it's not returning the getBalance as expected, it's returning undefined
609
- * So we need to mock the getBalance here specifically
610
- */
611
- vi.spyOn(appKit, 'getAdapter').mockReturnValueOnce(mockAdapter);
612
- vi.spyOn(AccountController, 'fetchTokenBalance').mockResolvedValueOnce([
613
- {
614
- quantity: { numeric: '0.00', decimals: '18' },
615
- chainId: sepolia.id,
616
- symbol: 'sETH'
617
- }
618
- ]);
619
- vi.spyOn(StorageUtil, 'getActiveNetworkProps').mockReturnValueOnce({
620
- namespace: sepolia.chainNamespace,
621
- chainId: sepolia.id,
622
- caipNetworkId: sepolia.caipNetworkId
623
- });
624
- await appKit['syncAccount'](mockAccountData);
625
- expect(fetchIdentity).not.toHaveBeenCalled();
626
- });
627
- it('should disconnect correctly', async () => {
628
- const disconnect = vi.spyOn(ConnectionController, 'disconnect');
629
- const mockRemoveItem = vi.fn();
630
- vi.spyOn(SafeLocalStorage, 'removeItem').mockImplementation(mockRemoveItem);
631
- const appKit = new AppKit({
632
- ...mockOptions,
633
- networks: [base],
634
- adapters: [mockUniversalAdapter]
635
- });
636
- await appKit.disconnect();
637
- expect(disconnect).toHaveBeenCalled();
638
- });
639
- it('should not show unsupported chain UI when allowUnsupportedChain is true', async () => {
640
- const showUnsupportedChainUI = vi.spyOn(ChainController, 'showUnsupportedChainUI');
641
- showUnsupportedChainUI.mockImplementationOnce(vi.fn());
642
- vi.spyOn(OptionsController, 'state', 'get').mockReturnValue({
643
- allowUnsupportedChain: true
644
- });
645
- const overrideAdapter = {
646
- ...mockEvmAdapter,
647
- getAccounts: vi.fn().mockResolvedValue({ accounts: [] }),
648
- syncConnection: vi.fn().mockResolvedValue({
649
- chainId: 'eip155:999', // Unsupported chain
650
- address: '0x123',
651
- accounts: [{ address: '0x123', type: 'eoa' }]
652
- })
653
- };
654
- const appKit = new AppKit({ ...mockOptions, adapters: [overrideAdapter] });
655
- vi.spyOn(appKit, 'setUnsupportedNetwork').mockImplementation(vi.fn());
656
- vi.spyOn(SafeLocalStorage, 'getItem').mockImplementation((key) => {
657
- const connectorKey = getSafeConnectorIdKey(mainnet.chainNamespace);
658
- if (key === connectorKey) {
659
- return 'test-wallet';
660
- }
661
- if (key === SafeLocalStorageKeys.ACTIVE_CAIP_NETWORK_ID) {
662
- return mainnet.caipNetworkId;
663
- }
664
- return undefined;
665
- });
666
- await appKit.syncExistingConnection();
667
- expect(showUnsupportedChainUI).not.toHaveBeenCalled();
668
- });
669
- it('should subscribe to providers', () => {
670
- const callback = vi.fn();
671
- const providers = {
672
- eip155: { provider: {} },
673
- solana: {},
674
- polkadot: {},
675
- bip122: {}
676
- };
677
- const mockSubscribeProviders = vi.fn().mockImplementation(cb => {
678
- cb(providers);
679
- return () => { };
680
- });
681
- vi.mocked(ProviderUtil).subscribeProviders = mockSubscribeProviders;
682
- const appKit = new AppKit(mockOptions);
683
- appKit.subscribeProviders(callback);
684
- expect(mockSubscribeProviders).toHaveBeenCalled();
685
- expect(callback).toHaveBeenCalledWith(providers);
686
- });
687
- it('should set status to connected on syncWalletConnectAccount if CAIP address exists', () => {
688
- vi.spyOn(ChainController, 'setApprovedCaipNetworksData').mockImplementation(() => Promise.resolve());
689
- ChainController.state.activeCaipNetwork = mainnet;
690
- vi.spyOn(CaipNetworksUtil, 'extendCaipNetworks').mockReturnValue([mainnet]);
691
- vi.spyOn(ChainController, 'initialize').mockImplementation(() => Promise.resolve());
692
- vi.spyOn(AccountController, 'setUser').mockImplementation(() => Promise.resolve());
693
- const appKit = new AppKit({
694
- ...mockOptions,
695
- adapters: [],
696
- networks: [mainnet]
697
- });
698
- appKit['universalProvider'] = {
699
- ...mockUniversalProvider,
700
- session: {
701
- namespaces: {
702
- eip155: {
703
- accounts: ['eip155:1:0x123']
704
- }
705
- }
706
- }
707
- };
708
- const setStatusSpy = vi.spyOn(appKit, 'setStatus');
709
- appKit['syncWalletConnectAccount']();
710
- expect(setStatusSpy).toHaveBeenCalledWith('connected', 'eip155');
711
- });
712
- it('should set status to disconnected on syncWalletConnectAccount if CAIP address does not exist', () => {
713
- vi.spyOn(ChainController, 'setApprovedCaipNetworksData').mockImplementation(() => Promise.resolve());
714
- ChainController.state.activeCaipNetwork = mainnet;
715
- vi.spyOn(CaipNetworksUtil, 'extendCaipNetworks').mockReturnValue([mainnet]);
716
- vi.spyOn(ChainController, 'initialize').mockImplementation(() => Promise.resolve());
717
- vi.spyOn(AccountController, 'setUser').mockImplementation(() => Promise.resolve());
718
- const appKit = new AppKit({
719
- ...mockOptions,
720
- adapters: [],
721
- networks: [mainnet]
722
- });
723
- appKit['universalProvider'] = {
724
- ...mockUniversalProvider,
725
- session: {
726
- namespaces: {
727
- eip155: {
728
- accounts: []
729
- }
730
- }
731
- }
732
- };
733
- const setStatusSpy = vi.spyOn(appKit, 'setStatus');
734
- appKit['syncWalletConnectAccount']();
735
- expect(setStatusSpy).toHaveBeenCalledWith('disconnected', 'eip155');
736
- });
737
- it('should get account information', () => {
738
- vi.spyOn(ConnectorController, 'getAuthConnector').mockReturnValue({
739
- id: 'auth-connector'
740
- });
741
- vi.spyOn(ChainController, 'getAccountData').mockReturnValue({
742
- allAccounts: [{ address: '0x123', type: 'eoa', namespace: 'eip155' }],
743
- caipAddress: 'eip155:1:0x123',
744
- status: 'connected',
745
- user: { email: 'test@example.com' },
746
- socialProvider: 'email',
747
- preferredAccountType: 'eoa',
748
- smartAccountDeployed: true,
749
- currentTab: 0,
750
- addressLabels: new Map([['eip155:1:0x123', 'test-label']])
751
- });
752
- vi.spyOn(CoreHelperUtil, 'getPlainAddress');
753
- const appKit = new AppKit(mockOptions);
754
- const account = appKit.getAccount('eip155');
755
- expect(account).toEqual({
756
- allAccounts: [{ address: '0x123', type: 'eoa', namespace: 'eip155' }],
757
- caipAddress: 'eip155:1:0x123',
758
- address: '0x123',
759
- isConnected: true,
760
- status: 'connected',
761
- embeddedWalletInfo: {
762
- user: { email: 'test@example.com' },
763
- authProvider: 'email',
764
- accountType: 'eoa',
765
- isSmartAccountDeployed: true
766
- }
767
- });
768
- });
769
- it('should handle network switcher UI when enableNetworkSwitch is true', async () => {
770
- vi.spyOn(ChainController, 'getNetworkData').mockReturnValue(mainnet);
771
- vi.spyOn(ChainController, 'getCaipNetworkByNamespace').mockReturnValue(mainnet);
772
- vi.spyOn(ChainController, 'getNetworkProp').mockReturnValue(true);
773
- vi.spyOn(ChainController, 'state', 'get').mockReturnValue({
774
- ...ChainController.state,
775
- activeCaipNetwork: {
776
- ...mainnet,
777
- name: ConstantsUtil.UNSUPPORTED_NETWORK_NAME
778
- },
779
- activeChain: 'eip155'
780
- });
781
- vi.spyOn(OptionsController, 'state', 'get').mockReturnValue({
782
- ...OptionsController.state,
783
- allowUnsupportedChain: false,
784
- enableNetworkSwitch: true
785
- });
786
- const showUnsupportedChainUI = vi.spyOn(ChainController, 'showUnsupportedChainUI');
787
- const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
788
- const appKit = new AppKit(mockOptions);
789
- await appKit['syncAccount']({
790
- address: '0x123',
791
- chainId: mainnet.id,
792
- chainNamespace: mainnet.chainNamespace
793
- });
794
- expect(showUnsupportedChainUI).toHaveBeenCalled();
795
- expect(setActiveCaipNetwork).toHaveBeenCalledWith(mainnet);
796
- });
797
- it('should handle network switcher UI when enableNetworkSwitch is false', async () => {
798
- vi.spyOn(ChainController, 'getNetworkData').mockReturnValue(mainnet);
799
- vi.spyOn(ChainController, 'getCaipNetworkByNamespace').mockReturnValue(mainnet);
800
- vi.spyOn(ChainController, 'getNetworkProp').mockReturnValue(true);
801
- vi.spyOn(ChainController, 'state', 'get').mockReturnValue({
802
- ...ChainController.state,
803
- activeCaipNetwork: mainnet,
804
- activeChain: 'eip155'
805
- });
806
- vi.spyOn(OptionsController, 'state', 'get').mockReturnValue({
807
- ...OptionsController.state,
808
- allowUnsupportedChain: false,
809
- enableNetworkSwitch: false
810
- });
811
- const showUnsupportedChainUI = vi.spyOn(ChainController, 'showUnsupportedChainUI');
812
- const setActiveCaipNetwork = vi.spyOn(ChainController, 'setActiveCaipNetwork');
813
- const appKit = new AppKit(mockOptions);
814
- await appKit['syncAccount']({
815
- address: '0x123',
816
- chainId: mainnet.id,
817
- chainNamespace: mainnet.chainNamespace
818
- });
819
- expect(showUnsupportedChainUI).not.toHaveBeenCalled();
820
- expect(setActiveCaipNetwork).toHaveBeenCalledWith(mainnet);
821
- });
822
- });
823
- //# sourceMappingURL=public-methods.test.js.map