@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,246 @@
1
+ /**
2
+ * Tests for AddressService
3
+ *
4
+ * Tests address retrieval functionality
5
+ */
6
+ import { AddressService } from '../../services/addressService';
7
+ import { getWorkletStore } from '../../store/workletStore';
8
+ import { getWalletStore } from '../../store/walletStore';
9
+ // Mock stores
10
+ jest.mock('../../store/workletStore', () => ({
11
+ getWorkletStore: jest.fn(),
12
+ }));
13
+ jest.mock('../../store/walletStore', () => ({
14
+ getWalletStore: jest.fn(),
15
+ }));
16
+ describe('AddressService', () => {
17
+ let mockWorkletStore;
18
+ let mockWalletStore;
19
+ let mockHRPC;
20
+ beforeEach(() => {
21
+ jest.clearAllMocks();
22
+ // Setup mock HRPC
23
+ mockHRPC = {
24
+ callMethod: jest.fn(),
25
+ };
26
+ // Setup mock worklet store
27
+ mockWorkletStore = {
28
+ getState: jest.fn(() => ({
29
+ isInitialized: true,
30
+ hrpc: mockHRPC,
31
+ isWorkletStarted: true,
32
+ })),
33
+ };
34
+ // Setup mock wallet store
35
+ mockWalletStore = {
36
+ getState: jest.fn(() => ({
37
+ addresses: {},
38
+ walletLoading: {},
39
+ activeWalletId: 'test-wallet-1',
40
+ })),
41
+ setState: jest.fn(),
42
+ };
43
+ getWorkletStore.mockReturnValue(mockWorkletStore);
44
+ getWalletStore.mockReturnValue(mockWalletStore);
45
+ });
46
+ describe('getAddress', () => {
47
+ it('should get address from worklet and cache it', async () => {
48
+ const mockAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
49
+ mockHRPC.callMethod.mockResolvedValue({
50
+ result: JSON.stringify(mockAddress),
51
+ });
52
+ const address = await AddressService.getAddress('ethereum', 0);
53
+ expect(address).toBe(mockAddress);
54
+ expect(mockHRPC.callMethod).toHaveBeenCalledWith({
55
+ methodName: 'getAddress',
56
+ network: 'ethereum',
57
+ accountIndex: 0,
58
+ args: null,
59
+ });
60
+ // Verify address was cached
61
+ expect(mockWalletStore.setState).toHaveBeenCalledWith(expect.any(Function));
62
+ // Verify the state update function
63
+ const setStateCall = mockWalletStore.setState.mock.calls.find((call) => {
64
+ const stateUpdater = call[0];
65
+ if (typeof stateUpdater === 'function') {
66
+ const prevState = {
67
+ addresses: {},
68
+ walletLoading: {},
69
+ activeWalletId: 'test-wallet-1',
70
+ };
71
+ const newState = stateUpdater(prevState);
72
+ return newState.addresses?.['test-wallet-1']?.ethereum?.[0] === mockAddress;
73
+ }
74
+ return false;
75
+ });
76
+ expect(setStateCall).toBeDefined();
77
+ });
78
+ it('should return cached address if available', async () => {
79
+ const cachedAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
80
+ mockWalletStore.getState = jest.fn(() => ({
81
+ addresses: {
82
+ 'test-wallet-1': {
83
+ ethereum: {
84
+ 0: cachedAddress,
85
+ },
86
+ },
87
+ },
88
+ walletLoading: {},
89
+ activeWalletId: 'test-wallet-1',
90
+ }));
91
+ const address = await AddressService.getAddress('ethereum', 0);
92
+ expect(address).toBe(cachedAddress);
93
+ // Should not call HRPC if cached
94
+ expect(mockHRPC.callMethod).not.toHaveBeenCalled();
95
+ });
96
+ it('should handle different networks', async () => {
97
+ const ethereumAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
98
+ const polygonAddress = '0x842d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
99
+ mockHRPC.callMethod
100
+ .mockResolvedValueOnce({
101
+ result: JSON.stringify(ethereumAddress),
102
+ })
103
+ .mockResolvedValueOnce({
104
+ result: JSON.stringify(polygonAddress),
105
+ });
106
+ const ethAddr = await AddressService.getAddress('ethereum', 0);
107
+ const polyAddr = await AddressService.getAddress('polygon', 0);
108
+ expect(ethAddr).toBe(ethereumAddress);
109
+ expect(polyAddr).toBe(polygonAddress);
110
+ expect(mockHRPC.callMethod).toHaveBeenCalledTimes(2);
111
+ });
112
+ it('should handle different account indices', async () => {
113
+ const address0 = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
114
+ const address1 = '0x842d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
115
+ mockHRPC.callMethod
116
+ .mockResolvedValueOnce({
117
+ result: JSON.stringify(address0),
118
+ })
119
+ .mockResolvedValueOnce({
120
+ result: JSON.stringify(address1),
121
+ });
122
+ const addr0 = await AddressService.getAddress('ethereum', 0);
123
+ const addr1 = await AddressService.getAddress('ethereum', 1);
124
+ expect(addr0).toBe(address0);
125
+ expect(addr1).toBe(address1);
126
+ expect(mockHRPC.callMethod).toHaveBeenCalledWith(expect.objectContaining({
127
+ network: 'ethereum',
128
+ accountIndex: 0,
129
+ }));
130
+ expect(mockHRPC.callMethod).toHaveBeenCalledWith(expect.objectContaining({
131
+ network: 'ethereum',
132
+ accountIndex: 1,
133
+ }));
134
+ });
135
+ it('should throw error if WDK not initialized', async () => {
136
+ mockWorkletStore.getState = jest.fn(() => ({
137
+ isInitialized: false,
138
+ hrpc: null,
139
+ }));
140
+ mockWalletStore.getState = jest.fn(() => ({
141
+ addresses: {},
142
+ walletLoading: {},
143
+ activeWalletId: 'test-wallet-1',
144
+ }));
145
+ await expect(AddressService.getAddress('ethereum', 0)).rejects.toThrow('WDK not initialized');
146
+ });
147
+ it('should throw error if HRPC not available', async () => {
148
+ mockWorkletStore.getState = jest.fn(() => ({
149
+ isInitialized: true,
150
+ hrpc: null,
151
+ }));
152
+ mockWalletStore.getState = jest.fn(() => ({
153
+ addresses: {},
154
+ walletLoading: {},
155
+ activeWalletId: 'test-wallet-1',
156
+ }));
157
+ await expect(AddressService.getAddress('ethereum', 0)).rejects.toThrow('WDK not initialized');
158
+ });
159
+ it('should throw error if worklet call fails', async () => {
160
+ mockHRPC.callMethod.mockRejectedValue(new Error('Worklet error'));
161
+ await expect(AddressService.getAddress('ethereum', 0)).rejects.toThrow();
162
+ });
163
+ it('should throw error if worklet returns no result', async () => {
164
+ mockHRPC.callMethod.mockResolvedValue({
165
+ result: null,
166
+ });
167
+ mockWalletStore.getState = jest.fn(() => ({
168
+ addresses: {},
169
+ walletLoading: {},
170
+ activeWalletId: 'test-wallet-1',
171
+ }));
172
+ await expect(AddressService.getAddress('ethereum', 0)).rejects.toThrow(/Failed to get address|Expected string/);
173
+ });
174
+ it('should validate network name', async () => {
175
+ await expect(AddressService.getAddress('', 0)).rejects.toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
176
+ });
177
+ it('should validate account index', async () => {
178
+ await expect(AddressService.getAddress('ethereum', -1)).rejects.toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
179
+ });
180
+ it('should handle all networks from the configuration', async () => {
181
+ const networks = ['ethereum', 'polygon', 'arbitrum', 'sepolia', 'plasma', 'spark'];
182
+ // Use valid Ethereum address for most networks, Spark address for spark
183
+ const mockEthereumAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
184
+ const mockSparkAddress = 'spark1abcdefghijklmnopqrstuvwxyz123456';
185
+ for (const network of networks) {
186
+ const mockAddress = network === 'spark' ? mockSparkAddress : mockEthereumAddress;
187
+ mockHRPC.callMethod.mockResolvedValueOnce({
188
+ result: JSON.stringify(mockAddress),
189
+ });
190
+ const address = await AddressService.getAddress(network, 0);
191
+ expect(address).toBe(mockAddress);
192
+ expect(mockHRPC.callMethod).toHaveBeenCalledWith(expect.objectContaining({
193
+ network,
194
+ accountIndex: 0,
195
+ }));
196
+ }
197
+ expect(mockHRPC.callMethod).toHaveBeenCalledTimes(networks.length);
198
+ });
199
+ it('should set loading state during address fetch', async () => {
200
+ const mockAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
201
+ mockHRPC.callMethod.mockResolvedValue({
202
+ result: JSON.stringify(mockAddress),
203
+ });
204
+ await AddressService.getAddress('ethereum', 0);
205
+ // Verify loading state was set to true, then false
206
+ const setStateCalls = mockWalletStore.setState.mock.calls;
207
+ expect(setStateCalls.length).toBeGreaterThan(0);
208
+ // Track state changes - start with initial state
209
+ let currentState = {
210
+ walletLoading: {},
211
+ addresses: {},
212
+ balanceLoading: {},
213
+ lastBalanceUpdate: {},
214
+ balances: {},
215
+ activeWalletId: 'test-wallet-1',
216
+ };
217
+ let loadingWasSetToTrue = false;
218
+ let loadingWasSetToFalse = false;
219
+ for (const call of setStateCalls) {
220
+ const stateUpdater = call[0];
221
+ if (typeof stateUpdater === 'function') {
222
+ // Ensure all required state properties exist
223
+ const prevState = {
224
+ walletLoading: currentState.walletLoading || {},
225
+ addresses: currentState.addresses || {},
226
+ balanceLoading: currentState.balanceLoading || {},
227
+ lastBalanceUpdate: currentState.lastBalanceUpdate || {},
228
+ balances: currentState.balances || {},
229
+ activeWalletId: currentState.activeWalletId || 'test-wallet-1',
230
+ };
231
+ currentState = { ...prevState, ...stateUpdater(prevState) };
232
+ // Loading state is now per-wallet: walletLoading[walletId][loadingKey]
233
+ if (currentState.walletLoading?.['test-wallet-1']?.['ethereum-0'] === true) {
234
+ loadingWasSetToTrue = true;
235
+ }
236
+ if (currentState.walletLoading?.['test-wallet-1']?.['ethereum-0'] === false) {
237
+ loadingWasSetToFalse = true;
238
+ }
239
+ }
240
+ }
241
+ expect(loadingWasSetToTrue).toBe(true);
242
+ expect(loadingWasSetToFalse).toBe(true);
243
+ });
244
+ });
245
+ });
246
+ //# sourceMappingURL=addressService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressService.test.js","sourceRoot":"","sources":["../../../src/__tests__/services/addressService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tests for BalanceService
3
+ *
4
+ * Tests balance operations: getting, setting, updating, and managing balance state
5
+ */
6
+ export {};
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Tests for BalanceService
3
+ *
4
+ * Tests balance operations: getting, setting, updating, and managing balance state
5
+ */
6
+ import { BalanceService } from '../../services/balanceService';
7
+ import { getWalletStore } from '../../store/walletStore';
8
+ // Mock stores
9
+ jest.mock('../../store/walletStore', () => ({
10
+ getWalletStore: jest.fn(),
11
+ }));
12
+ describe('BalanceService', () => {
13
+ let mockWalletStore;
14
+ beforeEach(() => {
15
+ jest.clearAllMocks();
16
+ // Setup mock wallet store
17
+ mockWalletStore = {
18
+ getState: jest.fn(() => ({
19
+ balances: {},
20
+ balanceLoading: {},
21
+ lastBalanceUpdate: {},
22
+ activeWalletId: 'test-wallet-1',
23
+ })),
24
+ setState: jest.fn(),
25
+ };
26
+ getWalletStore.mockReturnValue(mockWalletStore);
27
+ });
28
+ describe('updateBalance', () => {
29
+ it('should update native balance', () => {
30
+ BalanceService.updateBalance(0, 'ethereum', null, '1000000000000000000');
31
+ expect(mockWalletStore.setState).toHaveBeenCalled();
32
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
33
+ const prevState = { balances: {}, activeWalletId: 'test-wallet-1' };
34
+ const newState = setStateCall(prevState);
35
+ expect(newState.balances['test-wallet-1']?.ethereum?.[0]?.native).toBe('1000000000000000000');
36
+ });
37
+ it('should update token balance', () => {
38
+ BalanceService.updateBalance(0, 'ethereum', '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0', '2000000000000000000');
39
+ expect(mockWalletStore.setState).toHaveBeenCalled();
40
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
41
+ const prevState = { balances: {}, activeWalletId: 'test-wallet-1' };
42
+ const newState = setStateCall(prevState);
43
+ const tokenKey = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0';
44
+ expect(newState.balances?.['test-wallet-1']?.ethereum?.[0]?.[tokenKey]).toBe('2000000000000000000');
45
+ });
46
+ it('should preserve existing balances', () => {
47
+ const prevState = {
48
+ balances: {
49
+ 'test-wallet-1': {
50
+ ethereum: {
51
+ 0: {
52
+ native: '1000000000000000000',
53
+ },
54
+ },
55
+ },
56
+ },
57
+ activeWalletId: 'test-wallet-1',
58
+ };
59
+ BalanceService.updateBalance(0, 'ethereum', '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0', '2000000000000000000');
60
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
61
+ const newState = setStateCall(prevState);
62
+ expect(newState.balances['test-wallet-1']?.ethereum?.[0]?.native).toBe('1000000000000000000');
63
+ expect(newState.balances['test-wallet-1']?.ethereum?.[0]?.['0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0']).toBe('2000000000000000000');
64
+ });
65
+ it('should validate network name', () => {
66
+ expect(() => {
67
+ BalanceService.updateBalance(0, '', null, '100');
68
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
69
+ });
70
+ it('should validate account index', () => {
71
+ expect(() => {
72
+ BalanceService.updateBalance(-1, 'ethereum', null, '100');
73
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
74
+ });
75
+ it('should validate balance', () => {
76
+ expect(() => {
77
+ BalanceService.updateBalance(0, 'ethereum', null, '');
78
+ }).toThrow(/balance.*valid number|Balance must be a valid number string/);
79
+ });
80
+ });
81
+ describe('getBalance', () => {
82
+ it('should get native balance', () => {
83
+ mockWalletStore.getState = jest.fn(() => ({
84
+ balances: {
85
+ 'test-wallet-1': {
86
+ ethereum: {
87
+ 0: {
88
+ native: '1000000000000000000',
89
+ },
90
+ },
91
+ },
92
+ },
93
+ activeWalletId: 'test-wallet-1',
94
+ }));
95
+ const balance = BalanceService.getBalance(0, 'ethereum', null);
96
+ expect(balance).toBe('1000000000000000000');
97
+ });
98
+ it('should get token balance', () => {
99
+ mockWalletStore.getState = jest.fn(() => ({
100
+ balances: {
101
+ 'test-wallet-1': {
102
+ ethereum: {
103
+ 0: {
104
+ native: '1000000000000000000',
105
+ '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0': '2000000000000000000',
106
+ },
107
+ },
108
+ },
109
+ },
110
+ activeWalletId: 'test-wallet-1',
111
+ }));
112
+ const balance = BalanceService.getBalance(0, 'ethereum', '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0');
113
+ expect(balance).toBe('2000000000000000000');
114
+ });
115
+ it('should return null if balance not found', () => {
116
+ mockWalletStore.getState = jest.fn(() => ({
117
+ balances: {},
118
+ activeWalletId: 'test-wallet-1',
119
+ }));
120
+ const balance = BalanceService.getBalance(0, 'ethereum', null);
121
+ expect(balance).toBe(null);
122
+ });
123
+ it('should validate network name', () => {
124
+ expect(() => {
125
+ BalanceService.getBalance(0, '', null);
126
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
127
+ });
128
+ it('should validate account index', () => {
129
+ expect(() => {
130
+ BalanceService.getBalance(-1, 'ethereum', null);
131
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
132
+ });
133
+ });
134
+ describe('getBalancesForWallet', () => {
135
+ it('should get all balances for wallet', () => {
136
+ mockWalletStore.getState = jest.fn(() => ({
137
+ balances: {
138
+ 'test-wallet-1': {
139
+ ethereum: {
140
+ 0: {
141
+ native: '1000000000000000000',
142
+ '0x123': '2000000000000000000',
143
+ },
144
+ },
145
+ },
146
+ },
147
+ activeWalletId: 'test-wallet-1',
148
+ }));
149
+ const balances = BalanceService.getBalancesForWallet(0, 'ethereum');
150
+ expect(balances).toEqual({
151
+ native: '1000000000000000000',
152
+ '0x123': '2000000000000000000',
153
+ });
154
+ });
155
+ it('should return null if no balances found', () => {
156
+ mockWalletStore.getState = jest.fn(() => ({
157
+ balances: {},
158
+ activeWalletId: 'test-wallet-1',
159
+ }));
160
+ const balances = BalanceService.getBalancesForWallet(0, 'ethereum');
161
+ expect(balances).toBe(null);
162
+ });
163
+ it('should validate network name', () => {
164
+ expect(() => {
165
+ BalanceService.getBalancesForWallet(0, '');
166
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
167
+ });
168
+ it('should validate account index', () => {
169
+ expect(() => {
170
+ BalanceService.getBalancesForWallet(-1, 'ethereum');
171
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
172
+ });
173
+ });
174
+ describe('setBalanceLoading', () => {
175
+ it('should set loading to true', () => {
176
+ BalanceService.setBalanceLoading('ethereum', 0, null, true);
177
+ expect(mockWalletStore.setState).toHaveBeenCalled();
178
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
179
+ const prevState = { balanceLoading: {}, activeWalletId: 'test-wallet-1' };
180
+ const newState = setStateCall(prevState);
181
+ expect(newState.balanceLoading['test-wallet-1']?.['ethereum-0-native']).toBe(true);
182
+ });
183
+ it('should set loading to false', () => {
184
+ const prevState = {
185
+ balanceLoading: {
186
+ 'test-wallet-1': {
187
+ 'ethereum-0-native': true,
188
+ },
189
+ },
190
+ activeWalletId: 'test-wallet-1',
191
+ };
192
+ BalanceService.setBalanceLoading('ethereum', 0, null, false);
193
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
194
+ const newState = setStateCall(prevState);
195
+ expect(newState.balanceLoading['test-wallet-1']?.['ethereum-0-native']).toBeUndefined();
196
+ });
197
+ it('should handle token loading state', () => {
198
+ BalanceService.setBalanceLoading('ethereum', 0, '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0', true);
199
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
200
+ const prevState = { balanceLoading: {}, activeWalletId: 'test-wallet-1' };
201
+ const newState = setStateCall(prevState);
202
+ expect(newState.balanceLoading['test-wallet-1']?.['ethereum-0-0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0']).toBe(true);
203
+ });
204
+ it('should validate network name', () => {
205
+ expect(() => {
206
+ BalanceService.setBalanceLoading('', 0, null, true);
207
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
208
+ });
209
+ it('should validate account index', () => {
210
+ expect(() => {
211
+ BalanceService.setBalanceLoading('ethereum', -1, null, true);
212
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
213
+ });
214
+ });
215
+ describe('isBalanceLoading', () => {
216
+ it('should return true if balance is loading', () => {
217
+ mockWalletStore.getState = jest.fn(() => ({
218
+ balanceLoading: {
219
+ 'test-wallet-1': {
220
+ 'ethereum-0-native': true,
221
+ },
222
+ },
223
+ activeWalletId: 'test-wallet-1',
224
+ }));
225
+ const isLoading = BalanceService.isBalanceLoading('ethereum', 0, null);
226
+ expect(isLoading).toBe(true);
227
+ });
228
+ it('should return false if balance is not loading', () => {
229
+ mockWalletStore.getState = jest.fn(() => ({
230
+ balanceLoading: {},
231
+ activeWalletId: 'test-wallet-1',
232
+ }));
233
+ const isLoading = BalanceService.isBalanceLoading('ethereum', 0, null);
234
+ expect(isLoading).toBe(false);
235
+ });
236
+ it('should validate network name', () => {
237
+ expect(() => {
238
+ BalanceService.isBalanceLoading('', 0, null);
239
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
240
+ });
241
+ it('should validate account index', () => {
242
+ expect(() => {
243
+ BalanceService.isBalanceLoading('ethereum', -1, null);
244
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
245
+ });
246
+ });
247
+ describe('updateLastBalanceUpdate', () => {
248
+ it('should update last balance update timestamp', () => {
249
+ const beforeTime = Date.now();
250
+ BalanceService.updateLastBalanceUpdate('ethereum', 0);
251
+ const afterTime = Date.now();
252
+ expect(mockWalletStore.setState).toHaveBeenCalled();
253
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
254
+ const prevState = { lastBalanceUpdate: {}, activeWalletId: 'test-wallet-1' };
255
+ const newState = setStateCall(prevState);
256
+ const timestamp = newState.lastBalanceUpdate['test-wallet-1']?.ethereum?.[0];
257
+ expect(timestamp).toBeGreaterThanOrEqual(beforeTime);
258
+ expect(timestamp).toBeLessThanOrEqual(afterTime);
259
+ });
260
+ it('should preserve existing timestamps', () => {
261
+ const prevState = {
262
+ lastBalanceUpdate: {
263
+ 'test-wallet-1': {
264
+ polygon: {
265
+ 0: 1234567890,
266
+ },
267
+ },
268
+ },
269
+ activeWalletId: 'test-wallet-1',
270
+ };
271
+ BalanceService.updateLastBalanceUpdate('ethereum', 0);
272
+ const setStateCall = mockWalletStore.setState.mock.calls[0][0];
273
+ const newState = setStateCall(prevState);
274
+ expect(newState.lastBalanceUpdate['test-wallet-1']?.polygon?.[0]).toBe(1234567890);
275
+ expect(newState.lastBalanceUpdate['test-wallet-1']?.ethereum?.[0]).toBeDefined();
276
+ });
277
+ it('should validate network name', () => {
278
+ expect(() => {
279
+ BalanceService.updateLastBalanceUpdate('', 0);
280
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
281
+ });
282
+ it('should validate account index', () => {
283
+ expect(() => {
284
+ BalanceService.updateLastBalanceUpdate('ethereum', -1);
285
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
286
+ });
287
+ });
288
+ describe('getLastBalanceUpdate', () => {
289
+ it('should get last balance update timestamp', () => {
290
+ const timestamp = 1234567890;
291
+ mockWalletStore.getState = jest.fn(() => ({
292
+ lastBalanceUpdate: {
293
+ 'test-wallet-1': {
294
+ ethereum: {
295
+ 0: timestamp,
296
+ },
297
+ },
298
+ },
299
+ activeWalletId: 'test-wallet-1',
300
+ }));
301
+ const result = BalanceService.getLastBalanceUpdate('ethereum', 0);
302
+ expect(result).toBe(timestamp);
303
+ });
304
+ it('should return null if timestamp not found', () => {
305
+ mockWalletStore.getState = jest.fn(() => ({
306
+ lastBalanceUpdate: {},
307
+ }));
308
+ const result = BalanceService.getLastBalanceUpdate('ethereum', 0);
309
+ expect(result).toBe(null);
310
+ });
311
+ it('should validate network name', () => {
312
+ expect(() => {
313
+ BalanceService.getLastBalanceUpdate('', 0);
314
+ }).toThrow(/network.*non-empty|Network name must contain only|String must contain at least 1 character/);
315
+ });
316
+ it('should validate account index', () => {
317
+ expect(() => {
318
+ BalanceService.getLastBalanceUpdate('ethereum', -1);
319
+ }).toThrow(/accountIndex.*non-negative|Number must be greater than or equal to 0/);
320
+ });
321
+ });
322
+ describe('clearBalances', () => {
323
+ it('should clear all balances', () => {
324
+ BalanceService.clearBalances();
325
+ expect(mockWalletStore.setState).toHaveBeenCalledWith({
326
+ balances: {},
327
+ balanceLoading: {},
328
+ lastBalanceUpdate: {},
329
+ });
330
+ });
331
+ });
332
+ });
333
+ //# sourceMappingURL=balanceService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balanceService.test.js","sourceRoot":"","sources":["../../../src/__tests__/services/balanceService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tests for WalletSetupService
3
+ *
4
+ * Tests wallet creation, loading, and identifier-based multi-wallet support
5
+ */
6
+ export {};