@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,558 @@
1
+ /**
2
+ * WdkAppProvider
3
+ *
4
+ * App-level orchestration provider that manages initialization state.
5
+ * Provides app-level status and initialization state via useWdkApp() hook.
6
+ *
7
+ * Responsibilities:
8
+ * - Manages worklet initialization state
9
+ * - Manages wallet initialization state
10
+ * - Provides combined app status (isReady, isInitializing, error)
11
+ * - Sets up QueryClientProvider for TanStack Query
12
+ * - Sets up SecureStorage
13
+ * - Handles AppState listeners for security
14
+ *
15
+ * Architecture:
16
+ * - Worklet state: Managed by workletStore (global, initialized once)
17
+ * - Wallet state: Managed by separate state machine (per-identifier, can load multiple)
18
+ * - Combined status: Derived from both worklet and wallet states
19
+ */
20
+ import React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react';
21
+ import { AppState } from 'react-native';
22
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
23
+ import { createSecureStorage } from '@tetherto/wdk-react-native-secure-storage';
24
+ import { useWalletManager } from '../hooks/useWalletManager';
25
+ import { useWorklet } from '../hooks/useWorklet';
26
+ import { getWalletStore } from '../store/walletStore';
27
+ import { updateWalletLoadingState, getWalletIdFromLoadingState, isWalletLoadingState, isWalletErrorState, } from '../store/walletStore';
28
+ import { shouldResetToNotLoaded, getWalletSwitchDecision, shouldMarkWalletAsReady, shouldHandleError, } from '../utils/walletStateHelpers';
29
+ import { clearAllSensitiveData } from '../store/workletStore';
30
+ import { WalletSetupService } from '../services/walletSetupService';
31
+ import { WorkletLifecycleService } from '../services/workletLifecycleService';
32
+ import { normalizeError } from '../utils/errorUtils';
33
+ import { log, logError } from '../utils/logger';
34
+ import { validateNetworkConfigs, validateTokenConfigs } from '../utils/validation';
35
+ import { DEFAULT_QUERY_STALE_TIME_MS, DEFAULT_QUERY_GC_TIME_MS } from '../utils/constants';
36
+ import { isAppReadyStatus, isAppInProgressStatus, getCombinedStatus, getWorkletStatus } from '../utils/initializationState';
37
+ const WdkAppContext = createContext(null);
38
+ /**
39
+ * WdkAppProvider - Orchestrates WDK initialization flow
40
+ *
41
+ * Composes useWorklet and useWalletManager hooks into a unified initialization flow.
42
+ * Automatically fetches balances when wallet is ready.
43
+ */
44
+ /**
45
+ * Create QueryClient singleton for TanStack Query
46
+ * This is created once and reused across the app lifecycle
47
+ */
48
+ const queryClient = new QueryClient({
49
+ defaultOptions: {
50
+ queries: {
51
+ retry: 1,
52
+ staleTime: DEFAULT_QUERY_STALE_TIME_MS,
53
+ gcTime: DEFAULT_QUERY_GC_TIME_MS,
54
+ },
55
+ },
56
+ });
57
+ // Custom deep equality for walletLoadingState comparison
58
+ // Defined outside component to prevent recreation on every render
59
+ const deepEqualityFn = (a, b) => {
60
+ if (a === b)
61
+ return true;
62
+ if (!a || !b)
63
+ return false;
64
+ if (typeof a !== 'object' || typeof b !== 'object')
65
+ return a === b;
66
+ const keysA = Object.keys(a);
67
+ const keysB = Object.keys(b);
68
+ if (keysA.length !== keysB.length)
69
+ return false;
70
+ for (const key of keysA) {
71
+ if (!keysB.includes(key))
72
+ return false;
73
+ if (a[key] !== b[key])
74
+ return false;
75
+ }
76
+ return true;
77
+ };
78
+ export function WdkAppProvider({ networkConfigs, tokenConfigs, enableAutoInitialization = true, currentUserId, children, }) {
79
+ // Create secureStorage singleton and register synchronously so child effects
80
+ // (e.g. useWallet wallet switching) can access it on the first paint.
81
+ const secureStorage = useMemo(() => {
82
+ const storage = createSecureStorage();
83
+ WalletSetupService.setSecureStorage(storage);
84
+ return storage;
85
+ }, []);
86
+ // Clear sensitive data on mount AND when app goes to background
87
+ // This ensures biometrics are always required on app restart or foreground
88
+ useEffect(() => {
89
+ // CRITICAL: Clear cache on mount to handle true app restarts (not hot reloads)
90
+ // When app is killed and reopened:
91
+ // - walletStore rehydrates with 'not_loaded' state
92
+ // - But in dev mode with hot reload, JS context persists and cache remains
93
+ // - Clearing here ensures cache is empty even in dev mode
94
+ log('[WdkAppProvider] Clearing credentials cache on mount (app restart)');
95
+ clearAllSensitiveData();
96
+ const appStateRef = { current: AppState.currentState };
97
+ const subscription = AppState.addEventListener('change', (nextAppState) => {
98
+ const previousState = appStateRef.current;
99
+ appStateRef.current = nextAppState;
100
+ // When going to background: clear cache and mark wallet for re-authentication
101
+ if ((nextAppState === 'background' || nextAppState === 'inactive') && previousState === 'active') {
102
+ log('[WdkAppProvider] App going to background - clearing sensitive data and marking for re-auth');
103
+ clearAllSensitiveData();
104
+ // Reset wallet state to trigger re-authentication on foreground
105
+ // This ensures biometrics are required when app comes back
106
+ // CRITICAL: Only reset if wallet is 'ready' - don't interrupt 'loading' or 'checking' states
107
+ // Interrupting these states would cancel biometric authentication in progress
108
+ const currentState = walletStore.getState();
109
+ const currentStateType = currentState.walletLoadingState.type;
110
+ if (currentStateType === 'ready' && currentState.activeWalletId) {
111
+ log('[WdkAppProvider] Resetting wallet state to trigger biometrics on foreground');
112
+ walletStore.setState((prev) => updateWalletLoadingState(prev, {
113
+ type: 'not_loaded'
114
+ }));
115
+ }
116
+ else if (currentStateType === 'loading' || currentStateType === 'checking') {
117
+ log('[WdkAppProvider] Preserving wallet loading state during background transition', {
118
+ currentState: currentStateType,
119
+ });
120
+ // Do not reset - allow biometric authentication to complete
121
+ }
122
+ }
123
+ // When coming to foreground: wallet will auto-initialize with biometrics
124
+ // (handled by the consolidated effect below)
125
+ if (nextAppState === 'active' && (previousState === 'background' || previousState === 'inactive')) {
126
+ log('[WdkAppProvider] App coming to foreground - auto-initialization will trigger biometrics');
127
+ }
128
+ });
129
+ return () => subscription.remove();
130
+ }, []);
131
+ // Validate props on mount and when props change
132
+ useEffect(() => {
133
+ try {
134
+ validateNetworkConfigs(networkConfigs);
135
+ validateTokenConfigs(tokenConfigs);
136
+ }
137
+ catch (error) {
138
+ const err = normalizeError(error, true, { component: 'WdkAppProvider', operation: 'propsValidation' });
139
+ logError('[WdkAppProvider] Invalid props:', err);
140
+ // Always throw validation errors - they indicate programming errors
141
+ throw err;
142
+ }
143
+ }, [networkConfigs, tokenConfigs]);
144
+ // Worklet state - read from workletStore via hook
145
+ const workletHookState = useWorklet();
146
+ const { isWorkletStarted, isInitialized: isWorkletInitialized, isLoading: isWorkletLoading, error: workletError, } = workletHookState;
147
+ // Wallet state - read from walletStore (single source of truth)
148
+ const walletStore = getWalletStore();
149
+ // Subscribe to primitive values directly
150
+ const activeWalletId = walletStore((state) => state.activeWalletId);
151
+ // For walletLoadingState, use a ref to manually check equality and prevent unnecessary re-renders
152
+ const walletLoadingStateRef = useRef(walletStore.getState().walletLoadingState);
153
+ const [walletLoadingState, setWalletLoadingState] = React.useState(walletStore.getState().walletLoadingState);
154
+ useEffect(() => {
155
+ const unsubscribe = walletStore.subscribe((state) => {
156
+ const newState = state.walletLoadingState;
157
+ // Only update if content actually changed (deep equality check)
158
+ if (!deepEqualityFn(walletLoadingStateRef.current, newState)) {
159
+ walletLoadingStateRef.current = newState;
160
+ setWalletLoadingState(newState);
161
+ }
162
+ });
163
+ return unsubscribe;
164
+ }, [walletStore]);
165
+ const walletAddresses = walletStore((state) => state.activeWalletId ? state.addresses[state.activeWalletId] : undefined);
166
+ // Hooks for wallet operations
167
+ const { initializeWallet, hasWallet, error: walletManagerError, } = useWalletManager();
168
+ // Store initializeWallet in a ref to avoid it being a dependency of the effect
169
+ // This breaks the infinite loop: effect runs → component re-renders → initializeWallet recreated → effect runs again
170
+ const initializeWalletRef = useRef(initializeWallet);
171
+ useEffect(() => {
172
+ initializeWalletRef.current = initializeWallet;
173
+ }, [initializeWallet]);
174
+ // Track authentication errors to prevent infinite retry loops
175
+ // When biometric authentication fails, we shouldn't automatically retry
176
+ const authErrorRef = useRef(null);
177
+ // Derive isWalletInitializing from walletLoadingState (single source of truth)
178
+ const isWalletInitializing = useMemo(() => {
179
+ return isWalletLoadingState(walletLoadingState);
180
+ }, [walletLoadingState]);
181
+ // Worklet state object (exposed separately for flexibility)
182
+ const workletState = useMemo(() => ({
183
+ isReady: isWorkletStarted && !isWorkletLoading && !workletError,
184
+ isLoading: isWorkletLoading,
185
+ error: workletError,
186
+ }), [isWorkletStarted, isWorkletLoading, workletError]);
187
+ // Wallet state object (exposed separately for flexibility)
188
+ const walletStateObject = useMemo(() => ({
189
+ status: (walletLoadingState.type === 'not_loaded' ? 'not_loaded' :
190
+ walletLoadingState.type === 'checking' ? 'checking' :
191
+ walletLoadingState.type === 'loading' ? 'loading' :
192
+ walletLoadingState.type === 'ready' ? 'ready' :
193
+ 'error'),
194
+ identifier: getWalletIdFromLoadingState(walletLoadingState),
195
+ error: walletLoadingState.type === 'error' ? walletLoadingState.error : null,
196
+ }), [walletLoadingState]);
197
+ // Worklet initialization status (worklet-specific)
198
+ const workletStatus = useMemo(() => {
199
+ return getWorkletStatus({
200
+ isWorkletStarted,
201
+ isLoading: isWorkletLoading,
202
+ error: workletError,
203
+ });
204
+ }, [isWorkletStarted, isWorkletLoading, workletError]);
205
+ // Combined app status - derived from both worklet and wallet states (convenience)
206
+ const status = useMemo(() => {
207
+ return getCombinedStatus({
208
+ isWorkletStarted,
209
+ isLoading: isWorkletLoading,
210
+ error: workletError,
211
+ }, walletLoadingState);
212
+ }, [isWorkletStarted, isWorkletLoading, workletError, walletLoadingState]);
213
+ // Automatically initialize worklet when component mounts
214
+ useEffect(() => {
215
+ log('[WdkAppProvider] Checking initialization conditions', {
216
+ isWorkletInitialized,
217
+ isWorkletLoading,
218
+ isWorkletStarted,
219
+ });
220
+ // Skip if worklet is loading
221
+ if (isWorkletLoading) {
222
+ log('[WdkAppProvider] Initialization skipped', { reason: 'already loading' });
223
+ return;
224
+ }
225
+ // If worklet is already started/initialized, nothing to do
226
+ if (isWorkletStarted || isWorkletInitialized) {
227
+ log('[WdkAppProvider] Worklet already started, ready to load wallets');
228
+ return;
229
+ }
230
+ let cancelled = false;
231
+ const initializeWorklet = async () => {
232
+ try {
233
+ log('[WdkAppProvider] Starting worklet initialization...');
234
+ await WorkletLifecycleService.startWorklet(networkConfigs);
235
+ if (!cancelled) {
236
+ log('[WdkAppProvider] Worklet started successfully');
237
+ }
238
+ }
239
+ catch (error) {
240
+ if (!cancelled) {
241
+ const err = normalizeError(error, true, {
242
+ component: 'WdkAppProvider',
243
+ operation: 'workletInitialization',
244
+ });
245
+ logError('[WdkAppProvider] Failed to initialize worklet:', error);
246
+ }
247
+ }
248
+ };
249
+ initializeWorklet();
250
+ // Cleanup function to prevent state updates if component unmounts
251
+ return () => {
252
+ cancelled = true;
253
+ };
254
+ }, [isWorkletInitialized, isWorkletLoading, isWorkletStarted]);
255
+ // Note: networkConfigs removed from deps - it's a prop that should be stable for app lifetime
256
+ // and doesn't need to trigger worklet re-initialization
257
+ // Consolidated effect: Sync wallet loading state with activeWalletId, addresses, and errors
258
+ //
259
+ // IMPORTANT: This effect MUST remain consolidated to prevent race conditions.
260
+ // Multiple interdependent state changes (activeWalletId, addresses, loadingState, errors)
261
+ // must be evaluated atomically in a single effect. Splitting into multiple effects would
262
+ // allow them to run with stale state, causing race conditions.
263
+ //
264
+ // State synchronization logic:
265
+ // 1. If activeWalletId is cleared, reset to not_loaded
266
+ // 2. If activeWalletId changes, handle wallet switch (check if addresses exist)
267
+ // 3. If wallet has addresses but state is not_loaded, transition to loading first
268
+ // 4. If wallet is loading and addresses appear, mark as ready (initialization complete)
269
+ // 5. If error occurs, update error state (only if tracking the correct wallet)
270
+ //
271
+ // All conditions are checked in order with early returns to ensure atomic evaluation.
272
+ useEffect(() => {
273
+ // EARLY EXIT: Skip automatic wallet initialization if disabled (e.g., when logged out)
274
+ if (!enableAutoInitialization) {
275
+ // Clear authentication error flag when auto-init is disabled (e.g., logout)
276
+ if (authErrorRef.current) {
277
+ log('[WdkAppProvider] Clearing authentication error flag - auto-init disabled');
278
+ authErrorRef.current = null;
279
+ }
280
+ return;
281
+ }
282
+ // VALIDATION 1: User identity must be confirmed before auto-initialization
283
+ // If currentUserId is undefined/null, we don't know which user is logged in yet
284
+ // Wait until user identity is confirmed to prevent wrong wallet initialization
285
+ if (currentUserId === undefined || currentUserId === null) {
286
+ log('[WdkAppProvider] Waiting for user identity confirmation before auto-init', {
287
+ hasActiveWalletId: !!activeWalletId,
288
+ });
289
+ return;
290
+ }
291
+ // VALIDATION 2: If activeWalletId doesn't match currentUserId, set it to correct user
292
+ // This allows useOnboarding to initialize the correct wallet without interference
293
+ if (activeWalletId !== currentUserId) {
294
+ log('[WdkAppProvider] Setting activeWalletId to current user', {
295
+ activeWalletId,
296
+ currentUserId,
297
+ });
298
+ // Set activeWalletId to current user - let useOnboarding handle initialization
299
+ walletStore.setState({
300
+ activeWalletId: currentUserId,
301
+ });
302
+ // Clear auth error flag to allow fresh authentication
303
+ if (authErrorRef.current) {
304
+ authErrorRef.current = null;
305
+ }
306
+ // Return and let the effect re-run with correct activeWalletId
307
+ return;
308
+ }
309
+ // EARLY EXIT: Skip if we have an authentication error to prevent infinite retry loop
310
+ // Authentication errors (biometric failures) require user intervention, not automatic retry
311
+ if (authErrorRef.current) {
312
+ log('[WdkAppProvider] Skipping auto-initialization due to authentication error', {
313
+ error: authErrorRef.current,
314
+ });
315
+ return;
316
+ }
317
+ const currentWalletId = getWalletIdFromLoadingState(walletLoadingState);
318
+ const hasAddresses = !!(walletAddresses && Object.keys(walletAddresses).length > 0);
319
+ // Handle activeWalletId cleared
320
+ if (shouldResetToNotLoaded(activeWalletId, walletLoadingState)) {
321
+ log('[WdkAppProvider] Active wallet cleared, resetting wallet state');
322
+ // Clear authentication error flag when wallet is reset
323
+ if (authErrorRef.current) {
324
+ log('[WdkAppProvider] Clearing authentication error flag on wallet reset');
325
+ authErrorRef.current = null;
326
+ }
327
+ walletStore.setState((prev) => updateWalletLoadingState(prev, { type: 'not_loaded' }));
328
+ return;
329
+ }
330
+ // Ensure activeWalletId is not null before proceeding (shouldn't happen after check above, but TypeScript needs it)
331
+ if (!activeWalletId) {
332
+ return;
333
+ }
334
+ // Handle wallet switching (activeWalletId changed to different wallet)
335
+ const switchDecision = getWalletSwitchDecision(currentWalletId, activeWalletId, hasAddresses);
336
+ if (switchDecision.shouldSwitch) {
337
+ log('[WdkAppProvider] Active wallet changed', {
338
+ from: currentWalletId,
339
+ to: activeWalletId,
340
+ hasAddresses,
341
+ isWorkletStarted,
342
+ shouldMarkReady: switchDecision.shouldMarkReady,
343
+ });
344
+ // When switching to a wallet, trigger proper initialization with biometrics
345
+ if (isWorkletStarted) {
346
+ // Skip if wallet is already initializing to prevent duplicate biometric prompts
347
+ if (isWalletInitializing) {
348
+ log('[WdkAppProvider] Skipping wallet switch initialization - already in progress', {
349
+ activeWalletId,
350
+ walletLoadingState: walletLoadingState.type,
351
+ });
352
+ return;
353
+ }
354
+ log('[WdkAppProvider] Wallet switch detected - triggering initialization', {
355
+ activeWalletId,
356
+ hasAddresses,
357
+ });
358
+ (async () => {
359
+ try {
360
+ const walletExists = await hasWallet(activeWalletId);
361
+ const shouldCreateNew = !walletExists;
362
+ log('[WdkAppProvider] Wallet existence check', {
363
+ activeWalletId,
364
+ walletExists,
365
+ shouldCreateNew,
366
+ });
367
+ // Call initializeWallet to trigger biometrics and properly load the wallet
368
+ // This will transition state to 'checking' immediately, preventing duplicate calls
369
+ await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
370
+ log('[WdkAppProvider] Wallet initialized successfully after switch');
371
+ }
372
+ catch (error) {
373
+ logError('[WdkAppProvider] Failed to initialize wallet after switch:', error);
374
+ // Error will be handled by the error handling logic below
375
+ }
376
+ })();
377
+ }
378
+ else {
379
+ // Worklet not started yet - reset to not_loaded and wait
380
+ walletStore.setState((prev) => updateWalletLoadingState(prev, {
381
+ type: 'not_loaded'
382
+ }));
383
+ }
384
+ // This effect will run again when isWorkletStarted becomes true
385
+ return;
386
+ }
387
+ // Handle case where addresses exist but state is not_loaded (from persistence/app restart)
388
+ // This means wallet was cached but worklet is not initialized with credentials
389
+ // We need to trigger proper initialization with biometrics
390
+ // Only trigger if we're not already in the process of loading (checking/loading state)
391
+ if (walletLoadingState.type === 'not_loaded' && hasAddresses && activeWalletId && isWorkletStarted) {
392
+ // Skip if wallet is already initializing to prevent duplicate biometric prompts
393
+ if (isWalletInitializing) {
394
+ log('[WdkAppProvider] Skipping cached wallet initialization - already in progress', {
395
+ activeWalletId,
396
+ walletLoadingState: walletLoadingState.type,
397
+ });
398
+ return;
399
+ }
400
+ log('[WdkAppProvider] Cached wallet detected on restart - triggering initialization with biometrics', {
401
+ activeWalletId,
402
+ hasAddresses,
403
+ isWorkletStarted,
404
+ isWorkletInitialized,
405
+ walletLoadingState: walletLoadingState.type
406
+ });
407
+ (async () => {
408
+ try {
409
+ const walletExists = await hasWallet(activeWalletId);
410
+ const shouldCreateNew = !walletExists;
411
+ log('[WdkAppProvider] Wallet existence check', {
412
+ activeWalletId,
413
+ walletExists,
414
+ shouldCreateNew,
415
+ });
416
+ // Call initializeWallet to trigger biometrics and properly load the wallet
417
+ // This will transition state to 'checking' immediately, preventing duplicate calls
418
+ // Then it will go through: checking -> loading -> ready
419
+ await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
420
+ log('[WdkAppProvider] Wallet initialized successfully from cache');
421
+ }
422
+ catch (error) {
423
+ logError('[WdkAppProvider] Failed to initialize wallet from cache:', error);
424
+ // Error will be handled by the error handling logic below
425
+ }
426
+ })();
427
+ return;
428
+ }
429
+ // Handle case where activeWalletId exists but no addresses (after logout/app restart)
430
+ // This means the user logged in but addresses were cleared during logout
431
+ // We need to trigger initialization to load the wallet
432
+ if (walletLoadingState.type === 'not_loaded' && !hasAddresses && activeWalletId && isWorkletStarted) {
433
+ // Skip if wallet is already initializing to prevent duplicate biometric prompts
434
+ if (isWalletInitializing) {
435
+ log('[WdkAppProvider] Skipping wallet initialization - already in progress', {
436
+ activeWalletId,
437
+ walletLoadingState: walletLoadingState.type,
438
+ });
439
+ return;
440
+ }
441
+ log('[WdkAppProvider] Active wallet detected without addresses - triggering initialization', {
442
+ activeWalletId,
443
+ hasAddresses,
444
+ isWorkletStarted,
445
+ walletLoadingState: walletLoadingState.type
446
+ });
447
+ (async () => {
448
+ try {
449
+ const walletExists = await hasWallet(activeWalletId);
450
+ const shouldCreateNew = !walletExists;
451
+ log('[WdkAppProvider] Wallet existence check', {
452
+ activeWalletId,
453
+ walletExists,
454
+ shouldCreateNew,
455
+ });
456
+ // Call initializeWallet to trigger biometrics and properly load the wallet
457
+ // This will transition state to 'checking' immediately, preventing duplicate calls
458
+ await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
459
+ log('[WdkAppProvider] Wallet initialized successfully');
460
+ }
461
+ catch (error) {
462
+ logError('[WdkAppProvider] Failed to initialize wallet:', error);
463
+ // Error will be handled by the error handling logic below
464
+ }
465
+ })();
466
+ return;
467
+ }
468
+ // Handle ready state transitions
469
+ if (shouldMarkWalletAsReady(walletLoadingState, hasAddresses, currentWalletId, activeWalletId, isWorkletInitialized)) {
470
+ log('[WdkAppProvider] Wallet ready', { activeWalletId });
471
+ walletStore.setState((prev) => updateWalletLoadingState(prev, {
472
+ type: 'ready',
473
+ identifier: activeWalletId
474
+ }));
475
+ return;
476
+ }
477
+ // Handle errors from useWalletManager
478
+ if (shouldHandleError(walletManagerError, currentWalletId, activeWalletId, walletLoadingState)) {
479
+ log('[WdkAppProvider] Wallet operation error detected', {
480
+ activeWalletId,
481
+ error: walletManagerError
482
+ });
483
+ const error = new Error(walletManagerError);
484
+ // Check if this is an authentication error (biometric failure)
485
+ const errorMessage = walletManagerError?.toLowerCase() || '';
486
+ const isAuthError = errorMessage.includes('authentication') ||
487
+ errorMessage.includes('biometric') ||
488
+ errorMessage.includes('user cancel');
489
+ if (isAuthError && !authErrorRef.current) {
490
+ log('[WdkAppProvider] Authentication error detected - preventing auto-retry', {
491
+ error: walletManagerError,
492
+ });
493
+ authErrorRef.current = walletManagerError || 'Authentication failed';
494
+ }
495
+ walletStore.setState((prev) => updateWalletLoadingState(prev, {
496
+ type: 'error',
497
+ identifier: activeWalletId,
498
+ error
499
+ }));
500
+ }
501
+ }, [enableAutoInitialization, currentUserId, activeWalletId, walletLoadingState, walletAddresses, walletManagerError, isWalletInitializing, isWorkletStarted, isWorkletInitialized]);
502
+ // Note: walletStore removed from deps - it's a singleton that never changes
503
+ // Note: initializeWallet removed from deps and accessed via ref to prevent infinite loop
504
+ // Retry initialization
505
+ const retry = useCallback(() => {
506
+ log('[WdkAppProvider] Retrying initialization...');
507
+ // Clear authentication error flag to allow retry
508
+ if (authErrorRef.current) {
509
+ log('[WdkAppProvider] Clearing authentication error flag for retry');
510
+ authErrorRef.current = null;
511
+ }
512
+ if (isWalletErrorState(walletLoadingState)) {
513
+ walletStore.setState((prev) => updateWalletLoadingState(prev, { type: 'not_loaded' }));
514
+ }
515
+ }, [walletLoadingState]);
516
+ // Note: walletStore removed from deps - it's a singleton that never changes
517
+ // Convenience getters
518
+ const isInitializing = useMemo(() => isAppInProgressStatus(status), [status]);
519
+ const isReady = useMemo(() => isAppReadyStatus(status), [status]);
520
+ // Get wallet error from wallet state
521
+ const walletError = walletLoadingState.type === 'error' ? walletLoadingState.error : null;
522
+ const initializationError = workletError ? new Error(workletError) : walletError;
523
+ // Get walletExists from wallet state
524
+ const walletExists = useMemo(() => {
525
+ if (walletLoadingState.type === 'loading') {
526
+ return walletLoadingState.walletExists;
527
+ }
528
+ if (walletLoadingState.type === 'ready') {
529
+ return true; // Wallet is loaded, so it exists
530
+ }
531
+ return null;
532
+ }, [walletLoadingState]);
533
+ // Loading wallet ID (transient, during loading operations)
534
+ const loadingWalletId = useMemo(() => {
535
+ if (walletLoadingState.type === 'checking' || walletLoadingState.type === 'loading') {
536
+ return walletLoadingState.identifier;
537
+ }
538
+ return null;
539
+ }, [walletLoadingState]);
540
+ const contextValue = useMemo(() => ({
541
+ status,
542
+ workletStatus,
543
+ workletState,
544
+ walletState: walletStateObject,
545
+ isInitializing,
546
+ isReady,
547
+ activeWalletId,
548
+ loadingWalletId,
549
+ walletExists,
550
+ error: initializationError,
551
+ retry,
552
+ }), [status, workletStatus, workletState, walletStateObject, isInitializing, isReady, activeWalletId, loadingWalletId, walletExists, initializationError, retry]);
553
+ return (React.createElement(QueryClientProvider, { client: queryClient },
554
+ React.createElement(WdkAppContext.Provider, { value: contextValue }, children)));
555
+ }
556
+ // Export context for use by the useWdkApp hook
557
+ export { WdkAppContext };
558
+ //# sourceMappingURL=WdkAppProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WdkAppProvider.js","sourceRoot":"","sources":["../../src/provider/WdkAppProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Account Service
3
+ *
4
+ * Handles account method calls through the worklet.
5
+ * This service provides a generic interface for calling account methods
6
+ * like getBalance, getTokenBalance, signMessage, signTransaction, etc.
7
+ */
8
+ /**
9
+ * Account Service
10
+ *
11
+ * Provides methods for calling account operations through the worklet.
12
+ */
13
+ export declare class AccountService {
14
+ /**
15
+ * Call a method on a wallet account
16
+ * Generic method for calling any account method through the worklet
17
+ *
18
+ * The worklet should already have the correct wallet loaded via `initializeWDK`.
19
+ * Wallet switching is handled at the hook level before calling this service.
20
+ *
21
+ * @param network - Network name
22
+ * @param accountIndex - Account index
23
+ * @param methodName - Method name
24
+ * @param args - Optional arguments for the method
25
+ * @param walletId - Optional wallet identifier (for consistency, worklet should already have correct wallet loaded)
26
+ * @returns Promise with the method result
27
+ * @throws Error if validation fails
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Get balance
32
+ * const balance = await AccountService.callAccountMethod('ethereum', 0, 'getBalance', null)
33
+ *
34
+ * // Get token balance
35
+ * const tokenBalance = await AccountService.callAccountMethod(
36
+ * 'ethereum',
37
+ * 0,
38
+ * 'getTokenBalance',
39
+ * '0x...'
40
+ * )
41
+ *
42
+ * // Sign a message
43
+ * const signature = await AccountService.callAccountMethod(
44
+ * 'ethereum',
45
+ * 0,
46
+ * 'signMessage',
47
+ * { message: 'Hello World' }
48
+ * )
49
+ * ```
50
+ */
51
+ static callAccountMethod<T = unknown>(network: string, accountIndex: number, methodName: string, args?: unknown, walletId?: string): Promise<T>;
52
+ }