@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,193 @@
1
+ import { useCallback, useEffect, useState, useMemo } from 'react';
2
+ import { useShallow } from 'zustand/react/shallow';
3
+ import { AccountService } from '../services/accountService';
4
+ import { AddressService } from '../services/addressService';
5
+ import { WalletSetupService } from '../services/walletSetupService';
6
+ import { WalletSwitchingService } from '../services/walletSwitchingService';
7
+ import { getWalletStore } from '../store/walletStore';
8
+ import { getWorkletStore } from '../store/workletStore';
9
+ import { isOperationInProgress } from '../utils/operationMutex';
10
+ import { log, logError } from '../utils/logger';
11
+ // Stable empty objects to prevent creating new objects on every render
12
+ const EMPTY_ADDRESSES = {};
13
+ const EMPTY_WALLET_LOADING = {};
14
+ /**
15
+ * Check if wallet switching should be skipped
16
+ */
17
+ function shouldSkipWalletSwitch(requestedWalletId, activeWalletId, isSwitchingWallet, switchingToWalletId) {
18
+ // Skip if no walletId provided or walletId matches activeWalletId
19
+ if (!requestedWalletId || requestedWalletId === activeWalletId) {
20
+ return true;
21
+ }
22
+ // Skip if already switching to this wallet
23
+ if (isSwitchingWallet && switchingToWalletId === requestedWalletId) {
24
+ return true;
25
+ }
26
+ // Skip if switching to a different wallet (wait for current switch to complete)
27
+ if (isSwitchingWallet && switchingToWalletId !== requestedWalletId) {
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ /**
33
+ * Check if the requested wallet is a temporary wallet
34
+ */
35
+ function isTemporaryWalletId(walletId) {
36
+ return walletId === '__temporary__';
37
+ }
38
+ /**
39
+ * Normalize error to Error instance
40
+ */
41
+ function normalizeErrorToError(error) {
42
+ return error instanceof Error ? error : new Error(String(error));
43
+ }
44
+ export function useWallet(options) {
45
+ const workletStore = getWorkletStore();
46
+ const walletStore = getWalletStore();
47
+ // Switching state
48
+ const [isSwitchingWallet, setIsSwitchingWallet] = useState(false);
49
+ const [switchingToWalletId, setSwitchingToWalletId] = useState(null);
50
+ const [switchWalletError, setSwitchWalletError] = useState(null);
51
+ const [isTemporaryWallet, setIsTemporaryWallet] = useState(false);
52
+ // Get activeWalletId from stores
53
+ const activeWalletId = walletStore((state) => state.activeWalletId);
54
+ // Determine target walletId
55
+ const targetWalletId = options?.walletId || activeWalletId;
56
+ // Subscribe to wallet state for target wallet
57
+ // useShallow ensures stable references when content doesn't change
58
+ // We select the specific wallet's data directly from the store
59
+ // Use stable empty objects to prevent new object creation on every render
60
+ const walletState = walletStore(useShallow((state) => {
61
+ const walletId = options?.walletId || state.activeWalletId;
62
+ if (!walletId) {
63
+ return {
64
+ addresses: EMPTY_ADDRESSES,
65
+ walletLoading: EMPTY_WALLET_LOADING,
66
+ };
67
+ }
68
+ const addresses = state.addresses[walletId];
69
+ const walletLoading = state.walletLoading[walletId];
70
+ return {
71
+ addresses: addresses || EMPTY_ADDRESSES,
72
+ walletLoading: walletLoading || EMPTY_WALLET_LOADING,
73
+ };
74
+ }));
75
+ const isInitialized = workletStore((state) => state.isInitialized);
76
+ // Automatic wallet switching logic
77
+ useEffect(() => {
78
+ const requestedWalletId = options?.walletId;
79
+ // Skip if switching should be skipped
80
+ if (shouldSkipWalletSwitch(requestedWalletId, activeWalletId, isSwitchingWallet, switchingToWalletId)) {
81
+ setIsTemporaryWallet(false);
82
+ return;
83
+ }
84
+ // Skip until WdkAppProvider has registered SecureStorage (runs synchronously on mount)
85
+ if (!WalletSetupService.isSecureStorageInitialized()) {
86
+ log('[useWallet] SecureStorage not initialized yet, skipping wallet switch');
87
+ return;
88
+ }
89
+ // Check if another operation is in progress (via mutex)
90
+ if (isOperationInProgress()) {
91
+ log('[useWallet] Operation in progress, skipping wallet switch');
92
+ return;
93
+ }
94
+ // Handle temporary wallet identifier
95
+ if (isTemporaryWalletId(requestedWalletId)) {
96
+ setIsTemporaryWallet(true);
97
+ return;
98
+ }
99
+ let cancelled = false;
100
+ const switchWallet = async () => {
101
+ setIsSwitchingWallet(true);
102
+ setSwitchingToWalletId(requestedWalletId);
103
+ setSwitchWalletError(null);
104
+ try {
105
+ // Use WalletSwitchingService for wallet switching logic (has mutex protection)
106
+ await WalletSwitchingService.switchToWallet(requestedWalletId, {
107
+ autoStartWorklet: false,
108
+ });
109
+ if (!cancelled) {
110
+ setIsTemporaryWallet(false);
111
+ }
112
+ }
113
+ catch (error) {
114
+ if (!cancelled) {
115
+ const err = normalizeErrorToError(error);
116
+ logError('[useWallet] Failed to switch wallet:', error);
117
+ setSwitchWalletError(err);
118
+ // Don't update activeWalletId if switch failed
119
+ }
120
+ }
121
+ finally {
122
+ if (!cancelled) {
123
+ setIsSwitchingWallet(false);
124
+ setSwitchingToWalletId(null);
125
+ }
126
+ }
127
+ };
128
+ switchWallet();
129
+ // Cleanup function to cancel in-flight operations
130
+ return () => {
131
+ cancelled = true;
132
+ };
133
+ }, [options?.walletId, activeWalletId, isSwitchingWallet, switchingToWalletId]);
134
+ // useShallow already provides stable references when content doesn't change
135
+ // We can use walletState.addresses and walletState.walletLoading directly
136
+ // No need to create new objects - useShallow handles reference stability
137
+ const addresses = walletState.addresses;
138
+ const walletLoading = walletState.walletLoading;
139
+ // Get all addresses for a specific network
140
+ // Use addresses directly from walletState (stable reference from useShallow)
141
+ const getNetworkAddresses = useCallback((network) => {
142
+ return addresses[network] || {};
143
+ }, [addresses]);
144
+ // Check if an address is loading
145
+ // Use walletLoading directly from walletState (stable reference from useShallow)
146
+ const isLoadingAddress = useCallback((network, accountIndex = 0) => {
147
+ return walletLoading[`${network}-${accountIndex}`] || false;
148
+ }, [walletLoading]);
149
+ // Get a specific address (from cache or fetch)
150
+ const getAddress = useCallback(async (network, accountIndex = 0) => {
151
+ const walletId = targetWalletId || '__temporary__';
152
+ return AddressService.getAddress(network, accountIndex, walletId);
153
+ }, [targetWalletId]);
154
+ // Call a method on a wallet account
155
+ const callAccountMethod = useCallback(async (network, accountIndex, methodName, args) => {
156
+ const walletId = targetWalletId || '__temporary__';
157
+ return AccountService.callAccountMethod(network, accountIndex, methodName, args, walletId);
158
+ }, [targetWalletId]);
159
+ // Memoize the entire result object to ensure stable reference
160
+ // useShallow already provides stable references for addresses and walletLoading
161
+ // We memoize the result object to prevent creating new objects on every render
162
+ const result = useMemo(() => ({
163
+ // State (reactive) - useShallow ensures stable references
164
+ addresses,
165
+ walletLoading,
166
+ isInitialized,
167
+ // Switching state
168
+ isSwitchingWallet,
169
+ switchingToWalletId,
170
+ switchWalletError,
171
+ isTemporaryWallet,
172
+ // Computed helpers
173
+ getNetworkAddresses,
174
+ isLoadingAddress,
175
+ // Actions
176
+ getAddress,
177
+ callAccountMethod,
178
+ }), [
179
+ addresses,
180
+ walletLoading,
181
+ isInitialized,
182
+ isSwitchingWallet,
183
+ switchingToWalletId,
184
+ switchWalletError,
185
+ isTemporaryWallet,
186
+ getNetworkAddresses,
187
+ isLoadingAddress,
188
+ getAddress,
189
+ callAccountMethod,
190
+ ]);
191
+ return result;
192
+ }
193
+ //# sourceMappingURL=useWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWallet.js","sourceRoot":"","sources":["../../src/hooks/useWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI/C,uEAAuE;AACvE,MAAM,eAAe,GAAG,EAA4C,CAAA;AACpE,MAAM,oBAAoB,GAAG,EAA6B,CAAA;AAE1D;;GAEG;AACH,SAAS,sBAAsB,CAC7B,iBAAqC,EACrC,cAA6B,EAC7B,iBAA0B,EAC1B,mBAAkC;IAElC,kEAAkE;IAClE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,KAAK,cAAc,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2CAA2C;IAC3C,IAAI,iBAAiB,IAAI,mBAAmB,KAAK,iBAAiB,EAAE,CAAC;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gFAAgF;IAChF,IAAI,iBAAiB,IAAI,mBAAmB,KAAK,iBAAiB,EAAE,CAAC;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,QAA4B;IACvD,OAAO,QAAQ,KAAK,eAAe,CAAA;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAClE,CAAC;AAoDD,MAAM,UAAU,SAAS,CAAC,OAEzB;IACC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,kBAAkB;IAClB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAC9E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjE,iCAAiC;IACjC,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAEhF,4BAA4B;IAC5B,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,IAAI,cAAc,CAAA;IAE1D,8CAA8C;IAC9C,mEAAmE;IACnE,+DAA+D;IAC/D,0EAA0E;IAC1E,MAAM,WAAW,GAAG,WAAW,CAC7B,UAAU,CAAC,CAAC,KAAkB,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAA;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,SAAS,EAAE,eAAe;gBAC1B,aAAa,EAAE,oBAAoB;aACpC,CAAA;QACH,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACnD,OAAO;YACL,SAAS,EAAE,SAAS,IAAI,eAAe;YACvC,aAAa,EAAE,aAAa,IAAI,oBAAoB;SACrD,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAEhF,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,iBAAiB,GAAG,OAAO,EAAE,QAAQ,CAAA;QAE3C,sCAAsC;QACtC,IAAI,sBAAsB,CAAC,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACtG,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC3B,OAAM;QACR,CAAC;QAED,uFAAuF;QACvF,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACrD,GAAG,CAAC,uEAAuE,CAAC,CAAA;YAC5E,OAAM;QACR,CAAC;QAED,wDAAwD;QACxD,IAAI,qBAAqB,EAAE,EAAE,CAAC;YAC5B,GAAG,CAAC,2DAA2D,CAAC,CAAA;YAChE,OAAM;QACR,CAAC;QAED,qCAAqC;QACrC,IAAI,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3C,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAC1B,OAAM;QACR,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAC1B,sBAAsB,CAAC,iBAAkB,CAAC,CAAA;YAC1C,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAE1B,IAAI,CAAC;gBACH,+EAA+E;gBAC/E,MAAM,sBAAsB,CAAC,cAAc,CAAC,iBAAkB,EAAE;oBAC9D,gBAAgB,EAAE,KAAK;iBACxB,CAAC,CAAA;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;oBACxC,QAAQ,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAA;oBACvD,oBAAoB,CAAC,GAAG,CAAC,CAAA;oBACzB,+CAA+C;gBACjD,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,oBAAoB,CAAC,KAAK,CAAC,CAAA;oBAC3B,sBAAsB,CAAC,IAAI,CAAC,CAAA;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,YAAY,EAAE,CAAA;QAEd,kDAAkD;QAClD,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAA;IAE/E,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAA;IACvC,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAA;IAE/C,2CAA2C;IAC3C,6EAA6E;IAC7E,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,EAAE;QAC1D,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,iCAAiC;IACjC,iFAAiF;IACjF,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,eAAuB,CAAC,EAAE,EAAE;QACjF,OAAO,aAAa,CAAC,GAAG,OAAO,IAAI,YAAY,EAAE,CAAC,IAAI,KAAK,CAAA;IAC7D,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,+CAA+C;IAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,OAAe,EAAE,eAAuB,CAAC,EAAE,EAAE;QACjF,MAAM,QAAQ,GAAG,cAAc,IAAI,eAAe,CAAA;QAClD,OAAO,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;IACnE,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IAEpB,oCAAoC;IACpC,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EACzC,OAAe,EACf,YAAoB,EACpB,UAAkB,EAClB,IAAc,EACF,EAAE;QACd,MAAM,QAAQ,GAAG,cAAc,IAAI,eAAe,CAAA;QAClD,OAAO,cAAc,CAAC,iBAAiB,CAAI,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC/F,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IAEpB,8DAA8D;IAC9D,gFAAgF;IAChF,+EAA+E;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5B,0DAA0D;QAC1D,SAAS;QACT,aAAa;QACb,aAAa;QACb,kBAAkB;QAClB,iBAAiB;QACjB,mBAAmB;QACnB,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB;QAChB,UAAU;QACV,UAAU;QACV,iBAAiB;KAClB,CAAC,EAAE;QACF,SAAS;QACT,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,mBAAmB;QACnB,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,gBAAgB;QAChB,UAAU;QACV,iBAAiB;KAClB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Wallet Manager Hook
3
+ *
4
+ * Consolidated hook for wallet setup, initialization, and lifecycle management.
5
+ * This is the ONLY hook for wallet lifecycle operations.
6
+ *
7
+ * PURPOSE: Use this hook for wallet setup/auth flows (creating new wallets,
8
+ * loading existing wallets, checking if wallet exists, deleting wallets, getting mnemonic).
9
+ *
10
+ * When to use which hook:
11
+ * - **App initialization state**: Use `useWdkApp()` to check if app is ready
12
+ * - **Wallet lifecycle** (create, load, import, delete): Use this hook (`useWalletManager()`)
13
+ * - **Wallet operations** (addresses, account methods): Use `useWallet()` AFTER initialization
14
+ * - **Balance fetching**: Use `useBalance()` hook with TanStack Query
15
+ *
16
+ * **Wallet Switching**: Use `useWallet({ walletId })` to switch wallets.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * // Check if app is ready first
21
+ * const { isReady } = useWdkApp()
22
+ *
23
+ * // Then use wallet manager for lifecycle operations
24
+ * // networkConfigs is optional - it will be retrieved from workletStore if not provided
25
+ * const {
26
+ * createWallet,
27
+ * initializeWallet,
28
+ * initializeFromMnemonic,
29
+ * hasWallet,
30
+ * deleteWallet,
31
+ * getMnemonic,
32
+ * createTemporaryWallet,
33
+ * isInitializing,
34
+ * error
35
+ * } = useWalletManager('user@example.com')
36
+ *
37
+ * // Create new wallet (persistent, requires biometrics)
38
+ * // networkConfigs can be passed here or retrieved from store
39
+ * await createWallet('user@example.com', networkConfigs)
40
+ *
41
+ * // Initialize wallet (create new or load existing)
42
+ * await initializeWallet({ createNew: true })
43
+ *
44
+ * // Load existing wallet (requires biometric authentication)
45
+ * await initializeWallet({ createNew: false })
46
+ *
47
+ * // Import from mnemonic
48
+ * await initializeFromMnemonic('word1 word2 ... word12')
49
+ *
50
+ * // Create temporary wallet for previewing addresses (no biometrics, not saved)
51
+ * await createTemporaryWallet()
52
+ *
53
+ * // Get mnemonic (requires biometric authentication if not cached)
54
+ * const mnemonic = await getMnemonic()
55
+ *
56
+ * // Delete wallet
57
+ * await deleteWallet()
58
+ * ```
59
+ */
60
+ import type { NetworkConfigs } from '../types';
61
+ import type { WalletInfo } from '../store/walletStore';
62
+ export type { WalletInfo };
63
+ export interface UseWalletManagerResult {
64
+ /** Initialize wallet - either create new or load existing */
65
+ initializeWallet: (options?: {
66
+ createNew?: boolean;
67
+ walletId?: string;
68
+ }) => Promise<void>;
69
+ /** Initialize wallet from mnemonic seedphrase */
70
+ initializeFromMnemonic: (mnemonic: string, walletId?: string) => Promise<void>;
71
+ /** Check if wallet exists */
72
+ hasWallet: (walletId?: string) => Promise<boolean>;
73
+ /** Delete wallet */
74
+ deleteWallet: (walletId?: string) => Promise<void>;
75
+ /** Get mnemonic phrase (requires biometric authentication if not cached) */
76
+ getMnemonic: (walletId?: string) => Promise<string | null>;
77
+ /** Create a temporary wallet for previewing addresses (no biometrics, not saved) */
78
+ createTemporaryWallet: () => Promise<void>;
79
+ /** Whether initialization is in progress */
80
+ isInitializing: boolean;
81
+ /** Error message if any */
82
+ error: string | null;
83
+ /** Clear error state */
84
+ clearError: () => void;
85
+ /** Clear active wallet ID (useful when switching users or logging out) */
86
+ clearActiveWallet: () => void;
87
+ /** List of all known wallets */
88
+ wallets: WalletInfo[];
89
+ /** Currently active wallet identifier */
90
+ activeWalletId: string | null;
91
+ /** Create a new wallet with the given walletId (adds to list) */
92
+ createWallet: (walletId: string, networkConfigs?: NetworkConfigs) => Promise<void>;
93
+ /** Refresh the wallet list */
94
+ refreshWalletList: (knownIdentifiers?: string[]) => Promise<void>;
95
+ /** Whether wallet list operation is in progress */
96
+ isWalletListLoading: boolean;
97
+ /** Wallet list error message if any */
98
+ walletListError: string | null;
99
+ }
100
+ export declare function useWalletManager(walletId?: string, networkConfigs?: NetworkConfigs): UseWalletManagerResult;