@spacesops/wdk-react-native-core 1.0.0-beta.40

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 (275) hide show
  1. package/README.md +551 -0
  2. package/dist/__mocks__/react.d.ts +40 -0
  3. package/dist/__mocks__/react.js +33 -0
  4. package/dist/__mocks__/react.js.map +1 -0
  5. package/dist/__mocks__/secureStorage.d.ts +26 -0
  6. package/dist/__mocks__/secureStorage.js +80 -0
  7. package/dist/__mocks__/secureStorage.js.map +1 -0
  8. package/dist/__tests__/hooks/useBalance.test.d.ts +6 -0
  9. package/dist/__tests__/hooks/useBalance.test.js +217 -0
  10. package/dist/__tests__/hooks/useBalance.test.js.map +1 -0
  11. package/dist/__tests__/hooks/useWallet.test.d.ts +6 -0
  12. package/dist/__tests__/hooks/useWallet.test.js +105 -0
  13. package/dist/__tests__/hooks/useWallet.test.js.map +1 -0
  14. package/dist/__tests__/hooks/useWalletManager.test.d.ts +6 -0
  15. package/dist/__tests__/hooks/useWalletManager.test.js +193 -0
  16. package/dist/__tests__/hooks/useWalletManager.test.js.map +1 -0
  17. package/dist/__tests__/hooks/useWdkApp.test.d.ts +6 -0
  18. package/dist/__tests__/hooks/useWdkApp.test.js +55 -0
  19. package/dist/__tests__/hooks/useWdkApp.test.js.map +1 -0
  20. package/dist/__tests__/hooks/useWorklet.test.d.ts +6 -0
  21. package/dist/__tests__/hooks/useWorklet.test.js +168 -0
  22. package/dist/__tests__/hooks/useWorklet.test.js.map +1 -0
  23. package/dist/__tests__/provider/WdkAppProvider.test.d.ts +6 -0
  24. package/dist/__tests__/provider/WdkAppProvider.test.js +57 -0
  25. package/dist/__tests__/provider/WdkAppProvider.test.js.map +1 -0
  26. package/dist/__tests__/services/accountService.test.d.ts +6 -0
  27. package/dist/__tests__/services/accountService.test.js +216 -0
  28. package/dist/__tests__/services/accountService.test.js.map +1 -0
  29. package/dist/__tests__/services/addressService.test.d.ts +6 -0
  30. package/dist/__tests__/services/addressService.test.js +246 -0
  31. package/dist/__tests__/services/addressService.test.js.map +1 -0
  32. package/dist/__tests__/services/balanceService.test.d.ts +6 -0
  33. package/dist/__tests__/services/balanceService.test.js +333 -0
  34. package/dist/__tests__/services/balanceService.test.js.map +1 -0
  35. package/dist/__tests__/services/walletSetupService.test.d.ts +6 -0
  36. package/dist/__tests__/services/walletSetupService.test.js +304 -0
  37. package/dist/__tests__/services/walletSetupService.test.js.map +1 -0
  38. package/dist/__tests__/services/walletSwitchingService.test.d.ts +6 -0
  39. package/dist/__tests__/services/walletSwitchingService.test.js +209 -0
  40. package/dist/__tests__/services/walletSwitchingService.test.js.map +1 -0
  41. package/dist/__tests__/services/workletLifecycleService.test.d.ts +6 -0
  42. package/dist/__tests__/services/workletLifecycleService.test.js +451 -0
  43. package/dist/__tests__/services/workletLifecycleService.test.js.map +1 -0
  44. package/dist/__tests__/setup.d.ts +7 -0
  45. package/dist/__tests__/setup.js +49 -0
  46. package/dist/__tests__/setup.js.map +1 -0
  47. package/dist/__tests__/storage/mmkvStorage.test.d.ts +6 -0
  48. package/dist/__tests__/storage/mmkvStorage.test.js +213 -0
  49. package/dist/__tests__/storage/mmkvStorage.test.js.map +1 -0
  50. package/dist/__tests__/store/walletStore.test.d.ts +4 -0
  51. package/dist/__tests__/store/walletStore.test.js +86 -0
  52. package/dist/__tests__/store/walletStore.test.js.map +1 -0
  53. package/dist/__tests__/store/workletStore.test.d.ts +4 -0
  54. package/dist/__tests__/store/workletStore.test.js +255 -0
  55. package/dist/__tests__/store/workletStore.test.js.map +1 -0
  56. package/dist/__tests__/types/hrpc.test.d.ts +4 -0
  57. package/dist/__tests__/types/hrpc.test.js +99 -0
  58. package/dist/__tests__/types/hrpc.test.js.map +1 -0
  59. package/dist/__tests__/utils/balanceUtils.test.d.ts +4 -0
  60. package/dist/__tests__/utils/balanceUtils.test.js +133 -0
  61. package/dist/__tests__/utils/balanceUtils.test.js.map +1 -0
  62. package/dist/__tests__/utils/errorHandling.test.d.ts +6 -0
  63. package/dist/__tests__/utils/errorHandling.test.js +119 -0
  64. package/dist/__tests__/utils/errorHandling.test.js.map +1 -0
  65. package/dist/__tests__/utils/errorUtils.test.d.ts +4 -0
  66. package/dist/__tests__/utils/errorUtils.test.js +133 -0
  67. package/dist/__tests__/utils/errorUtils.test.js.map +1 -0
  68. package/dist/__tests__/utils/initializationState.test.d.ts +6 -0
  69. package/dist/__tests__/utils/initializationState.test.js +243 -0
  70. package/dist/__tests__/utils/initializationState.test.js.map +1 -0
  71. package/dist/__tests__/utils/jsonUtils.test.d.ts +4 -0
  72. package/dist/__tests__/utils/jsonUtils.test.js +118 -0
  73. package/dist/__tests__/utils/jsonUtils.test.js.map +1 -0
  74. package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +6 -0
  75. package/dist/__tests__/utils/mmkvKeyManager.test.js +158 -0
  76. package/dist/__tests__/utils/mmkvKeyManager.test.js.map +1 -0
  77. package/dist/__tests__/utils/mnemonicUtils.test.d.ts +4 -0
  78. package/dist/__tests__/utils/mnemonicUtils.test.js +40 -0
  79. package/dist/__tests__/utils/mnemonicUtils.test.js.map +1 -0
  80. package/dist/__tests__/utils/raceConditions.test.d.ts +6 -0
  81. package/dist/__tests__/utils/raceConditions.test.js +239 -0
  82. package/dist/__tests__/utils/raceConditions.test.js.map +1 -0
  83. package/dist/__tests__/utils/result.test.d.ts +4 -0
  84. package/dist/__tests__/utils/result.test.js +66 -0
  85. package/dist/__tests__/utils/result.test.js.map +1 -0
  86. package/dist/__tests__/utils/schemas.test.d.ts +4 -0
  87. package/dist/__tests__/utils/schemas.test.js +66 -0
  88. package/dist/__tests__/utils/schemas.test.js.map +1 -0
  89. package/dist/__tests__/utils/storeHelpers.test.d.ts +4 -0
  90. package/dist/__tests__/utils/storeHelpers.test.js +227 -0
  91. package/dist/__tests__/utils/storeHelpers.test.js.map +1 -0
  92. package/dist/__tests__/utils/typeGuards.test.d.ts +4 -0
  93. package/dist/__tests__/utils/typeGuards.test.js +175 -0
  94. package/dist/__tests__/utils/typeGuards.test.js.map +1 -0
  95. package/dist/__tests__/utils/validation.test.d.ts +4 -0
  96. package/dist/__tests__/utils/validation.test.js +126 -0
  97. package/dist/__tests__/utils/validation.test.js.map +1 -0
  98. package/dist/__tests__/utils/walletUtils.test.d.ts +4 -0
  99. package/dist/__tests__/utils/walletUtils.test.js +156 -0
  100. package/dist/__tests__/utils/walletUtils.test.js.map +1 -0
  101. package/dist/hooks/useBalance.d.ts +170 -0
  102. package/dist/hooks/useBalance.js +442 -0
  103. package/dist/hooks/useBalance.js.map +1 -0
  104. package/dist/hooks/useWallet.d.ts +43 -0
  105. package/dist/hooks/useWallet.js +193 -0
  106. package/dist/hooks/useWallet.js.map +1 -0
  107. package/dist/hooks/useWalletManager.d.ts +100 -0
  108. package/dist/hooks/useWalletManager.js +526 -0
  109. package/dist/hooks/useWalletManager.js.map +1 -0
  110. package/dist/hooks/useWdkApp.d.ts +66 -0
  111. package/dist/hooks/useWdkApp.js +74 -0
  112. package/dist/hooks/useWdkApp.js.map +1 -0
  113. package/dist/hooks/useWorklet.d.ts +66 -0
  114. package/dist/hooks/useWorklet.js +42 -0
  115. package/dist/hooks/useWorklet.js.map +1 -0
  116. package/dist/index.d.ts +33 -0
  117. package/dist/index.js +36 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/provider/WdkAppProvider.d.ts +112 -0
  120. package/dist/provider/WdkAppProvider.js +558 -0
  121. package/dist/provider/WdkAppProvider.js.map +1 -0
  122. package/dist/services/accountService.d.ts +52 -0
  123. package/dist/services/accountService.js +119 -0
  124. package/dist/services/accountService.js.map +1 -0
  125. package/dist/services/addressService.d.ts +22 -0
  126. package/dist/services/addressService.js +110 -0
  127. package/dist/services/addressService.js.map +1 -0
  128. package/dist/services/balanceService.d.ts +114 -0
  129. package/dist/services/balanceService.js +208 -0
  130. package/dist/services/balanceService.js.map +1 -0
  131. package/dist/services/walletSetupService.d.ts +217 -0
  132. package/dist/services/walletSetupService.js +535 -0
  133. package/dist/services/walletSetupService.js.map +1 -0
  134. package/dist/services/walletSwitchingService.d.ts +48 -0
  135. package/dist/services/walletSwitchingService.js +143 -0
  136. package/dist/services/walletSwitchingService.js.map +1 -0
  137. package/dist/services/workletLifecycleService.d.ts +117 -0
  138. package/dist/services/workletLifecycleService.js +433 -0
  139. package/dist/services/workletLifecycleService.js.map +1 -0
  140. package/dist/storage/mmkvStorage.d.ts +44 -0
  141. package/dist/storage/mmkvStorage.js +348 -0
  142. package/dist/storage/mmkvStorage.js.map +1 -0
  143. package/dist/store/walletStore.d.ts +130 -0
  144. package/dist/store/walletStore.js +204 -0
  145. package/dist/store/walletStore.js.map +1 -0
  146. package/dist/store/workletStore.d.ts +121 -0
  147. package/dist/store/workletStore.js +256 -0
  148. package/dist/store/workletStore.js.map +1 -0
  149. package/dist/types/hrpc.d.ts +60 -0
  150. package/dist/types/hrpc.js +26 -0
  151. package/dist/types/hrpc.js.map +1 -0
  152. package/dist/types.d.ts +168 -0
  153. package/dist/types.js +7 -0
  154. package/dist/types.js.map +1 -0
  155. package/dist/utils/balanceUtils.d.ts +30 -0
  156. package/dist/utils/balanceUtils.js +86 -0
  157. package/dist/utils/balanceUtils.js.map +1 -0
  158. package/dist/utils/constants.d.ts +66 -0
  159. package/dist/utils/constants.js +73 -0
  160. package/dist/utils/constants.js.map +1 -0
  161. package/dist/utils/errorHandling.d.ts +47 -0
  162. package/dist/utils/errorHandling.js +54 -0
  163. package/dist/utils/errorHandling.js.map +1 -0
  164. package/dist/utils/errorUtils.d.ts +89 -0
  165. package/dist/utils/errorUtils.js +264 -0
  166. package/dist/utils/errorUtils.js.map +1 -0
  167. package/dist/utils/initializationState.d.ts +129 -0
  168. package/dist/utils/initializationState.js +220 -0
  169. package/dist/utils/initializationState.js.map +1 -0
  170. package/dist/utils/jsonUtils.d.ts +21 -0
  171. package/dist/utils/jsonUtils.js +67 -0
  172. package/dist/utils/jsonUtils.js.map +1 -0
  173. package/dist/utils/logger.d.ts +27 -0
  174. package/dist/utils/logger.js +50 -0
  175. package/dist/utils/logger.js.map +1 -0
  176. package/dist/utils/mmkvKeyManager.d.ts +57 -0
  177. package/dist/utils/mmkvKeyManager.js +214 -0
  178. package/dist/utils/mmkvKeyManager.js.map +1 -0
  179. package/dist/utils/mnemonicUtils.d.ts +17 -0
  180. package/dist/utils/mnemonicUtils.js +28 -0
  181. package/dist/utils/mnemonicUtils.js.map +1 -0
  182. package/dist/utils/operationMutex.d.ts +69 -0
  183. package/dist/utils/operationMutex.js +150 -0
  184. package/dist/utils/operationMutex.js.map +1 -0
  185. package/dist/utils/result.d.ts +34 -0
  186. package/dist/utils/result.js +43 -0
  187. package/dist/utils/result.js.map +1 -0
  188. package/dist/utils/schemas.d.ts +365 -0
  189. package/dist/utils/schemas.js +152 -0
  190. package/dist/utils/schemas.js.map +1 -0
  191. package/dist/utils/storeHelpers.d.ts +112 -0
  192. package/dist/utils/storeHelpers.js +198 -0
  193. package/dist/utils/storeHelpers.js.map +1 -0
  194. package/dist/utils/typeGuards.d.ts +70 -0
  195. package/dist/utils/typeGuards.js +95 -0
  196. package/dist/utils/typeGuards.js.map +1 -0
  197. package/dist/utils/validation.d.ts +53 -0
  198. package/dist/utils/validation.js +152 -0
  199. package/dist/utils/validation.js.map +1 -0
  200. package/dist/utils/walletStateHelpers.d.ts +62 -0
  201. package/dist/utils/walletStateHelpers.js +81 -0
  202. package/dist/utils/walletStateHelpers.js.map +1 -0
  203. package/dist/utils/walletUtils.d.ts +38 -0
  204. package/dist/utils/walletUtils.js +87 -0
  205. package/dist/utils/walletUtils.js.map +1 -0
  206. package/package.json +79 -0
  207. package/src/__mocks__/react.ts +34 -0
  208. package/src/__mocks__/secureStorage.ts +87 -0
  209. package/src/__tests__/hooks/useBalance.test.ts +286 -0
  210. package/src/__tests__/hooks/useWallet.test.ts +122 -0
  211. package/src/__tests__/hooks/useWalletManager.test.ts +271 -0
  212. package/src/__tests__/hooks/useWdkApp.test.tsx +59 -0
  213. package/src/__tests__/hooks/useWorklet.test.ts +195 -0
  214. package/src/__tests__/provider/WdkAppProvider.test.tsx +67 -0
  215. package/src/__tests__/services/accountService.test.ts +337 -0
  216. package/src/__tests__/services/addressService.test.ts +312 -0
  217. package/src/__tests__/services/balanceService.test.ts +411 -0
  218. package/src/__tests__/services/walletSetupService.test.ts +463 -0
  219. package/src/__tests__/services/walletSwitchingService.test.ts +258 -0
  220. package/src/__tests__/services/workletLifecycleService.test.ts +514 -0
  221. package/src/__tests__/setup.ts +54 -0
  222. package/src/__tests__/storage/mmkvStorage.test.ts +325 -0
  223. package/src/__tests__/store/walletStore.test.ts +101 -0
  224. package/src/__tests__/store/workletStore.test.ts +329 -0
  225. package/src/__tests__/types/hrpc.test.ts +125 -0
  226. package/src/__tests__/utils/balanceUtils.test.ts +151 -0
  227. package/src/__tests__/utils/errorHandling.test.ts +147 -0
  228. package/src/__tests__/utils/errorUtils.test.ts +170 -0
  229. package/src/__tests__/utils/initializationState.test.ts +337 -0
  230. package/src/__tests__/utils/jsonUtils.test.ts +131 -0
  231. package/src/__tests__/utils/mmkvKeyManager.test.ts +205 -0
  232. package/src/__tests__/utils/mnemonicUtils.test.ts +48 -0
  233. package/src/__tests__/utils/raceConditions.test.ts +292 -0
  234. package/src/__tests__/utils/result.test.ts +73 -0
  235. package/src/__tests__/utils/schemas.test.ts +82 -0
  236. package/src/__tests__/utils/storeHelpers.test.ts +323 -0
  237. package/src/__tests__/utils/typeGuards.test.ts +209 -0
  238. package/src/__tests__/utils/validation.test.ts +152 -0
  239. package/src/__tests__/utils/walletUtils.test.ts +195 -0
  240. package/src/hooks/useBalance.ts +597 -0
  241. package/src/hooks/useWallet.ts +288 -0
  242. package/src/hooks/useWalletManager.ts +654 -0
  243. package/src/hooks/useWdkApp.ts +78 -0
  244. package/src/hooks/useWorklet.ts +109 -0
  245. package/src/index.ts +112 -0
  246. package/src/provider/WdkAppProvider.tsx +764 -0
  247. package/src/services/accountService.ts +134 -0
  248. package/src/services/addressService.ts +125 -0
  249. package/src/services/balanceService.ts +291 -0
  250. package/src/services/walletSetupService.ts +695 -0
  251. package/src/services/walletSwitchingService.ts +157 -0
  252. package/src/services/workletLifecycleService.ts +561 -0
  253. package/src/storage/mmkvStorage.ts +417 -0
  254. package/src/store/walletStore.ts +301 -0
  255. package/src/store/workletStore.ts +340 -0
  256. package/src/types/hrpc.ts +78 -0
  257. package/src/types.ts +188 -0
  258. package/src/utils/balanceUtils.ts +96 -0
  259. package/src/utils/constants.ts +84 -0
  260. package/src/utils/errorHandling.md +163 -0
  261. package/src/utils/errorHandling.ts +61 -0
  262. package/src/utils/errorUtils.ts +300 -0
  263. package/src/utils/initializationState.ts +242 -0
  264. package/src/utils/jsonUtils.ts +75 -0
  265. package/src/utils/logger.ts +54 -0
  266. package/src/utils/mmkvKeyManager.ts +256 -0
  267. package/src/utils/mnemonicUtils.ts +35 -0
  268. package/src/utils/operationMutex.ts +181 -0
  269. package/src/utils/result.ts +57 -0
  270. package/src/utils/schemas.ts +190 -0
  271. package/src/utils/storeHelpers.ts +236 -0
  272. package/src/utils/typeGuards.ts +129 -0
  273. package/src/utils/validation.ts +174 -0
  274. package/src/utils/walletStateHelpers.ts +104 -0
  275. package/src/utils/walletUtils.ts +107 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Mock SecureStorage for testing
3
+ *
4
+ * Supports identifier parameter for multi-wallet testing
5
+ */
6
+ // Internal storage to simulate per-identifier wallet storage
7
+ const storage = {};
8
+ const getStorageKey = (identifier) => {
9
+ return identifier || 'default';
10
+ };
11
+ export const mockSecureStorage = {
12
+ authenticate: jest.fn(() => Promise.resolve(true)),
13
+ hasWallet: jest.fn((identifier) => {
14
+ const key = getStorageKey(identifier);
15
+ const wallet = storage[key];
16
+ return Promise.resolve(wallet !== undefined && wallet.encryptionKey !== null);
17
+ }),
18
+ setEncryptionKey: jest.fn((key, identifier) => {
19
+ const storageKey = getStorageKey(identifier);
20
+ if (!storage[storageKey]) {
21
+ storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
22
+ }
23
+ storage[storageKey].encryptionKey = key;
24
+ return Promise.resolve();
25
+ }),
26
+ getEncryptionKey: jest.fn((identifier) => {
27
+ const storageKey = getStorageKey(identifier);
28
+ return Promise.resolve(storage[storageKey]?.encryptionKey || null);
29
+ }),
30
+ setEncryptedSeed: jest.fn((seed, identifier) => {
31
+ const storageKey = getStorageKey(identifier);
32
+ if (!storage[storageKey]) {
33
+ storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
34
+ }
35
+ storage[storageKey].encryptedSeed = seed;
36
+ return Promise.resolve();
37
+ }),
38
+ getEncryptedSeed: jest.fn((identifier) => {
39
+ const storageKey = getStorageKey(identifier);
40
+ return Promise.resolve(storage[storageKey]?.encryptedSeed || null);
41
+ }),
42
+ setEncryptedEntropy: jest.fn((entropy, identifier) => {
43
+ const storageKey = getStorageKey(identifier);
44
+ if (!storage[storageKey]) {
45
+ storage[storageKey] = { encryptionKey: null, encryptedSeed: null, encryptedEntropy: null };
46
+ }
47
+ storage[storageKey].encryptedEntropy = entropy;
48
+ return Promise.resolve();
49
+ }),
50
+ getEncryptedEntropy: jest.fn((identifier) => {
51
+ const storageKey = getStorageKey(identifier);
52
+ return Promise.resolve(storage[storageKey]?.encryptedEntropy || null);
53
+ }),
54
+ getAllEncrypted: jest.fn((identifier) => {
55
+ const storageKey = getStorageKey(identifier);
56
+ const wallet = storage[storageKey];
57
+ return Promise.resolve({
58
+ encryptedSeed: wallet?.encryptedSeed || null,
59
+ encryptedEntropy: wallet?.encryptedEntropy || null,
60
+ encryptionKey: wallet?.encryptionKey || null,
61
+ });
62
+ }),
63
+ clearAll: jest.fn(() => {
64
+ Object.keys(storage).forEach(key => delete storage[key]);
65
+ return Promise.resolve();
66
+ }),
67
+ isBiometricAvailable: jest.fn(() => Promise.resolve(true)),
68
+ deleteWallet: jest.fn((identifier) => {
69
+ const storageKey = getStorageKey(identifier);
70
+ delete storage[storageKey];
71
+ return Promise.resolve();
72
+ }),
73
+ cleanup: jest.fn(),
74
+ // Helper method to clear storage between tests
75
+ _clearStorage: () => {
76
+ Object.keys(storage).forEach(key => delete storage[key]);
77
+ },
78
+ };
79
+ export default mockSecureStorage;
80
+ //# sourceMappingURL=secureStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secureStorage.js","sourceRoot":"","sources":["../../src/__mocks__/secureStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tests for useBalance hook
3
+ *
4
+ * Tests balance hook logic with TanStack Query integration
5
+ */
6
+ export {};
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Tests for useBalance hook
3
+ *
4
+ * Tests balance hook logic with TanStack Query integration
5
+ */
6
+ import { balanceQueryKeys } from '../../hooks/useBalance';
7
+ import { AccountService } from '../../services/accountService';
8
+ import { BalanceService } from '../../services/balanceService';
9
+ import { getWorkletStore } from '../../store/workletStore';
10
+ import { getWalletStore } from '../../store/walletStore';
11
+ import { convertBalanceToString } from '../../utils/balanceUtils';
12
+ import { NATIVE_TOKEN_KEY } from '../../utils/constants';
13
+ // Mock TanStack Query
14
+ jest.mock('@tanstack/react-query', () => ({
15
+ useQuery: jest.fn(),
16
+ useMutation: jest.fn(),
17
+ useQueryClient: jest.fn(),
18
+ }));
19
+ // Mock stores and services
20
+ jest.mock('../../store/workletStore', () => ({
21
+ getWorkletStore: jest.fn(),
22
+ }));
23
+ jest.mock('../../store/walletStore', () => ({
24
+ getWalletStore: jest.fn(),
25
+ }));
26
+ jest.mock('../../services/accountService', () => ({
27
+ AccountService: {
28
+ callAccountMethod: jest.fn(),
29
+ },
30
+ }));
31
+ jest.mock('../../services/balanceService', () => ({
32
+ BalanceService: {
33
+ updateBalance: jest.fn(),
34
+ updateLastBalanceUpdate: jest.fn(),
35
+ getBalance: jest.fn(),
36
+ },
37
+ }));
38
+ jest.mock('../../utils/balanceUtils', () => ({
39
+ convertBalanceToString: jest.fn((val) => String(val)),
40
+ }));
41
+ jest.mock('../../utils/storeHelpers', () => ({
42
+ resolveWalletId: jest.fn((id) => id || 'default-wallet'),
43
+ }));
44
+ jest.mock('../../utils/validation', () => ({
45
+ validateWalletParams: jest.fn(),
46
+ }));
47
+ jest.mock('../../utils/logger', () => ({
48
+ log: jest.fn(),
49
+ logError: jest.fn(),
50
+ }));
51
+ describe('useBalance', () => {
52
+ let mockWorkletStore;
53
+ let mockWalletStore;
54
+ beforeEach(() => {
55
+ jest.clearAllMocks();
56
+ mockWorkletStore = {
57
+ getState: jest.fn(() => ({
58
+ isInitialized: true,
59
+ })),
60
+ };
61
+ mockWalletStore = {
62
+ getState: jest.fn(() => ({
63
+ activeWalletId: 'test-wallet-1',
64
+ })),
65
+ };
66
+ getWorkletStore.mockReturnValue(mockWorkletStore);
67
+ getWalletStore.mockReturnValue(mockWalletStore);
68
+ });
69
+ describe('balanceQueryKeys', () => {
70
+ it('should create correct query keys', () => {
71
+ expect(balanceQueryKeys.all).toEqual(['balances']);
72
+ const walletKey = balanceQueryKeys.byWallet('wallet-1', 0);
73
+ expect(walletKey).toEqual(['balances', 'wallet', 'wallet-1', 0]);
74
+ const networkKey = balanceQueryKeys.byNetwork('ethereum');
75
+ expect(networkKey).toEqual(['balances', 'network', 'ethereum']);
76
+ const walletNetworkKey = balanceQueryKeys.byWalletAndNetwork('wallet-1', 0, 'ethereum');
77
+ expect(walletNetworkKey).toEqual([
78
+ 'balances',
79
+ 'wallet',
80
+ 'wallet-1',
81
+ 0,
82
+ 'network',
83
+ 'ethereum',
84
+ ]);
85
+ const nativeTokenKey = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', null);
86
+ expect(nativeTokenKey).toEqual([
87
+ 'balances',
88
+ 'wallet',
89
+ 'wallet-1',
90
+ 0,
91
+ 'network',
92
+ 'ethereum',
93
+ 'token',
94
+ NATIVE_TOKEN_KEY,
95
+ ]);
96
+ const tokenKey = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', '0x123');
97
+ expect(tokenKey).toEqual([
98
+ 'balances',
99
+ 'wallet',
100
+ 'wallet-1',
101
+ 0,
102
+ 'network',
103
+ 'ethereum',
104
+ 'token',
105
+ '0x123',
106
+ ]);
107
+ });
108
+ });
109
+ describe('fetchBalance function (tested via hook)', () => {
110
+ it('should handle wallet not initialized', async () => {
111
+ mockWorkletStore.getState.mockReturnValue({ isInitialized: false });
112
+ // Import after mocks are set up
113
+ const { useBalance } = await import('../../hooks/useBalance');
114
+ const { useQuery } = await import('@tanstack/react-query');
115
+ const mockUseQuery = useQuery;
116
+ mockUseQuery.mockReturnValue({
117
+ data: {
118
+ success: false,
119
+ network: 'ethereum',
120
+ accountIndex: 0,
121
+ tokenAddress: null,
122
+ balance: null,
123
+ error: 'Wallet not initialized',
124
+ },
125
+ isLoading: false,
126
+ error: null,
127
+ });
128
+ // The hook would be called in a React component, but we can test the query function
129
+ expect(mockUseQuery).toBeDefined();
130
+ });
131
+ it('should fetch native balance successfully', async () => {
132
+ const mockBalance = '1000000000000000000';
133
+ AccountService.callAccountMethod.mockResolvedValue(mockBalance);
134
+ convertBalanceToString.mockReturnValue(mockBalance);
135
+ const { useQuery } = await import('@tanstack/react-query');
136
+ const mockUseQuery = useQuery;
137
+ // Simulate query function call
138
+ const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
139
+ if (queryFn) {
140
+ const result = await queryFn();
141
+ expect(result.success).toBe(true);
142
+ expect(result.balance).toBe(mockBalance);
143
+ expect(AccountService.callAccountMethod).toHaveBeenCalled();
144
+ expect(BalanceService.updateBalance).toHaveBeenCalled();
145
+ }
146
+ });
147
+ it('should fetch token balance successfully', async () => {
148
+ const mockBalance = '2000000000000000000';
149
+ const tokenAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
150
+ AccountService.callAccountMethod.mockResolvedValue(mockBalance);
151
+ convertBalanceToString.mockReturnValue(mockBalance);
152
+ const { useQuery } = await import('@tanstack/react-query');
153
+ const mockUseQuery = useQuery;
154
+ // Simulate query function call
155
+ const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
156
+ if (queryFn) {
157
+ const result = await queryFn();
158
+ expect(result.success).toBe(true);
159
+ expect(result.balance).toBe(mockBalance);
160
+ expect(AccountService.callAccountMethod).toHaveBeenCalledWith('ethereum', 0, 'getTokenBalance', tokenAddress);
161
+ }
162
+ });
163
+ it('should handle fetch errors', async () => {
164
+ const error = new Error('Network error');
165
+ AccountService.callAccountMethod.mockRejectedValue(error);
166
+ const { useQuery } = await import('@tanstack/react-query');
167
+ const mockUseQuery = useQuery;
168
+ // Simulate query function call
169
+ const queryFn = mockUseQuery.mock.calls[0]?.[0]?.queryFn;
170
+ if (queryFn) {
171
+ const result = await queryFn();
172
+ expect(result.success).toBe(false);
173
+ expect(result.error).toBe('Network error');
174
+ expect(result.balance).toBeNull();
175
+ }
176
+ });
177
+ });
178
+ describe('useBalancesForWallet', () => {
179
+ it('should build query keys for all tokens', async () => {
180
+ const tokenConfigs = {
181
+ ethereum: {
182
+ native: { address: null, symbol: 'ETH', decimals: 18 },
183
+ tokens: [{ address: '0x123', symbol: 'USDC', decimals: 6 }],
184
+ },
185
+ };
186
+ const { useQuery } = await import('@tanstack/react-query');
187
+ const mockUseQuery = useQuery;
188
+ mockUseQuery.mockReturnValue({
189
+ data: [],
190
+ isLoading: false,
191
+ error: null,
192
+ });
193
+ // Test that query keys are built correctly
194
+ // This would be tested in a React component, but we verify the structure
195
+ expect(mockUseQuery).toBeDefined();
196
+ });
197
+ });
198
+ describe('useRefreshBalance', () => {
199
+ it('should invalidate queries correctly', async () => {
200
+ // Since we can't actually call React hooks in Node environment,
201
+ // we verify that the hook exports exist and the query key functions work
202
+ const { useRefreshBalance, balanceQueryKeys } = await import('../../hooks/useBalance');
203
+ // Verify the hook is exported
204
+ expect(typeof useRefreshBalance).toBe('function');
205
+ // Verify query keys can be used for invalidation
206
+ const allKeys = balanceQueryKeys.all;
207
+ const walletKeys = balanceQueryKeys.byWallet('wallet-1', 0);
208
+ const networkKeys = balanceQueryKeys.byNetwork('ethereum');
209
+ const tokenKeys = balanceQueryKeys.byToken('wallet-1', 0, 'ethereum', null);
210
+ expect(allKeys).toEqual(['balances']);
211
+ expect(walletKeys).toEqual(['balances', 'wallet', 'wallet-1', 0]);
212
+ expect(networkKeys).toEqual(['balances', 'network', 'ethereum']);
213
+ expect(tokenKeys).toContain('balances');
214
+ });
215
+ });
216
+ });
217
+ //# sourceMappingURL=useBalance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBalance.test.js","sourceRoot":"","sources":["../../../src/__tests__/hooks/useBalance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tests for useWallet hook
3
+ *
4
+ * Tests wallet hook logic without React rendering
5
+ */
6
+ export {};
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Tests for useWallet hook
3
+ *
4
+ * Tests wallet hook logic without React rendering
5
+ */
6
+ import { getWorkletStore } from '../../store/workletStore';
7
+ import { getWalletStore } from '../../store/walletStore';
8
+ import { AddressService } from '../../services/addressService';
9
+ import { AccountService } from '../../services/accountService';
10
+ import { BalanceService } from '../../services/balanceService';
11
+ // Mock stores and services
12
+ jest.mock('../../store/workletStore', () => ({
13
+ getWorkletStore: jest.fn(),
14
+ }));
15
+ jest.mock('../../store/walletStore', () => ({
16
+ getWalletStore: jest.fn(),
17
+ }));
18
+ jest.mock('../../services/addressService', () => ({
19
+ AddressService: {
20
+ getAddress: jest.fn(),
21
+ },
22
+ }));
23
+ jest.mock('../../services/accountService', () => ({
24
+ AccountService: {
25
+ callAccountMethod: jest.fn(),
26
+ },
27
+ }));
28
+ jest.mock('../../services/balanceService', () => ({
29
+ BalanceService: {
30
+ updateBalance: jest.fn(),
31
+ getBalance: jest.fn(),
32
+ getBalancesForWallet: jest.fn(),
33
+ setBalanceLoading: jest.fn(),
34
+ isBalanceLoading: jest.fn(),
35
+ updateLastBalanceUpdate: jest.fn(),
36
+ getLastBalanceUpdate: jest.fn(),
37
+ clearBalances: jest.fn(),
38
+ },
39
+ }));
40
+ describe('useWallet', () => {
41
+ let mockWorkletStore;
42
+ let mockWalletStore;
43
+ beforeEach(() => {
44
+ jest.clearAllMocks();
45
+ mockWorkletStore = jest.fn((selector) => {
46
+ const state = {
47
+ isInitialized: true,
48
+ };
49
+ return selector ? selector(state) : state;
50
+ });
51
+ mockWalletStore = jest.fn((selector) => {
52
+ const state = {
53
+ addresses: {
54
+ ethereum: {
55
+ 0: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0',
56
+ },
57
+ },
58
+ walletLoading: {},
59
+ balances: {
60
+ ethereum: {
61
+ 0: {
62
+ native: '1000000000000000000',
63
+ },
64
+ },
65
+ },
66
+ balanceLoading: {},
67
+ lastBalanceUpdate: {
68
+ ethereum: {
69
+ 0: 1234567890,
70
+ },
71
+ },
72
+ };
73
+ return selector ? selector(state) : state;
74
+ });
75
+ getWorkletStore.mockReturnValue(mockWorkletStore);
76
+ getWalletStore.mockReturnValue(mockWalletStore);
77
+ });
78
+ it('should call services correctly', () => {
79
+ // Test that the hook calls the correct services
80
+ // Since we can't easily test React hooks in Node, we verify the service calls
81
+ const mockAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
82
+ AddressService.getAddress.mockResolvedValue(mockAddress);
83
+ // Verify service methods are callable
84
+ expect(typeof AddressService.getAddress).toBe('function');
85
+ expect(typeof AccountService.callAccountMethod).toBe('function');
86
+ expect(typeof BalanceService.updateBalance).toBe('function');
87
+ expect(typeof BalanceService.getBalance).toBe('function');
88
+ expect(typeof BalanceService.getBalancesForWallet).toBe('function');
89
+ expect(typeof BalanceService.setBalanceLoading).toBe('function');
90
+ expect(typeof BalanceService.isBalanceLoading).toBe('function');
91
+ expect(typeof BalanceService.updateLastBalanceUpdate).toBe('function');
92
+ expect(typeof BalanceService.getLastBalanceUpdate).toBe('function');
93
+ expect(typeof BalanceService.clearBalances).toBe('function');
94
+ });
95
+ it('should have correct store structure', () => {
96
+ // Verify stores return expected structure
97
+ expect(getWorkletStore).toBeDefined();
98
+ expect(getWalletStore).toBeDefined();
99
+ const workletStore = getWorkletStore();
100
+ const walletStore = getWalletStore();
101
+ expect(workletStore).toBeDefined();
102
+ expect(walletStore).toBeDefined();
103
+ });
104
+ });
105
+ //# sourceMappingURL=useWallet.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWallet.test.js","sourceRoot":"","sources":["../../../src/__tests__/hooks/useWallet.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tests for useWalletManager hook
3
+ *
4
+ * Tests wallet lifecycle management hook
5
+ */
6
+ export {};
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Tests for useWalletManager hook
3
+ *
4
+ * Tests wallet lifecycle management hook
5
+ */
6
+ import { WalletSetupService } from '../../services/walletSetupService';
7
+ import { getWalletStore } from '../../store/walletStore';
8
+ // Mock stores and services
9
+ jest.mock('../../store/walletStore', () => ({
10
+ getWalletStore: jest.fn(),
11
+ }));
12
+ jest.mock('../../services/walletSetupService', () => ({
13
+ WalletSetupService: {
14
+ initializeWallet: jest.fn(),
15
+ hasWallet: jest.fn(),
16
+ initializeFromMnemonic: jest.fn(),
17
+ deleteWallet: jest.fn(),
18
+ getMnemonic: jest.fn(),
19
+ createNewWallet: jest.fn(),
20
+ },
21
+ }));
22
+ jest.mock('../../utils/logger', () => ({
23
+ log: jest.fn(),
24
+ logError: jest.fn(),
25
+ }));
26
+ // Mock React hooks
27
+ jest.mock('react', () => ({
28
+ useCallback: jest.fn((fn) => fn),
29
+ useMemo: jest.fn((fn) => fn()),
30
+ useState: jest.fn((initial) => [initial, jest.fn()]),
31
+ }));
32
+ jest.mock('zustand/react/shallow', () => ({
33
+ useShallow: jest.fn((selector) => selector),
34
+ }));
35
+ describe('useWalletManager', () => {
36
+ let mockWalletStore;
37
+ const mockNetworkConfigs = {
38
+ ethereum: {
39
+ chainId: 1,
40
+ blockchain: 'ethereum',
41
+ },
42
+ };
43
+ beforeEach(() => {
44
+ jest.clearAllMocks();
45
+ mockWalletStore = {
46
+ getState: jest.fn(() => ({
47
+ walletList: [],
48
+ activeWalletId: null,
49
+ })),
50
+ setState: jest.fn(),
51
+ };
52
+ getWalletStore.mockReturnValue(mockWalletStore);
53
+ });
54
+ describe('initializeWallet', () => {
55
+ it('should call WalletSetupService.initializeWallet', async () => {
56
+ ;
57
+ WalletSetupService.initializeWallet.mockResolvedValue(undefined);
58
+ const { useWalletManager } = await import('../../hooks/useWalletManager');
59
+ // Since we can't easily test React hooks in Node, we verify the service calls
60
+ expect(WalletSetupService.initializeWallet).toBeDefined();
61
+ expect(typeof WalletSetupService.initializeWallet).toBe('function');
62
+ });
63
+ it('should handle initialization errors', async () => {
64
+ const error = new Error('Initialization failed');
65
+ WalletSetupService.initializeWallet.mockRejectedValue(error);
66
+ expect(WalletSetupService.initializeWallet).toBeDefined();
67
+ await expect(WalletSetupService.initializeWallet(mockNetworkConfigs, {})).rejects.toThrow('Initialization failed');
68
+ });
69
+ });
70
+ describe('initializeFromMnemonic', () => {
71
+ it('should call WalletSetupService.initializeFromMnemonic', async () => {
72
+ const mnemonic = 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12';
73
+ WalletSetupService.initializeFromMnemonic.mockResolvedValue(undefined);
74
+ expect(WalletSetupService.initializeFromMnemonic).toBeDefined();
75
+ await WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, mnemonic, 'test-wallet');
76
+ expect(WalletSetupService.initializeFromMnemonic).toHaveBeenCalledWith(mockNetworkConfigs, mnemonic, 'test-wallet');
77
+ });
78
+ it('should handle mnemonic import errors', async () => {
79
+ const error = new Error('Invalid mnemonic');
80
+ WalletSetupService.initializeFromMnemonic.mockRejectedValue(error);
81
+ await expect(WalletSetupService.initializeFromMnemonic(mockNetworkConfigs, 'invalid', 'test-wallet')).rejects.toThrow('Invalid mnemonic');
82
+ });
83
+ });
84
+ describe('hasWallet', () => {
85
+ it('should check if wallet exists', async () => {
86
+ ;
87
+ WalletSetupService.hasWallet.mockResolvedValue(true);
88
+ const result = await WalletSetupService.hasWallet('test-wallet');
89
+ expect(result).toBe(true);
90
+ expect(WalletSetupService.hasWallet).toHaveBeenCalledWith('test-wallet');
91
+ });
92
+ it('should return false if wallet does not exist', async () => {
93
+ ;
94
+ WalletSetupService.hasWallet.mockResolvedValue(false);
95
+ const result = await WalletSetupService.hasWallet('non-existent');
96
+ expect(result).toBe(false);
97
+ });
98
+ });
99
+ describe('deleteWallet', () => {
100
+ it('should delete wallet and update store', async () => {
101
+ ;
102
+ WalletSetupService.deleteWallet.mockResolvedValue(undefined);
103
+ mockWalletStore.getState.mockReturnValue({
104
+ walletList: [
105
+ { identifier: 'test-wallet', exists: true, isActive: true },
106
+ ],
107
+ activeWalletId: 'test-wallet',
108
+ });
109
+ await WalletSetupService.deleteWallet('test-wallet');
110
+ expect(WalletSetupService.deleteWallet).toHaveBeenCalledWith('test-wallet');
111
+ });
112
+ it('should handle delete errors', async () => {
113
+ const error = new Error('Delete failed');
114
+ WalletSetupService.deleteWallet.mockRejectedValue(error);
115
+ await expect(WalletSetupService.deleteWallet('test-wallet')).rejects.toThrow('Delete failed');
116
+ });
117
+ });
118
+ describe('getMnemonic', () => {
119
+ it('should retrieve mnemonic phrase', async () => {
120
+ const mnemonic = 'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12';
121
+ WalletSetupService.getMnemonic.mockResolvedValue(mnemonic);
122
+ const result = await WalletSetupService.getMnemonic('test-wallet');
123
+ expect(result).toBe(mnemonic);
124
+ expect(WalletSetupService.getMnemonic).toHaveBeenCalledWith('test-wallet');
125
+ });
126
+ it('should return null if mnemonic not found', async () => {
127
+ ;
128
+ WalletSetupService.getMnemonic.mockResolvedValue(null);
129
+ const result = await WalletSetupService.getMnemonic('non-existent');
130
+ expect(result).toBeNull();
131
+ });
132
+ it('should handle get mnemonic errors', async () => {
133
+ const error = new Error('Failed to get mnemonic');
134
+ WalletSetupService.getMnemonic.mockRejectedValue(error);
135
+ await expect(WalletSetupService.getMnemonic('test-wallet')).rejects.toThrow('Failed to get mnemonic');
136
+ });
137
+ });
138
+ describe('createWallet', () => {
139
+ it('should create new wallet', async () => {
140
+ ;
141
+ WalletSetupService.hasWallet.mockResolvedValue(false);
142
+ WalletSetupService.createNewWallet.mockResolvedValue(undefined);
143
+ await WalletSetupService.createNewWallet(mockNetworkConfigs, 'new-wallet');
144
+ expect(WalletSetupService.createNewWallet).toHaveBeenCalledWith(mockNetworkConfigs, 'new-wallet');
145
+ });
146
+ it('should throw error if wallet already exists', async () => {
147
+ ;
148
+ WalletSetupService.hasWallet.mockResolvedValue(true);
149
+ // This would be handled in the hook, but we verify the service
150
+ expect(WalletSetupService.hasWallet).toBeDefined();
151
+ });
152
+ });
153
+ describe('refreshWalletList', () => {
154
+ it('should refresh wallet list with known identifiers', async () => {
155
+ ;
156
+ WalletSetupService.hasWallet.mockImplementation((id) => {
157
+ return Promise.resolve(id === 'wallet-1' || id === 'wallet-2');
158
+ });
159
+ mockWalletStore.getState.mockReturnValue({
160
+ walletList: [],
161
+ activeWalletId: 'wallet-1',
162
+ });
163
+ // Verify hasWallet can be called for multiple wallets
164
+ const wallet1Exists = await WalletSetupService.hasWallet('wallet-1');
165
+ const wallet2Exists = await WalletSetupService.hasWallet('wallet-2');
166
+ const wallet3Exists = await WalletSetupService.hasWallet('wallet-3');
167
+ expect(wallet1Exists).toBe(true);
168
+ expect(wallet2Exists).toBe(true);
169
+ expect(wallet3Exists).toBe(false);
170
+ });
171
+ it('should handle refresh errors', async () => {
172
+ const error = new Error('Refresh failed');
173
+ WalletSetupService.hasWallet.mockRejectedValue(error);
174
+ await expect(WalletSetupService.hasWallet('test-wallet')).rejects.toThrow('Refresh failed');
175
+ });
176
+ });
177
+ describe('wallet list state', () => {
178
+ it('should return wallet list from store', () => {
179
+ const walletList = [
180
+ { identifier: 'wallet-1', exists: true, isActive: true },
181
+ { identifier: 'wallet-2', exists: true, isActive: false },
182
+ ];
183
+ mockWalletStore.getState.mockReturnValue({
184
+ walletList,
185
+ activeWalletId: 'wallet-1',
186
+ });
187
+ const state = mockWalletStore.getState();
188
+ expect(state.walletList).toEqual(walletList);
189
+ expect(state.activeWalletId).toBe('wallet-1');
190
+ });
191
+ });
192
+ });
193
+ //# sourceMappingURL=useWalletManager.test.js.map