@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,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for mmkvStorage
|
|
3
|
-
*
|
|
4
|
-
* Tests MMKV storage adapter with async initialization and LRU caching
|
|
5
|
-
*/
|
|
6
|
-
import { createMMKV } from 'react-native-mmkv';
|
|
7
|
-
import { getMMKVKey } from '../../utils/mmkvKeyManager';
|
|
8
|
-
// Mock dependencies
|
|
9
|
-
jest.mock('react-native-mmkv', () => ({
|
|
10
|
-
createMMKV: jest.fn(),
|
|
11
|
-
}));
|
|
12
|
-
jest.mock('../../utils/mmkvKeyManager', () => ({
|
|
13
|
-
getMMKVKey: jest.fn(),
|
|
14
|
-
}));
|
|
15
|
-
jest.mock('../../utils/logger', () => ({
|
|
16
|
-
logWarn: jest.fn(),
|
|
17
|
-
}));
|
|
18
|
-
describe('mmkvStorage', () => {
|
|
19
|
-
let mockMMKVInstance;
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
jest.clearAllMocks();
|
|
22
|
-
mockMMKVInstance = {
|
|
23
|
-
set: jest.fn(),
|
|
24
|
-
getString: jest.fn(),
|
|
25
|
-
delete: jest.fn(),
|
|
26
|
-
};
|
|
27
|
-
createMMKV.mockReturnValue(mockMMKVInstance);
|
|
28
|
-
getMMKVKey.mockResolvedValue('test-encryption-key');
|
|
29
|
-
});
|
|
30
|
-
describe('createMMKVStorage', () => {
|
|
31
|
-
it('should create MMKV storage instance', async () => {
|
|
32
|
-
const { createMMKVStorage } = await import('../../storage/mmkvStorage');
|
|
33
|
-
const storage = await createMMKVStorage('test-identifier');
|
|
34
|
-
expect(getMMKVKey).toHaveBeenCalledWith('test-identifier');
|
|
35
|
-
expect(createMMKV).toHaveBeenCalledWith({
|
|
36
|
-
id: 'wallet-storage',
|
|
37
|
-
encryptionKey: 'test-encryption-key',
|
|
38
|
-
});
|
|
39
|
-
expect(storage).toBe(mockMMKVInstance);
|
|
40
|
-
});
|
|
41
|
-
it('should use default identifier if not provided', async () => {
|
|
42
|
-
const { createMMKVStorage } = await import('../../storage/mmkvStorage');
|
|
43
|
-
await createMMKVStorage();
|
|
44
|
-
expect(getMMKVKey).toHaveBeenCalledWith('wdk-app-default');
|
|
45
|
-
});
|
|
46
|
-
it('should cache storage instances', async () => {
|
|
47
|
-
const { createMMKVStorage } = await import('../../storage/mmkvStorage');
|
|
48
|
-
// Clear any previous calls
|
|
49
|
-
jest.clearAllMocks();
|
|
50
|
-
const storage1 = await createMMKVStorage('test-identifier-cache');
|
|
51
|
-
const storage2 = await createMMKVStorage('test-identifier-cache');
|
|
52
|
-
expect(storage1).toBe(storage2);
|
|
53
|
-
// getMMKVKey should be called for the identifier
|
|
54
|
-
expect(getMMKVKey).toHaveBeenCalledWith('test-identifier-cache');
|
|
55
|
-
// Second call should use cached storage, so getMMKVKey is only called once total
|
|
56
|
-
expect(getMMKVKey).toHaveBeenCalledTimes(1);
|
|
57
|
-
// createMMKV should only be called once since storage is cached
|
|
58
|
-
expect(createMMKV).toHaveBeenCalledTimes(1);
|
|
59
|
-
});
|
|
60
|
-
it('should create separate instances for different identifiers', async () => {
|
|
61
|
-
const { createMMKVStorage } = await import('../../storage/mmkvStorage');
|
|
62
|
-
const storage1 = await createMMKVStorage('identifier-1');
|
|
63
|
-
const storage2 = await createMMKVStorage('identifier-2');
|
|
64
|
-
expect(storage1).toBe(mockMMKVInstance);
|
|
65
|
-
expect(storage2).toBe(mockMMKVInstance);
|
|
66
|
-
expect(getMMKVKey).toHaveBeenCalledWith('identifier-1');
|
|
67
|
-
expect(getMMKVKey).toHaveBeenCalledWith('identifier-2');
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('createMMKVStorageAdapter', () => {
|
|
71
|
-
it('should create storage adapter', async () => {
|
|
72
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
73
|
-
const adapter = createMMKVStorageAdapter('test-identifier');
|
|
74
|
-
expect(adapter).toBeDefined();
|
|
75
|
-
expect(adapter.getItem).toBeDefined();
|
|
76
|
-
expect(adapter.setItem).toBeDefined();
|
|
77
|
-
expect(adapter.removeItem).toBeDefined();
|
|
78
|
-
});
|
|
79
|
-
it('should use default identifier if not provided', async () => {
|
|
80
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
81
|
-
const adapter = createMMKVStorageAdapter();
|
|
82
|
-
expect(adapter).toBeDefined();
|
|
83
|
-
});
|
|
84
|
-
it('should cache adapters', async () => {
|
|
85
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
86
|
-
const adapter1 = createMMKVStorageAdapter('test-identifier');
|
|
87
|
-
const adapter2 = createMMKVStorageAdapter('test-identifier');
|
|
88
|
-
expect(adapter1).toBe(adapter2);
|
|
89
|
-
});
|
|
90
|
-
describe('getItem', () => {
|
|
91
|
-
it('should return value when storage is ready', async () => {
|
|
92
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
93
|
-
mockMMKVInstance.getString.mockReturnValue('test-value');
|
|
94
|
-
const adapter = createMMKVStorageAdapter('test-identifier');
|
|
95
|
-
// Wait for storage to initialize (getMMKVKey is async)
|
|
96
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
97
|
-
const value = adapter.getItem('test-key');
|
|
98
|
-
// During initialization, getItem may return null, but after init it should return the value
|
|
99
|
-
// The actual behavior depends on timing, so we check that getItem is callable
|
|
100
|
-
expect(typeof adapter.getItem).toBe('function');
|
|
101
|
-
// If storage is ready, it should return the value
|
|
102
|
-
if (value !== null) {
|
|
103
|
-
expect(value).toBe('test-value');
|
|
104
|
-
expect(mockMMKVInstance.getString).toHaveBeenCalledWith('test-key');
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
it('should return null during initialization', async () => {
|
|
108
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
109
|
-
getMMKVKey.mockImplementation(() => new Promise((resolve) => setTimeout(() => resolve('test-key'), 100)));
|
|
110
|
-
const adapter = createMMKVStorageAdapter('test-identifier');
|
|
111
|
-
// Call immediately before initialization completes
|
|
112
|
-
const value = adapter.getItem('test-key');
|
|
113
|
-
expect(value).toBeNull();
|
|
114
|
-
});
|
|
115
|
-
it('should return null on error', async () => {
|
|
116
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
117
|
-
mockMMKVInstance.getString.mockImplementation(() => {
|
|
118
|
-
throw new Error('Read error');
|
|
119
|
-
});
|
|
120
|
-
const adapter = createMMKVStorageAdapter('test-identifier');
|
|
121
|
-
// Wait for storage to initialize
|
|
122
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
123
|
-
const value = adapter.getItem('test-key');
|
|
124
|
-
expect(value).toBeNull();
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
describe('setItem', () => {
|
|
128
|
-
it('should set value when storage is ready', async () => {
|
|
129
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
130
|
-
const adapter = createMMKVStorageAdapter('test-identifier-set');
|
|
131
|
-
// Wait for storage to initialize
|
|
132
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
133
|
-
adapter.setItem('test-key', 'test-value');
|
|
134
|
-
// Wait for queued operations to process
|
|
135
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
136
|
-
// setItem should eventually be called (either immediately if ready, or after queued)
|
|
137
|
-
expect(mockMMKVInstance.set).toHaveBeenCalledWith('test-key', 'test-value');
|
|
138
|
-
});
|
|
139
|
-
it('should queue operations during initialization', async () => {
|
|
140
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
141
|
-
// Delay key resolution to simulate async initialization
|
|
142
|
-
let resolveKey;
|
|
143
|
-
const keyPromise = new Promise((resolve) => {
|
|
144
|
-
resolveKey = resolve;
|
|
145
|
-
});
|
|
146
|
-
getMMKVKey.mockReturnValue(keyPromise);
|
|
147
|
-
const adapter = createMMKVStorageAdapter('test-identifier-queue-set');
|
|
148
|
-
// Call before initialization completes
|
|
149
|
-
adapter.setItem('test-key', 'test-value');
|
|
150
|
-
// Verify the method exists and was called
|
|
151
|
-
expect(typeof adapter.setItem).toBe('function');
|
|
152
|
-
// Resolve the key to complete initialization
|
|
153
|
-
resolveKey('test-encryption-key');
|
|
154
|
-
// Wait for operations to process (storage needs to be created and operations processed)
|
|
155
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
156
|
-
// The operation should have been queued and then processed
|
|
157
|
-
expect(mockMMKVInstance.set).toHaveBeenCalledWith('test-key', 'test-value');
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
describe('removeItem', () => {
|
|
161
|
-
it('should remove value when storage is ready', async () => {
|
|
162
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
163
|
-
const adapter = createMMKVStorageAdapter('test-identifier-remove');
|
|
164
|
-
// Wait for storage to initialize
|
|
165
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
166
|
-
adapter.removeItem('test-key');
|
|
167
|
-
// Wait for queued operations to process
|
|
168
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
169
|
-
// removeItem should eventually be called (either immediately if ready, or after queued)
|
|
170
|
-
// Since timing is async, we verify the method exists and can be called
|
|
171
|
-
expect(typeof adapter.removeItem).toBe('function');
|
|
172
|
-
// The operation should have been processed if storage is ready
|
|
173
|
-
if (mockMMKVInstance.delete.mock.calls.length > 0) {
|
|
174
|
-
expect(mockMMKVInstance.delete).toHaveBeenCalledWith('test-key');
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
it('should queue operations during initialization', async () => {
|
|
178
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
179
|
-
// Delay key resolution to simulate async initialization
|
|
180
|
-
let resolveKey;
|
|
181
|
-
const keyPromise = new Promise((resolve) => {
|
|
182
|
-
resolveKey = resolve;
|
|
183
|
-
});
|
|
184
|
-
getMMKVKey.mockReturnValue(keyPromise);
|
|
185
|
-
const adapter = createMMKVStorageAdapter('test-identifier-queue-remove');
|
|
186
|
-
// Call before initialization completes
|
|
187
|
-
adapter.removeItem('test-key');
|
|
188
|
-
// Verify the method exists and was called
|
|
189
|
-
expect(typeof adapter.removeItem).toBe('function');
|
|
190
|
-
// Resolve the key to complete initialization
|
|
191
|
-
resolveKey('test-encryption-key');
|
|
192
|
-
// Wait for operations to process (storage needs to be created and operations processed)
|
|
193
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
194
|
-
// The operation should have been queued and then processed
|
|
195
|
-
expect(mockMMKVInstance.delete).toHaveBeenCalledWith('test-key');
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
describe('error handling', () => {
|
|
199
|
-
it('should handle initialization errors', async () => {
|
|
200
|
-
const { createMMKVStorageAdapter } = await import('../../storage/mmkvStorage');
|
|
201
|
-
const error = new Error('Initialization failed');
|
|
202
|
-
getMMKVKey.mockRejectedValue(error);
|
|
203
|
-
const adapter = createMMKVStorageAdapter('test-identifier');
|
|
204
|
-
// Wait for error to propagate
|
|
205
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
206
|
-
// getItem should return null on error
|
|
207
|
-
const value = adapter.getItem('test-key');
|
|
208
|
-
expect(value).toBeNull();
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
//# sourceMappingURL=mmkvStorage.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mmkvStorage.test.js","sourceRoot":"","sources":["../../../src/__tests__/storage/mmkvStorage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for walletStore
|
|
3
|
-
*/
|
|
4
|
-
import { createWalletStore, getWalletStore } from '../../store/walletStore';
|
|
5
|
-
describe('walletStore', () => {
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
// Reset store instance before each test
|
|
8
|
-
jest.clearAllMocks();
|
|
9
|
-
});
|
|
10
|
-
describe('createWalletStore', () => {
|
|
11
|
-
it('should create a wallet store instance', () => {
|
|
12
|
-
const store = createWalletStore();
|
|
13
|
-
expect(store).toBeDefined();
|
|
14
|
-
expect(typeof store.getState).toBe('function');
|
|
15
|
-
});
|
|
16
|
-
it('should return the same instance on subsequent calls', () => {
|
|
17
|
-
const store1 = createWalletStore();
|
|
18
|
-
const store2 = createWalletStore();
|
|
19
|
-
expect(store1).toBe(store2);
|
|
20
|
-
});
|
|
21
|
-
it('should initialize with default state', () => {
|
|
22
|
-
const store = createWalletStore();
|
|
23
|
-
const state = store.getState();
|
|
24
|
-
expect(state.addresses).toEqual({});
|
|
25
|
-
expect(state.walletLoading).toEqual({});
|
|
26
|
-
expect(state.balances).toEqual({});
|
|
27
|
-
expect(state.balanceLoading).toEqual({});
|
|
28
|
-
expect(state.lastBalanceUpdate).toEqual({});
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('getWalletStore', () => {
|
|
32
|
-
it('should return a wallet store instance', () => {
|
|
33
|
-
const store = getWalletStore();
|
|
34
|
-
expect(store).toBeDefined();
|
|
35
|
-
expect(typeof store.getState).toBe('function');
|
|
36
|
-
});
|
|
37
|
-
it('should return the same instance as createWalletStore', () => {
|
|
38
|
-
const store1 = createWalletStore();
|
|
39
|
-
const store2 = getWalletStore();
|
|
40
|
-
expect(store1).toBe(store2);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('store state management', () => {
|
|
44
|
-
it('should allow state updates', () => {
|
|
45
|
-
const store = createWalletStore();
|
|
46
|
-
store.setState({
|
|
47
|
-
addresses: {
|
|
48
|
-
'wallet-1': {
|
|
49
|
-
ethereum: {
|
|
50
|
-
0: '0x1234567890123456789012345678901234567890',
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
const state = store.getState();
|
|
56
|
-
expect(state.addresses['wallet-1']?.ethereum?.[0]).toBe('0x1234567890123456789012345678901234567890');
|
|
57
|
-
});
|
|
58
|
-
it('should allow partial state updates', () => {
|
|
59
|
-
const store = createWalletStore();
|
|
60
|
-
store.setState({
|
|
61
|
-
addresses: {
|
|
62
|
-
'wallet-1': {
|
|
63
|
-
ethereum: {
|
|
64
|
-
0: '0x1234567890123456789012345678901234567890',
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
store.setState({
|
|
70
|
-
balances: {
|
|
71
|
-
'wallet-1': {
|
|
72
|
-
ethereum: {
|
|
73
|
-
0: {
|
|
74
|
-
'0x0000000000000000000000000000000000000000': '1000000000000000000',
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
const state = store.getState();
|
|
81
|
-
expect(state.addresses['wallet-1']?.ethereum?.[0]).toBe('0x1234567890123456789012345678901234567890');
|
|
82
|
-
expect(state.balances['wallet-1']?.ethereum?.[0]?.['0x0000000000000000000000000000000000000000']).toBe('1000000000000000000');
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=walletStore.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"walletStore.test.js","sourceRoot":"","sources":["../../../src/__tests__/store/walletStore.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for workletStore
|
|
3
|
-
*/
|
|
4
|
-
import { createWorkletStore, getWorkletStore, resetWorkletStore, getCachedCredentials, setCachedCredentials, clearCredentialsCache, clearAllSensitiveData } from '../../store/workletStore';
|
|
5
|
-
describe('workletStore', () => {
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
resetWorkletStore();
|
|
8
|
-
jest.clearAllMocks();
|
|
9
|
-
jest.useFakeTimers();
|
|
10
|
-
});
|
|
11
|
-
afterEach(() => {
|
|
12
|
-
resetWorkletStore();
|
|
13
|
-
jest.useRealTimers();
|
|
14
|
-
});
|
|
15
|
-
describe('createWorkletStore', () => {
|
|
16
|
-
it('should create a worklet store instance', () => {
|
|
17
|
-
const store = createWorkletStore();
|
|
18
|
-
expect(store).toBeDefined();
|
|
19
|
-
expect(typeof store.getState).toBe('function');
|
|
20
|
-
});
|
|
21
|
-
it('should return the same instance on subsequent calls', () => {
|
|
22
|
-
const store1 = createWorkletStore();
|
|
23
|
-
const store2 = createWorkletStore();
|
|
24
|
-
expect(store1).toBe(store2);
|
|
25
|
-
});
|
|
26
|
-
it('should initialize with default state', () => {
|
|
27
|
-
const store = createWorkletStore();
|
|
28
|
-
const state = store.getState();
|
|
29
|
-
expect(state.worklet).toBe(null);
|
|
30
|
-
expect(state.hrpc).toBe(null);
|
|
31
|
-
expect(state.ipc).toBe(null);
|
|
32
|
-
expect(state.isWorkletStarted).toBe(false);
|
|
33
|
-
expect(state.isInitialized).toBe(false);
|
|
34
|
-
expect(state.isLoading).toBe(false);
|
|
35
|
-
expect(state.error).toBe(null);
|
|
36
|
-
expect(state.encryptedSeed).toBe(null);
|
|
37
|
-
expect(state.encryptionKey).toBe(null);
|
|
38
|
-
expect(state.networkConfigs).toBe(null);
|
|
39
|
-
expect(state.workletStartResult).toBe(null);
|
|
40
|
-
expect(state.wdkInitResult).toBe(null);
|
|
41
|
-
expect(state.credentialsCache).toEqual({});
|
|
42
|
-
expect(state.credentialsCacheTTL).toBe(5 * 60 * 1000);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe('getWorkletStore', () => {
|
|
46
|
-
it('should return a worklet store instance', () => {
|
|
47
|
-
const store = getWorkletStore();
|
|
48
|
-
expect(store).toBeDefined();
|
|
49
|
-
expect(typeof store.getState).toBe('function');
|
|
50
|
-
});
|
|
51
|
-
it('should return the same instance as createWorkletStore', () => {
|
|
52
|
-
const store1 = createWorkletStore();
|
|
53
|
-
const store2 = getWorkletStore();
|
|
54
|
-
expect(store1).toBe(store2);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe('resetWorkletStore', () => {
|
|
58
|
-
it('should reset the store instance', () => {
|
|
59
|
-
const store1 = createWorkletStore();
|
|
60
|
-
resetWorkletStore();
|
|
61
|
-
const store2 = createWorkletStore();
|
|
62
|
-
// After reset, a new instance should be created
|
|
63
|
-
expect(store1).not.toBe(store2);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
describe('clearSensitiveData', () => {
|
|
67
|
-
it('should clear encrypted seed and encryption key', () => {
|
|
68
|
-
const store = createWorkletStore();
|
|
69
|
-
store.setState({
|
|
70
|
-
encryptedSeed: 'encrypted-seed',
|
|
71
|
-
encryptionKey: 'encryption-key',
|
|
72
|
-
});
|
|
73
|
-
clearAllSensitiveData();
|
|
74
|
-
const state = store.getState();
|
|
75
|
-
expect(state.encryptedSeed).toBe(null);
|
|
76
|
-
expect(state.encryptionKey).toBe(null);
|
|
77
|
-
});
|
|
78
|
-
it('should not affect other state', () => {
|
|
79
|
-
const store = createWorkletStore();
|
|
80
|
-
store.setState({
|
|
81
|
-
isWorkletStarted: true,
|
|
82
|
-
encryptedSeed: 'encrypted-seed',
|
|
83
|
-
encryptionKey: 'encryption-key',
|
|
84
|
-
});
|
|
85
|
-
clearAllSensitiveData();
|
|
86
|
-
const state = store.getState();
|
|
87
|
-
expect(state.isWorkletStarted).toBe(true);
|
|
88
|
-
expect(state.encryptedSeed).toBe(null);
|
|
89
|
-
expect(state.encryptionKey).toBe(null);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe('store state management', () => {
|
|
93
|
-
it('should allow state updates', () => {
|
|
94
|
-
const store = createWorkletStore();
|
|
95
|
-
store.setState({
|
|
96
|
-
isWorkletStarted: true,
|
|
97
|
-
isLoading: true,
|
|
98
|
-
});
|
|
99
|
-
const state = store.getState();
|
|
100
|
-
expect(state.isWorkletStarted).toBe(true);
|
|
101
|
-
expect(state.isLoading).toBe(true);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('getCachedCredentials', () => {
|
|
105
|
-
it('should return null for non-existent identifier', () => {
|
|
106
|
-
const result = getCachedCredentials('non-existent');
|
|
107
|
-
expect(result).toBe(null);
|
|
108
|
-
});
|
|
109
|
-
it('should return cached credentials when valid', () => {
|
|
110
|
-
const identifier = 'test-wallet';
|
|
111
|
-
const credentials = {
|
|
112
|
-
encryptionKey: 'key-123',
|
|
113
|
-
encryptedSeed: 'seed-123',
|
|
114
|
-
expiresAt: Date.now() + 10000
|
|
115
|
-
};
|
|
116
|
-
setCachedCredentials(identifier, credentials);
|
|
117
|
-
const result = getCachedCredentials(identifier);
|
|
118
|
-
expect(result).not.toBe(null);
|
|
119
|
-
expect(result?.encryptionKey).toBe('key-123');
|
|
120
|
-
expect(result?.encryptedSeed).toBe('seed-123');
|
|
121
|
-
});
|
|
122
|
-
it('should return null for expired credentials', () => {
|
|
123
|
-
const identifier = 'expired-wallet';
|
|
124
|
-
const store = getWorkletStore();
|
|
125
|
-
const currentTime = 1000000;
|
|
126
|
-
jest.setSystemTime(currentTime);
|
|
127
|
-
// Set credentials first
|
|
128
|
-
setCachedCredentials(identifier, {
|
|
129
|
-
encryptionKey: 'key-123',
|
|
130
|
-
});
|
|
131
|
-
// Manually set expired time in the store (bypassing setCachedCredentials which always sets future time)
|
|
132
|
-
store.setState({
|
|
133
|
-
credentialsCache: {
|
|
134
|
-
...store.getState().credentialsCache,
|
|
135
|
-
[identifier]: {
|
|
136
|
-
encryptionKey: 'key-123',
|
|
137
|
-
expiresAt: currentTime - 1000, // Expired (1 second in the past)
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
const result = getCachedCredentials(identifier);
|
|
142
|
-
expect(result).toBe(null);
|
|
143
|
-
});
|
|
144
|
-
it('should remove expired credentials from cache', () => {
|
|
145
|
-
const identifier = 'expired-wallet';
|
|
146
|
-
const store = getWorkletStore();
|
|
147
|
-
const currentTime = 1000000;
|
|
148
|
-
jest.setSystemTime(currentTime);
|
|
149
|
-
// Set credentials first
|
|
150
|
-
setCachedCredentials(identifier, {
|
|
151
|
-
encryptionKey: 'key-123',
|
|
152
|
-
});
|
|
153
|
-
// Manually set expired time in the store (bypassing setCachedCredentials which always sets future time)
|
|
154
|
-
store.setState({
|
|
155
|
-
credentialsCache: {
|
|
156
|
-
...store.getState().credentialsCache,
|
|
157
|
-
[identifier]: {
|
|
158
|
-
encryptionKey: 'key-123',
|
|
159
|
-
expiresAt: currentTime - 1000, // Expired (1 second in the past)
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
getCachedCredentials(identifier);
|
|
164
|
-
const state = store.getState();
|
|
165
|
-
expect(state.credentialsCache[identifier]).toBeUndefined();
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
describe('setCachedCredentials', () => {
|
|
169
|
-
it('should set credentials with expiration', () => {
|
|
170
|
-
const identifier = 'test-wallet';
|
|
171
|
-
const credentials = {
|
|
172
|
-
encryptionKey: 'key-123',
|
|
173
|
-
encryptedSeed: 'seed-123'
|
|
174
|
-
};
|
|
175
|
-
setCachedCredentials(identifier, credentials);
|
|
176
|
-
const result = getCachedCredentials(identifier);
|
|
177
|
-
expect(result).not.toBe(null);
|
|
178
|
-
expect(result?.encryptionKey).toBe('key-123');
|
|
179
|
-
expect(result?.encryptedSeed).toBe('seed-123');
|
|
180
|
-
expect(result?.expiresAt).toBeGreaterThan(Date.now());
|
|
181
|
-
});
|
|
182
|
-
it('should merge with existing credentials', () => {
|
|
183
|
-
const identifier = 'test-wallet';
|
|
184
|
-
setCachedCredentials(identifier, { encryptionKey: 'key-123' });
|
|
185
|
-
setCachedCredentials(identifier, { encryptedSeed: 'seed-123' });
|
|
186
|
-
const result = getCachedCredentials(identifier);
|
|
187
|
-
expect(result?.encryptionKey).toBe('key-123');
|
|
188
|
-
expect(result?.encryptedSeed).toBe('seed-123');
|
|
189
|
-
});
|
|
190
|
-
it('should update expiration on each set', () => {
|
|
191
|
-
const identifier = 'test-wallet';
|
|
192
|
-
setCachedCredentials(identifier, { encryptionKey: 'key-123' });
|
|
193
|
-
const firstExpiry = getCachedCredentials(identifier)?.expiresAt;
|
|
194
|
-
// Advance time
|
|
195
|
-
jest.advanceTimersByTime(100);
|
|
196
|
-
setCachedCredentials(identifier, { encryptedSeed: 'seed-123' });
|
|
197
|
-
const secondExpiry = getCachedCredentials(identifier)?.expiresAt;
|
|
198
|
-
expect(secondExpiry).toBeGreaterThan(firstExpiry);
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
describe('clearCredentialsCache', () => {
|
|
202
|
-
it('should clear specific wallet credentials', () => {
|
|
203
|
-
const identifier1 = 'wallet-1';
|
|
204
|
-
const identifier2 = 'wallet-2';
|
|
205
|
-
setCachedCredentials(identifier1, { encryptionKey: 'key-1' });
|
|
206
|
-
setCachedCredentials(identifier2, { encryptionKey: 'key-2' });
|
|
207
|
-
clearCredentialsCache(identifier1);
|
|
208
|
-
expect(getCachedCredentials(identifier1)).toBe(null);
|
|
209
|
-
expect(getCachedCredentials(identifier2)).not.toBe(null);
|
|
210
|
-
});
|
|
211
|
-
it('should clear all credentials when no identifier provided', () => {
|
|
212
|
-
const identifier1 = 'wallet-1';
|
|
213
|
-
const identifier2 = 'wallet-2';
|
|
214
|
-
setCachedCredentials(identifier1, { encryptionKey: 'key-1' });
|
|
215
|
-
setCachedCredentials(identifier2, { encryptionKey: 'key-2' });
|
|
216
|
-
clearCredentialsCache();
|
|
217
|
-
expect(getCachedCredentials(identifier1)).toBe(null);
|
|
218
|
-
expect(getCachedCredentials(identifier2)).toBe(null);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
describe('clearAllSensitiveData', () => {
|
|
222
|
-
it('should clear encrypted seed and encryption key', () => {
|
|
223
|
-
const store = createWorkletStore();
|
|
224
|
-
store.setState({
|
|
225
|
-
encryptedSeed: 'encrypted-seed',
|
|
226
|
-
encryptionKey: 'encryption-key',
|
|
227
|
-
});
|
|
228
|
-
clearAllSensitiveData();
|
|
229
|
-
const state = store.getState();
|
|
230
|
-
expect(state.encryptedSeed).toBe(null);
|
|
231
|
-
expect(state.encryptionKey).toBe(null);
|
|
232
|
-
});
|
|
233
|
-
it('should clear credentials cache', () => {
|
|
234
|
-
const identifier = 'test-wallet';
|
|
235
|
-
setCachedCredentials(identifier, { encryptionKey: 'key-123' });
|
|
236
|
-
clearAllSensitiveData();
|
|
237
|
-
expect(getCachedCredentials(identifier)).toBe(null);
|
|
238
|
-
});
|
|
239
|
-
it('should clear both active credentials and cache', () => {
|
|
240
|
-
const store = createWorkletStore();
|
|
241
|
-
const identifier = 'test-wallet';
|
|
242
|
-
store.setState({
|
|
243
|
-
encryptedSeed: 'encrypted-seed',
|
|
244
|
-
encryptionKey: 'encryption-key',
|
|
245
|
-
});
|
|
246
|
-
setCachedCredentials(identifier, { encryptionKey: 'key-123' });
|
|
247
|
-
clearAllSensitiveData();
|
|
248
|
-
const state = store.getState();
|
|
249
|
-
expect(state.encryptedSeed).toBe(null);
|
|
250
|
-
expect(state.encryptionKey).toBe(null);
|
|
251
|
-
expect(getCachedCredentials(identifier)).toBe(null);
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=workletStore.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workletStore.test.js","sourceRoot":"","sources":["../../../src/__tests__/store/workletStore.test.ts"],"names":[],"mappings":"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"}
|