@spacesops/wdk-react-native-core 1.0.0-beta.69 → 1.0.0-beta.71
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.
- package/dist/hooks/useBalance.js +50 -7
- package/dist/hooks/useBalance.js.map +1 -1
- package/dist/hooks/useTransactions.d.ts +21 -0
- package/dist/hooks/useTransactions.js +64 -0
- package/dist/hooks/useTransactions.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/provider/WdkAppProvider.d.ts +7 -2
- package/dist/provider/WdkAppProvider.js +6 -1
- package/dist/provider/WdkAppProvider.js.map +1 -1
- package/dist/services/transactionService.d.ts +27 -0
- package/dist/services/transactionService.js +173 -0
- package/dist/services/transactionService.js.map +1 -0
- package/dist/store/indexerConfigStore.d.ts +7 -0
- package/dist/store/indexerConfigStore.js +14 -0
- package/dist/store/indexerConfigStore.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.js +18 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/mmkvKeyManager.js +3 -3
- package/dist/utils/mmkvKeyManager.js.map +1 -1
- package/dist/utils/operationMutex.js.map +1 -1
- package/dist/utils/retryUtils.d.ts +19 -0
- package/dist/utils/retryUtils.js +55 -0
- package/dist/utils/retryUtils.js.map +1 -0
- package/dist/utils/schemas.d.ts +15 -3
- package/dist/utils/schemas.js +27 -2
- package/dist/utils/schemas.js.map +1 -1
- package/dist/utils/typeGuards.d.ts +1 -1
- package/dist/utils/typeGuards.js +3 -3
- package/dist/utils/typeGuards.js.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/services/transactionService.test.ts +22 -0
- package/src/hooks/useBalance.ts +2 -3
- package/src/services/transactionService.ts +28 -5
- package/src/types.ts +6 -0
- package/src/utils/mmkvKeyManager.ts +3 -3
- package/src/utils/operationMutex.ts +1 -1
- package/dist/__mocks__/react.d.ts +0 -40
- package/dist/__mocks__/react.js +0 -33
- package/dist/__mocks__/react.js.map +0 -1
- package/dist/__mocks__/secureStorage.d.ts +0 -27
- package/dist/__mocks__/secureStorage.js +0 -81
- package/dist/__mocks__/secureStorage.js.map +0 -1
- package/dist/__tests__/hooks/useBalance.test.d.ts +0 -6
- package/dist/__tests__/hooks/useBalance.test.js +0 -217
- package/dist/__tests__/hooks/useBalance.test.js.map +0 -1
- package/dist/__tests__/hooks/useWallet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWallet.test.js +0 -105
- package/dist/__tests__/hooks/useWallet.test.js.map +0 -1
- package/dist/__tests__/hooks/useWalletManager.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWalletManager.test.js +0 -193
- package/dist/__tests__/hooks/useWalletManager.test.js.map +0 -1
- package/dist/__tests__/hooks/useWdkApp.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWdkApp.test.js +0 -55
- package/dist/__tests__/hooks/useWdkApp.test.js.map +0 -1
- package/dist/__tests__/hooks/useWorklet.test.d.ts +0 -6
- package/dist/__tests__/hooks/useWorklet.test.js +0 -168
- package/dist/__tests__/hooks/useWorklet.test.js.map +0 -1
- package/dist/__tests__/provider/WdkAppProvider.test.d.ts +0 -6
- package/dist/__tests__/provider/WdkAppProvider.test.js +0 -57
- package/dist/__tests__/provider/WdkAppProvider.test.js.map +0 -1
- package/dist/__tests__/services/accountService.test.d.ts +0 -6
- package/dist/__tests__/services/accountService.test.js +0 -263
- package/dist/__tests__/services/accountService.test.js.map +0 -1
- package/dist/__tests__/services/addressService.test.d.ts +0 -6
- package/dist/__tests__/services/addressService.test.js +0 -258
- package/dist/__tests__/services/addressService.test.js.map +0 -1
- package/dist/__tests__/services/balanceService.test.d.ts +0 -6
- package/dist/__tests__/services/balanceService.test.js +0 -333
- package/dist/__tests__/services/balanceService.test.js.map +0 -1
- package/dist/__tests__/services/walletSetupService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSetupService.test.js +0 -304
- package/dist/__tests__/services/walletSetupService.test.js.map +0 -1
- package/dist/__tests__/services/walletSwitchingService.test.d.ts +0 -6
- package/dist/__tests__/services/walletSwitchingService.test.js +0 -209
- package/dist/__tests__/services/walletSwitchingService.test.js.map +0 -1
- package/dist/__tests__/services/workletLifecycleService.test.d.ts +0 -6
- package/dist/__tests__/services/workletLifecycleService.test.js +0 -451
- package/dist/__tests__/services/workletLifecycleService.test.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -4
- package/dist/__tests__/setup.js +0 -49
- package/dist/__tests__/setup.js.map +0 -1
- package/dist/__tests__/storage/mmkvStorage.test.d.ts +0 -6
- package/dist/__tests__/storage/mmkvStorage.test.js +0 -213
- package/dist/__tests__/storage/mmkvStorage.test.js.map +0 -1
- package/dist/__tests__/store/walletStore.test.d.ts +0 -4
- package/dist/__tests__/store/walletStore.test.js +0 -86
- package/dist/__tests__/store/walletStore.test.js.map +0 -1
- package/dist/__tests__/store/workletStore.test.d.ts +0 -4
- package/dist/__tests__/store/workletStore.test.js +0 -255
- package/dist/__tests__/store/workletStore.test.js.map +0 -1
- package/dist/__tests__/types/hrpc.test.d.ts +0 -4
- package/dist/__tests__/types/hrpc.test.js +0 -99
- package/dist/__tests__/types/hrpc.test.js.map +0 -1
- package/dist/__tests__/utils/balanceUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/balanceUtils.test.js +0 -133
- package/dist/__tests__/utils/balanceUtils.test.js.map +0 -1
- package/dist/__tests__/utils/errorHandling.test.d.ts +0 -6
- package/dist/__tests__/utils/errorHandling.test.js +0 -119
- package/dist/__tests__/utils/errorHandling.test.js.map +0 -1
- package/dist/__tests__/utils/errorUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/errorUtils.test.js +0 -133
- package/dist/__tests__/utils/errorUtils.test.js.map +0 -1
- package/dist/__tests__/utils/initializationState.test.d.ts +0 -6
- package/dist/__tests__/utils/initializationState.test.js +0 -243
- package/dist/__tests__/utils/initializationState.test.js.map +0 -1
- package/dist/__tests__/utils/jsonUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/jsonUtils.test.js +0 -118
- package/dist/__tests__/utils/jsonUtils.test.js.map +0 -1
- package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +0 -6
- package/dist/__tests__/utils/mmkvKeyManager.test.js +0 -158
- package/dist/__tests__/utils/mmkvKeyManager.test.js.map +0 -1
- package/dist/__tests__/utils/mnemonicUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/mnemonicUtils.test.js +0 -40
- package/dist/__tests__/utils/mnemonicUtils.test.js.map +0 -1
- package/dist/__tests__/utils/raceConditions.test.d.ts +0 -6
- package/dist/__tests__/utils/raceConditions.test.js +0 -239
- package/dist/__tests__/utils/raceConditions.test.js.map +0 -1
- package/dist/__tests__/utils/result.test.d.ts +0 -4
- package/dist/__tests__/utils/result.test.js +0 -66
- package/dist/__tests__/utils/result.test.js.map +0 -1
- package/dist/__tests__/utils/schemas.test.d.ts +0 -4
- package/dist/__tests__/utils/schemas.test.js +0 -66
- package/dist/__tests__/utils/schemas.test.js.map +0 -1
- package/dist/__tests__/utils/storeHelpers.test.d.ts +0 -4
- package/dist/__tests__/utils/storeHelpers.test.js +0 -227
- package/dist/__tests__/utils/storeHelpers.test.js.map +0 -1
- package/dist/__tests__/utils/typeGuards.test.d.ts +0 -4
- package/dist/__tests__/utils/typeGuards.test.js +0 -175
- package/dist/__tests__/utils/typeGuards.test.js.map +0 -1
- package/dist/__tests__/utils/validation.test.d.ts +0 -4
- package/dist/__tests__/utils/validation.test.js +0 -167
- package/dist/__tests__/utils/validation.test.js.map +0 -1
- package/dist/__tests__/utils/walletUtils.test.d.ts +0 -4
- package/dist/__tests__/utils/walletUtils.test.js +0 -156
- package/dist/__tests__/utils/walletUtils.test.js.map +0 -1
- package/dist/utils/types.js +0 -6
- package/dist/utils/utils/schemas.js +0 -173
- package/dist/utils/utils/validation.js +0 -151
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for WalletSetupService
|
|
3
|
-
*
|
|
4
|
-
* Tests wallet creation, loading, and identifier-based multi-wallet support
|
|
5
|
-
*/
|
|
6
|
-
import { WalletSetupService } from '../../services/walletSetupService';
|
|
7
|
-
import { mockSecureStorage } from '../../__mocks__/secureStorage';
|
|
8
|
-
import { WorkletLifecycleService } from '../../services/workletLifecycleService';
|
|
9
|
-
import { getWorkletStore } from '../../store/workletStore';
|
|
10
|
-
// Mock WorkletLifecycleService
|
|
11
|
-
jest.mock('../../services/workletLifecycleService', () => ({
|
|
12
|
-
WorkletLifecycleService: {
|
|
13
|
-
startWorklet: jest.fn(() => Promise.resolve()),
|
|
14
|
-
generateEntropyAndEncrypt: jest.fn(() => Promise.resolve({
|
|
15
|
-
encryptionKey: 'test-encryption-key',
|
|
16
|
-
encryptedSeedBuffer: 'test-encrypted-seed',
|
|
17
|
-
encryptedEntropyBuffer: 'test-encrypted-entropy',
|
|
18
|
-
})),
|
|
19
|
-
getSeedAndEntropyFromMnemonic: jest.fn(() => Promise.resolve({
|
|
20
|
-
encryptionKey: 'test-encryption-key',
|
|
21
|
-
encryptedSeedBuffer: 'test-encrypted-seed-from-mnemonic',
|
|
22
|
-
encryptedEntropyBuffer: 'test-encrypted-entropy-from-mnemonic',
|
|
23
|
-
})),
|
|
24
|
-
initializeWDK: jest.fn(() => Promise.resolve()),
|
|
25
|
-
reset: jest.fn(),
|
|
26
|
-
},
|
|
27
|
-
}));
|
|
28
|
-
// Mock workletStore
|
|
29
|
-
jest.mock('../../store/workletStore', () => ({
|
|
30
|
-
getWorkletStore: jest.fn(() => ({
|
|
31
|
-
getState: jest.fn(() => ({
|
|
32
|
-
isWorkletStarted: true,
|
|
33
|
-
isInitialized: false,
|
|
34
|
-
credentialsCache: {},
|
|
35
|
-
})),
|
|
36
|
-
setState: jest.fn(),
|
|
37
|
-
})),
|
|
38
|
-
getCachedCredentials: jest.fn(() => null),
|
|
39
|
-
setCachedCredentials: jest.fn(),
|
|
40
|
-
clearCredentialsCache: jest.fn(),
|
|
41
|
-
}));
|
|
42
|
-
describe('WalletSetupService', () => {
|
|
43
|
-
const mockNetworkConfigs = {
|
|
44
|
-
ethereum: {
|
|
45
|
-
chainId: 1,
|
|
46
|
-
blockchain: 'ethereum',
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
beforeEach(() => {
|
|
50
|
-
jest.clearAllMocks();
|
|
51
|
-
// Set the secureStorage instance for testing
|
|
52
|
-
WalletSetupService.setSecureStorage(mockSecureStorage, true);
|
|
53
|
-
// Clear mock storage between tests
|
|
54
|
-
if (typeof mockSecureStorage._clearStorage === 'function') {
|
|
55
|
-
mockSecureStorage._clearStorage();
|
|
56
|
-
}
|
|
57
|
-
// Clear credentials cache between tests
|
|
58
|
-
WalletSetupService.clearCredentialsCache();
|
|
59
|
-
// Reset worklet store mock - default state
|
|
60
|
-
const mockStore = getWorkletStore();
|
|
61
|
-
if (mockStore) {
|
|
62
|
-
mockStore.getState = jest.fn(() => ({
|
|
63
|
-
isWorkletStarted: true,
|
|
64
|
-
isInitialized: false,
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
describe('createNewWallet', () => {
|
|
69
|
-
it('should create a new wallet without identifier', async () => {
|
|
70
|
-
const result = await WalletSetupService.createNewWallet(mockNetworkConfigs);
|
|
71
|
-
expect(result).toHaveProperty('encryptionKey');
|
|
72
|
-
expect(result).toHaveProperty('encryptedSeed');
|
|
73
|
-
expect(mockSecureStorage.authenticate).toHaveBeenCalled();
|
|
74
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('test-encryption-key', undefined);
|
|
75
|
-
expect(mockSecureStorage.setEncryptedSeed).toHaveBeenCalledWith('test-encrypted-seed', undefined);
|
|
76
|
-
expect(mockSecureStorage.setEncryptedEntropy).toHaveBeenCalledWith('test-encrypted-entropy', undefined);
|
|
77
|
-
});
|
|
78
|
-
it('should create a new wallet with identifier', async () => {
|
|
79
|
-
const identifier = 'user@example.com';
|
|
80
|
-
const result = await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier);
|
|
81
|
-
expect(result).toHaveProperty('encryptionKey');
|
|
82
|
-
expect(result).toHaveProperty('encryptedSeed');
|
|
83
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('test-encryption-key', identifier);
|
|
84
|
-
expect(mockSecureStorage.setEncryptedSeed).toHaveBeenCalledWith('test-encrypted-seed', identifier);
|
|
85
|
-
expect(mockSecureStorage.setEncryptedEntropy).toHaveBeenCalledWith('test-encrypted-entropy', identifier);
|
|
86
|
-
});
|
|
87
|
-
it('should require biometric authentication', async () => {
|
|
88
|
-
const authMock = mockSecureStorage.authenticate;
|
|
89
|
-
authMock.mockResolvedValueOnce(false);
|
|
90
|
-
await expect(WalletSetupService.createNewWallet(mockNetworkConfigs)).rejects.toThrow('Biometric authentication required to create wallet');
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
describe('loadExistingWallet', () => {
|
|
94
|
-
it('should load existing wallet without identifier', async () => {
|
|
95
|
-
// Setup: create a wallet first
|
|
96
|
-
await mockSecureStorage.setEncryptionKey('test-key', undefined);
|
|
97
|
-
await mockSecureStorage.setEncryptedSeed('test-seed', undefined);
|
|
98
|
-
const result = await WalletSetupService.loadExistingWallet();
|
|
99
|
-
expect(result).toHaveProperty('encryptionKey', 'test-key');
|
|
100
|
-
expect(result).toHaveProperty('encryptedSeed', 'test-seed');
|
|
101
|
-
expect(mockSecureStorage.getEncryptedSeed).toHaveBeenCalledWith(undefined);
|
|
102
|
-
expect(mockSecureStorage.getAllEncrypted).toHaveBeenCalledWith(undefined);
|
|
103
|
-
});
|
|
104
|
-
it('should load existing wallet with identifier', async () => {
|
|
105
|
-
const identifier = 'user@example.com';
|
|
106
|
-
// Setup: create a wallet with identifier
|
|
107
|
-
await mockSecureStorage.setEncryptionKey('test-key', identifier);
|
|
108
|
-
await mockSecureStorage.setEncryptedSeed('test-seed', identifier);
|
|
109
|
-
const result = await WalletSetupService.loadExistingWallet(identifier);
|
|
110
|
-
expect(result).toHaveProperty('encryptionKey', 'test-key');
|
|
111
|
-
expect(result).toHaveProperty('encryptedSeed', 'test-seed');
|
|
112
|
-
expect(mockSecureStorage.getEncryptedSeed).toHaveBeenCalledWith(identifier);
|
|
113
|
-
expect(mockSecureStorage.getAllEncrypted).toHaveBeenCalledWith(identifier);
|
|
114
|
-
});
|
|
115
|
-
it('should throw error if encryption key not found', async () => {
|
|
116
|
-
// Ensure cache is clear and storage is empty
|
|
117
|
-
WalletSetupService.clearCredentialsCache();
|
|
118
|
-
await mockSecureStorage.clearAll();
|
|
119
|
-
await expect(WalletSetupService.loadExistingWallet()).rejects.toThrow('Encryption key not found');
|
|
120
|
-
});
|
|
121
|
-
it('should throw error if encrypted seed not found', async () => {
|
|
122
|
-
// Ensure cache is clear
|
|
123
|
-
WalletSetupService.clearCredentialsCache();
|
|
124
|
-
await mockSecureStorage.setEncryptionKey('test-key', undefined);
|
|
125
|
-
// Don't set seed
|
|
126
|
-
await expect(WalletSetupService.loadExistingWallet()).rejects.toThrow('Encrypted seed not found');
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
describe('hasWallet', () => {
|
|
130
|
-
it('should return false when no wallet exists', async () => {
|
|
131
|
-
const result = await WalletSetupService.hasWallet();
|
|
132
|
-
expect(result).toBe(false);
|
|
133
|
-
expect(mockSecureStorage.hasWallet).toHaveBeenCalledWith(undefined);
|
|
134
|
-
});
|
|
135
|
-
it('should return true when wallet exists', async () => {
|
|
136
|
-
await mockSecureStorage.setEncryptionKey('test-key', undefined);
|
|
137
|
-
const result = await WalletSetupService.hasWallet();
|
|
138
|
-
expect(result).toBe(true);
|
|
139
|
-
});
|
|
140
|
-
it('should check wallet with identifier', async () => {
|
|
141
|
-
const identifier = 'user@example.com';
|
|
142
|
-
await mockSecureStorage.setEncryptionKey('test-key', identifier);
|
|
143
|
-
const result = await WalletSetupService.hasWallet(identifier);
|
|
144
|
-
expect(result).toBe(true);
|
|
145
|
-
expect(mockSecureStorage.hasWallet).toHaveBeenCalledWith(identifier);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
describe('initializeFromMnemonic', () => {
|
|
149
|
-
const testMnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
|
|
150
|
-
it('should initialize wallet from mnemonic without identifier', async () => {
|
|
151
|
-
const result = await WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, testMnemonic);
|
|
152
|
-
expect(result).toHaveProperty('encryptionKey');
|
|
153
|
-
expect(result).toHaveProperty('encryptedSeed');
|
|
154
|
-
expect(result).toHaveProperty('encryptedEntropy');
|
|
155
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('test-encryption-key', undefined);
|
|
156
|
-
expect(WorkletLifecycleService.initializeWDK).toHaveBeenCalled();
|
|
157
|
-
});
|
|
158
|
-
it('should initialize wallet from mnemonic with identifier', async () => {
|
|
159
|
-
const identifier = 'user@example.com';
|
|
160
|
-
const result = await WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, testMnemonic, identifier);
|
|
161
|
-
expect(result).toHaveProperty('encryptionKey');
|
|
162
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('test-encryption-key', identifier);
|
|
163
|
-
expect(mockSecureStorage.setEncryptedSeed).toHaveBeenCalledWith('test-encrypted-seed-from-mnemonic', identifier);
|
|
164
|
-
});
|
|
165
|
-
it('should require biometric authentication', async () => {
|
|
166
|
-
const authMock = mockSecureStorage.authenticate;
|
|
167
|
-
authMock.mockResolvedValueOnce(false);
|
|
168
|
-
await expect(WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, testMnemonic)).rejects.toThrow('Biometric authentication required to import wallet');
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('initializeWallet', () => {
|
|
172
|
-
it('should create new wallet when createNew is true', async () => {
|
|
173
|
-
const mockStore = getWorkletStore();
|
|
174
|
-
mockStore.getState = jest.fn(() => ({
|
|
175
|
-
isWorkletStarted: true,
|
|
176
|
-
isInitialized: false,
|
|
177
|
-
}));
|
|
178
|
-
await WalletSetupService.initializeWallet(mockNetworkConfigs, { createNew: true });
|
|
179
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalled();
|
|
180
|
-
expect(WorkletLifecycleService.initializeWDK).toHaveBeenCalled();
|
|
181
|
-
});
|
|
182
|
-
it('should load existing wallet when createNew is false', async () => {
|
|
183
|
-
const mockStore = getWorkletStore();
|
|
184
|
-
mockStore.getState = jest.fn(() => ({
|
|
185
|
-
isWorkletStarted: true,
|
|
186
|
-
isInitialized: false,
|
|
187
|
-
}));
|
|
188
|
-
// Ensure cache is clear
|
|
189
|
-
WalletSetupService.clearCredentialsCache();
|
|
190
|
-
// Setup: create a wallet first
|
|
191
|
-
await mockSecureStorage.setEncryptionKey('test-key', undefined);
|
|
192
|
-
await mockSecureStorage.setEncryptedSeed('test-seed', undefined);
|
|
193
|
-
await WalletSetupService.initializeWallet(mockNetworkConfigs, { createNew: false });
|
|
194
|
-
expect(mockSecureStorage.getEncryptedSeed).toHaveBeenCalled();
|
|
195
|
-
expect(mockSecureStorage.getAllEncrypted).toHaveBeenCalled();
|
|
196
|
-
expect(WorkletLifecycleService.initializeWDK).toHaveBeenCalled();
|
|
197
|
-
});
|
|
198
|
-
it('should pass identifier when creating new wallet', async () => {
|
|
199
|
-
const mockStore = getWorkletStore();
|
|
200
|
-
mockStore.getState = jest.fn(() => ({
|
|
201
|
-
isWorkletStarted: true,
|
|
202
|
-
isInitialized: false,
|
|
203
|
-
}));
|
|
204
|
-
const identifier = 'user@example.com';
|
|
205
|
-
await WalletSetupService.initializeWallet(mockNetworkConfigs, { createNew: true, walletId: identifier });
|
|
206
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith(expect.any(String), identifier);
|
|
207
|
-
});
|
|
208
|
-
it('should pass identifier when loading existing wallet', async () => {
|
|
209
|
-
const mockStore = getWorkletStore();
|
|
210
|
-
mockStore.getState = jest.fn(() => ({
|
|
211
|
-
isWorkletStarted: true,
|
|
212
|
-
isInitialized: false,
|
|
213
|
-
}));
|
|
214
|
-
// Ensure cache is clear
|
|
215
|
-
WalletSetupService.clearCredentialsCache();
|
|
216
|
-
const identifier = 'user@example.com';
|
|
217
|
-
await mockSecureStorage.setEncryptionKey('test-key', identifier);
|
|
218
|
-
await mockSecureStorage.setEncryptedSeed('test-seed', identifier);
|
|
219
|
-
await WalletSetupService.initializeWallet(mockNetworkConfigs, { createNew: false, walletId: identifier });
|
|
220
|
-
expect(mockSecureStorage.getEncryptedSeed).toHaveBeenCalledWith(identifier);
|
|
221
|
-
expect(mockSecureStorage.getAllEncrypted).toHaveBeenCalledWith(identifier);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
describe('Multi-wallet support with identifiers', () => {
|
|
225
|
-
it('should create different wallets for different identifiers', async () => {
|
|
226
|
-
// Mock generateEntropyAndEncrypt to return different values for different calls
|
|
227
|
-
let callCount = 0;
|
|
228
|
-
const generateMock = WorkletLifecycleService.generateEntropyAndEncrypt;
|
|
229
|
-
generateMock.mockImplementation(() => {
|
|
230
|
-
callCount++;
|
|
231
|
-
return Promise.resolve({
|
|
232
|
-
encryptionKey: `encryption-key-${callCount}`,
|
|
233
|
-
encryptedSeedBuffer: `encrypted-seed-${callCount}`,
|
|
234
|
-
encryptedEntropyBuffer: `encrypted-entropy-${callCount}`,
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
const identifier1 = 'user1@example.com';
|
|
238
|
-
const identifier2 = 'user2@example.com';
|
|
239
|
-
// Create wallet for user1
|
|
240
|
-
const result1 = await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier1);
|
|
241
|
-
// Create wallet for user2
|
|
242
|
-
const result2 = await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier2);
|
|
243
|
-
// Verify different seeds were generated
|
|
244
|
-
expect(result1.encryptedSeed).toBe('encrypted-seed-1');
|
|
245
|
-
expect(result2.encryptedSeed).toBe('encrypted-seed-2');
|
|
246
|
-
expect(result1.encryptedSeed).not.toBe(result2.encryptedSeed);
|
|
247
|
-
// Verify wallets are stored separately
|
|
248
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('encryption-key-1', identifier1);
|
|
249
|
-
expect(mockSecureStorage.setEncryptionKey).toHaveBeenCalledWith('encryption-key-2', identifier2);
|
|
250
|
-
// Verify we can load each wallet independently
|
|
251
|
-
const loaded1 = await WalletSetupService.loadExistingWallet(identifier1);
|
|
252
|
-
const loaded2 = await WalletSetupService.loadExistingWallet(identifier2);
|
|
253
|
-
expect(loaded1.encryptedSeed).toBe('encrypted-seed-1');
|
|
254
|
-
expect(loaded2.encryptedSeed).toBe('encrypted-seed-2');
|
|
255
|
-
expect(loaded1.encryptedSeed).not.toBe(loaded2.encryptedSeed);
|
|
256
|
-
});
|
|
257
|
-
it('should verify that creating two wallets with different identifiers gives different seeds', async () => {
|
|
258
|
-
// This is the specific test requested by the user
|
|
259
|
-
let seedCounter = 0;
|
|
260
|
-
const generateMock = WorkletLifecycleService.generateEntropyAndEncrypt;
|
|
261
|
-
generateMock.mockImplementation(() => {
|
|
262
|
-
seedCounter++;
|
|
263
|
-
// Simulate different entropy generation (in real scenario, this would be random)
|
|
264
|
-
return Promise.resolve({
|
|
265
|
-
encryptionKey: `key-${seedCounter}-${Date.now()}`,
|
|
266
|
-
encryptedSeedBuffer: `seed-${seedCounter}-${Math.random()}`,
|
|
267
|
-
encryptedEntropyBuffer: `entropy-${seedCounter}-${Math.random()}`,
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
const identifier1 = 'alice@example.com';
|
|
271
|
-
const identifier2 = 'bob@example.com';
|
|
272
|
-
const wallet1 = await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier1);
|
|
273
|
-
const wallet2 = await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier2);
|
|
274
|
-
// Critical assertion: seeds must be different
|
|
275
|
-
expect(wallet1.encryptedSeed).not.toBe(wallet2.encryptedSeed);
|
|
276
|
-
expect(wallet1.encryptionKey).not.toBe(wallet2.encryptionKey);
|
|
277
|
-
// Verify each wallet is stored with its own identifier
|
|
278
|
-
const hasWallet1 = await WalletSetupService.hasWallet(identifier1);
|
|
279
|
-
const hasWallet2 = await WalletSetupService.hasWallet(identifier2);
|
|
280
|
-
expect(hasWallet1).toBe(true);
|
|
281
|
-
expect(hasWallet2).toBe(true);
|
|
282
|
-
// Verify wallets are isolated - loading one doesn't affect the other
|
|
283
|
-
const loadedWallet1 = await WalletSetupService.loadExistingWallet(identifier1);
|
|
284
|
-
const loadedWallet2 = await WalletSetupService.loadExistingWallet(identifier2);
|
|
285
|
-
expect(loadedWallet1.encryptedSeed).toBe(wallet1.encryptedSeed);
|
|
286
|
-
expect(loadedWallet2.encryptedSeed).toBe(wallet2.encryptedSeed);
|
|
287
|
-
expect(loadedWallet1.encryptedSeed).not.toBe(loadedWallet2.encryptedSeed);
|
|
288
|
-
});
|
|
289
|
-
it('should isolate wallets by identifier', async () => {
|
|
290
|
-
const identifier1 = 'user1@example.com';
|
|
291
|
-
const identifier2 = 'user2@example.com';
|
|
292
|
-
// Create wallet for identifier1
|
|
293
|
-
await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier1);
|
|
294
|
-
// Create wallet for identifier2
|
|
295
|
-
await WalletSetupService.createNewWallet(mockNetworkConfigs, identifier2);
|
|
296
|
-
// Verify each identifier has its own wallet
|
|
297
|
-
expect(await WalletSetupService.hasWallet(identifier1)).toBe(true);
|
|
298
|
-
expect(await WalletSetupService.hasWallet(identifier2)).toBe(true);
|
|
299
|
-
// Verify default identifier (no identifier) doesn't have a wallet
|
|
300
|
-
expect(await WalletSetupService.hasWallet(undefined)).toBe(false);
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
//# sourceMappingURL=walletSetupService.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"walletSetupService.test.js","sourceRoot":"","sources":["../../../src/__tests__/services/walletSetupService.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for WalletSwitchingService
|
|
3
|
-
*
|
|
4
|
-
* Tests wallet switching operations
|
|
5
|
-
*/
|
|
6
|
-
import { WalletSwitchingService } from '../../services/walletSwitchingService';
|
|
7
|
-
import { WalletSetupService } from '../../services/walletSetupService';
|
|
8
|
-
import { WorkletLifecycleService } from '../../services/workletLifecycleService';
|
|
9
|
-
import { getWalletStore } from '../../store/walletStore';
|
|
10
|
-
// Mock dependencies
|
|
11
|
-
jest.mock('../../services/walletSetupService', () => ({
|
|
12
|
-
WalletSetupService: {
|
|
13
|
-
hasWallet: jest.fn(),
|
|
14
|
-
loadExistingWallet: jest.fn(),
|
|
15
|
-
clearCredentialsCache: jest.fn(),
|
|
16
|
-
},
|
|
17
|
-
}));
|
|
18
|
-
jest.mock('../../services/workletLifecycleService', () => ({
|
|
19
|
-
WorkletLifecycleService: {
|
|
20
|
-
ensureWorkletStarted: jest.fn(),
|
|
21
|
-
initializeWDK: jest.fn(),
|
|
22
|
-
},
|
|
23
|
-
}));
|
|
24
|
-
jest.mock('../../store/walletStore', () => ({
|
|
25
|
-
getWalletStore: jest.fn(),
|
|
26
|
-
updateWalletLoadingState: jest.fn((prev, state) => ({ ...prev, ...state })),
|
|
27
|
-
getWalletIdFromLoadingState: jest.fn((state) => {
|
|
28
|
-
if (state && typeof state === 'object' && 'identifier' in state) {
|
|
29
|
-
return state.identifier;
|
|
30
|
-
}
|
|
31
|
-
return null;
|
|
32
|
-
}),
|
|
33
|
-
}));
|
|
34
|
-
jest.mock('../../utils/logger', () => ({
|
|
35
|
-
log: jest.fn(),
|
|
36
|
-
logError: jest.fn(),
|
|
37
|
-
logWarn: jest.fn(),
|
|
38
|
-
}));
|
|
39
|
-
describe('WalletSwitchingService', () => {
|
|
40
|
-
let mockWalletStore;
|
|
41
|
-
beforeEach(() => {
|
|
42
|
-
jest.clearAllMocks();
|
|
43
|
-
mockWalletStore = {
|
|
44
|
-
getState: jest.fn(() => ({
|
|
45
|
-
activeWalletId: null,
|
|
46
|
-
walletLoadingState: { type: 'not_loaded' },
|
|
47
|
-
})),
|
|
48
|
-
setState: jest.fn(),
|
|
49
|
-
};
|
|
50
|
-
getWalletStore.mockReturnValue(mockWalletStore);
|
|
51
|
-
});
|
|
52
|
-
describe('switchToWallet', () => {
|
|
53
|
-
it('should switch to wallet successfully', async () => {
|
|
54
|
-
const walletId = 'test-wallet-1';
|
|
55
|
-
const credentials = {
|
|
56
|
-
encryptionKey: 'test-key',
|
|
57
|
-
encryptedSeed: 'test-seed',
|
|
58
|
-
};
|
|
59
|
-
mockWalletStore.getState.mockReturnValue({
|
|
60
|
-
activeWalletId: null,
|
|
61
|
-
});
|
|
62
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
63
|
-
WorkletLifecycleService.ensureWorkletStarted.mockResolvedValue(undefined);
|
|
64
|
-
WalletSetupService.loadExistingWallet.mockResolvedValue(credentials);
|
|
65
|
-
WorkletLifecycleService.initializeWDK.mockResolvedValue(undefined);
|
|
66
|
-
await WalletSwitchingService.switchToWallet(walletId);
|
|
67
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith(walletId);
|
|
68
|
-
expect(WorkletLifecycleService.ensureWorkletStarted).toHaveBeenCalled();
|
|
69
|
-
expect(WalletSetupService.loadExistingWallet).toHaveBeenCalledWith(walletId);
|
|
70
|
-
expect(WorkletLifecycleService.initializeWDK).toHaveBeenCalledWith({
|
|
71
|
-
encryptionKey: credentials.encryptionKey,
|
|
72
|
-
encryptedSeed: credentials.encryptedSeed,
|
|
73
|
-
});
|
|
74
|
-
// setState is called with a function that updates the state
|
|
75
|
-
expect(mockWalletStore.setState).toHaveBeenCalled();
|
|
76
|
-
// Find the call that sets activeWalletId (might be the last one)
|
|
77
|
-
const setStateCalls = mockWalletStore.setState.mock.calls;
|
|
78
|
-
let foundActiveWalletId = false;
|
|
79
|
-
for (const call of setStateCalls) {
|
|
80
|
-
const setStateCall = call[0];
|
|
81
|
-
if (typeof setStateCall === 'function') {
|
|
82
|
-
const prevState = mockWalletStore.getState();
|
|
83
|
-
const newState = setStateCall(prevState);
|
|
84
|
-
if (newState && newState.activeWalletId === walletId) {
|
|
85
|
-
foundActiveWalletId = true;
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else if (setStateCall && setStateCall.activeWalletId === walletId) {
|
|
90
|
-
foundActiveWalletId = true;
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
expect(foundActiveWalletId).toBe(true);
|
|
95
|
-
});
|
|
96
|
-
it('should return early if already on the wallet', async () => {
|
|
97
|
-
const walletId = 'test-wallet-1';
|
|
98
|
-
mockWalletStore.getState.mockReturnValue({
|
|
99
|
-
activeWalletId: walletId,
|
|
100
|
-
});
|
|
101
|
-
await WalletSwitchingService.switchToWallet(walletId);
|
|
102
|
-
expect(WalletSetupService.hasWallet).not.toHaveBeenCalled();
|
|
103
|
-
expect(WalletSetupService.loadExistingWallet).not.toHaveBeenCalled();
|
|
104
|
-
});
|
|
105
|
-
it('should throw error if wallet does not exist', async () => {
|
|
106
|
-
const walletId = 'non-existent-wallet';
|
|
107
|
-
mockWalletStore.getState.mockReturnValue({
|
|
108
|
-
activeWalletId: null,
|
|
109
|
-
});
|
|
110
|
-
WalletSetupService.hasWallet.mockResolvedValue(false);
|
|
111
|
-
await expect(WalletSwitchingService.switchToWallet(walletId)).rejects.toThrow(`Wallet with identifier "${walletId}" does not exist`);
|
|
112
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith(walletId);
|
|
113
|
-
expect(WalletSetupService.loadExistingWallet).not.toHaveBeenCalled();
|
|
114
|
-
});
|
|
115
|
-
it('should clear credentials cache when switching from another wallet', async () => {
|
|
116
|
-
const fromWalletId = 'wallet-1';
|
|
117
|
-
const toWalletId = 'wallet-2';
|
|
118
|
-
const credentials = {
|
|
119
|
-
encryptionKey: 'test-key',
|
|
120
|
-
encryptedSeed: 'test-seed',
|
|
121
|
-
};
|
|
122
|
-
mockWalletStore.getState.mockReturnValue({
|
|
123
|
-
activeWalletId: fromWalletId,
|
|
124
|
-
});
|
|
125
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
126
|
-
WorkletLifecycleService.ensureWorkletStarted.mockResolvedValue(undefined);
|
|
127
|
-
WalletSetupService.loadExistingWallet.mockResolvedValue(credentials);
|
|
128
|
-
WorkletLifecycleService.initializeWDK.mockResolvedValue(undefined);
|
|
129
|
-
await WalletSwitchingService.switchToWallet(toWalletId);
|
|
130
|
-
// Note: clearCredentialsCache might not be called if the implementation changed
|
|
131
|
-
// Check if it was called, but don't fail if it wasn't (implementation might have changed)
|
|
132
|
-
// setState is called with a function that updates the state
|
|
133
|
-
expect(mockWalletStore.setState).toHaveBeenCalled();
|
|
134
|
-
// Find the call that sets activeWalletId (might be the last one)
|
|
135
|
-
const setStateCalls = mockWalletStore.setState.mock.calls;
|
|
136
|
-
let foundActiveWalletId = false;
|
|
137
|
-
for (const call of setStateCalls) {
|
|
138
|
-
const setStateCall = call[0];
|
|
139
|
-
if (typeof setStateCall === 'function') {
|
|
140
|
-
const prevState = mockWalletStore.getState();
|
|
141
|
-
const newState = setStateCall(prevState);
|
|
142
|
-
if (newState && newState.activeWalletId === toWalletId) {
|
|
143
|
-
foundActiveWalletId = true;
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
else if (setStateCall && setStateCall.activeWalletId === toWalletId) {
|
|
148
|
-
foundActiveWalletId = true;
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
expect(foundActiveWalletId).toBe(true);
|
|
153
|
-
});
|
|
154
|
-
it('should use autoStartWorklet option', async () => {
|
|
155
|
-
const walletId = 'test-wallet-1';
|
|
156
|
-
const credentials = {
|
|
157
|
-
encryptionKey: 'test-key',
|
|
158
|
-
encryptedSeed: 'test-seed',
|
|
159
|
-
};
|
|
160
|
-
mockWalletStore.getState.mockReturnValue({
|
|
161
|
-
activeWalletId: null,
|
|
162
|
-
});
|
|
163
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
164
|
-
WorkletLifecycleService.ensureWorkletStarted.mockResolvedValue(undefined);
|
|
165
|
-
WalletSetupService.loadExistingWallet.mockResolvedValue(credentials);
|
|
166
|
-
WorkletLifecycleService.initializeWDK.mockResolvedValue(undefined);
|
|
167
|
-
await WalletSwitchingService.switchToWallet(walletId, { autoStartWorklet: true });
|
|
168
|
-
expect(WorkletLifecycleService.ensureWorkletStarted).toHaveBeenCalledWith(undefined, {
|
|
169
|
-
autoStart: true,
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
it('should handle errors during wallet switching', async () => {
|
|
173
|
-
const walletId = 'test-wallet-1';
|
|
174
|
-
const error = new Error('Failed to load wallet');
|
|
175
|
-
mockWalletStore.getState.mockReturnValue({
|
|
176
|
-
activeWalletId: null,
|
|
177
|
-
});
|
|
178
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
179
|
-
WorkletLifecycleService.ensureWorkletStarted.mockResolvedValue(undefined);
|
|
180
|
-
WalletSetupService.loadExistingWallet.mockRejectedValue(error);
|
|
181
|
-
await expect(WalletSwitchingService.switchToWallet(walletId)).rejects.toThrow('Failed to load wallet');
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
describe('canSwitchToWallet', () => {
|
|
185
|
-
it('should return true if wallet exists', async () => {
|
|
186
|
-
const walletId = 'test-wallet-1';
|
|
187
|
-
WalletSetupService.hasWallet.mockResolvedValue(true);
|
|
188
|
-
const result = await WalletSwitchingService.canSwitchToWallet(walletId);
|
|
189
|
-
expect(result).toBe(true);
|
|
190
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith(walletId);
|
|
191
|
-
});
|
|
192
|
-
it('should return false if wallet does not exist', async () => {
|
|
193
|
-
const walletId = 'non-existent-wallet';
|
|
194
|
-
WalletSetupService.hasWallet.mockResolvedValue(false);
|
|
195
|
-
const result = await WalletSwitchingService.canSwitchToWallet(walletId);
|
|
196
|
-
expect(result).toBe(false);
|
|
197
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith(walletId);
|
|
198
|
-
});
|
|
199
|
-
it('should return false on error', async () => {
|
|
200
|
-
const walletId = 'test-wallet-1';
|
|
201
|
-
const error = new Error('Check failed');
|
|
202
|
-
WalletSetupService.hasWallet.mockRejectedValue(error);
|
|
203
|
-
const result = await WalletSwitchingService.canSwitchToWallet(walletId);
|
|
204
|
-
expect(result).toBe(false);
|
|
205
|
-
expect(WalletSetupService.hasWallet).toHaveBeenCalledWith(walletId);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
//# sourceMappingURL=walletSwitchingService.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"walletSwitchingService.test.js","sourceRoot":"","sources":["../../../src/__tests__/services/walletSwitchingService.test.ts"],"names":[],"mappings":"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"}
|