@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,433 @@
1
+ /**
2
+ * Worklet Lifecycle Service
3
+ *
4
+ * Handles worklet lifecycle operations: starting, initializing, and cleaning up worklets.
5
+ * This service is focused solely on worklet lifecycle management.
6
+ */
7
+ import { HRPC } from '@spacesops/pear-wrk-wdk';
8
+ import { Worklet } from '@spacesops/react-native-bare-kit';
9
+ import { getWalletStore } from '../store/walletStore';
10
+ import { getWorkletStore } from '../store/workletStore';
11
+ import { asExtendedHRPC } from '../types/hrpc';
12
+ import { DEFAULT_MNEMONIC_WORD_COUNT } from '../utils/constants';
13
+ import { handleServiceError } from '../utils/errorHandling';
14
+ import { normalizeError } from '../utils/errorUtils';
15
+ import { log, logWarn } from '../utils/logger';
16
+ import { isInitialized as isWorkletInitialized } from '../utils/storeHelpers';
17
+ /**
18
+ * Type guard to check if HRPC has cleanup method
19
+ */
20
+ function hasHRPCCleanup(hrpc) {
21
+ return 'cleanup' in hrpc && typeof hrpc.cleanup === 'function';
22
+ }
23
+ /**
24
+ * Type guard to check if Worklet has cleanup methods
25
+ */
26
+ function hasWorkletCleanup(worklet) {
27
+ const w = worklet;
28
+ return ((typeof w.cleanup === 'function') ||
29
+ (typeof w.destroy === 'function') ||
30
+ (typeof w.stop === 'function'));
31
+ }
32
+ /**
33
+ * Worklet Lifecycle Service
34
+ *
35
+ * Provides methods for managing worklet lifecycle: start, initialize, cleanup, reset.
36
+ */
37
+ export class WorkletLifecycleService {
38
+ /**
39
+ * Cleanup a resource by trying cleanup methods in order
40
+ * Handles cleanup gracefully, continuing even if individual steps fail
41
+ */
42
+ static async cleanupResource(resource, cleanupMethods) {
43
+ if (!resource)
44
+ return;
45
+ const r = resource;
46
+ const method = cleanupMethods.find((m) => typeof r[m] === 'function');
47
+ if (method) {
48
+ try {
49
+ await r[method]();
50
+ }
51
+ catch (error) {
52
+ logWarn(`Error calling ${method} on resource:`, error);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Cleanup worklet resources (HRPC and Worklet instances)
58
+ * Handles cleanup gracefully, continuing even if individual steps fail
59
+ */
60
+ static async cleanupWorkletResources(hrpc, worklet) {
61
+ try {
62
+ // Cleanup HRPC if it has a cleanup method
63
+ await this.cleanupResource(hrpc, ['cleanup']);
64
+ // Cleanup worklet - try cleanup, destroy, or stop in that order
65
+ await this.cleanupResource(worklet, ['cleanup', 'destroy', 'stop']);
66
+ }
67
+ catch (error) {
68
+ logWarn('Error cleaning up worklet resources:', error);
69
+ // Continue even if cleanup fails
70
+ }
71
+ }
72
+ /**
73
+ * Start the worklet with network configurations
74
+ */
75
+ static async startWorklet(networkConfigs) {
76
+ const store = getWorkletStore();
77
+ const state = store.getState();
78
+ if (state.isLoading) {
79
+ logWarn('Worklet initialization already in progress');
80
+ return;
81
+ }
82
+ if (state.isWorkletStarted) {
83
+ log('Worklet already started');
84
+ return;
85
+ }
86
+ try {
87
+ store.setState({
88
+ error: null,
89
+ isLoading: true,
90
+ });
91
+ // Cleanup existing worklet if present
92
+ const { worklet: existingWorklet, hrpc: existingHrpc } = store.getState();
93
+ if (existingWorklet || existingHrpc) {
94
+ await this.cleanupWorkletResources(existingHrpc, existingWorklet);
95
+ }
96
+ const worklet = new Worklet();
97
+ // Dynamic import of @spacesops/pear-wrk-wdk bundle
98
+ const pearWrkWdk = await import('@spacesops/pear-wrk-wdk');
99
+ const bundle = pearWrkWdk.bundle;
100
+ if (!bundle) {
101
+ throw new Error('Failed to load @spacesops/pear-wrk-wdk bundle');
102
+ }
103
+ // Bundle file (mobile bundle for React Native) - worklet.start expects bundle parameter
104
+ ;
105
+ worklet.start('/wdk-worklet.bundle', bundle);
106
+ const { IPC } = worklet;
107
+ if (!IPC) {
108
+ throw new Error('IPC not available from worklet');
109
+ }
110
+ const hrpcInstance = new HRPC(IPC);
111
+ const result = await hrpcInstance.workletStart({
112
+ config: JSON.stringify(networkConfigs),
113
+ });
114
+ store.setState({
115
+ worklet,
116
+ hrpc: hrpcInstance,
117
+ ipc: IPC,
118
+ isWorkletStarted: true,
119
+ isLoading: false,
120
+ networkConfigs,
121
+ workletStartResult: result,
122
+ error: null,
123
+ });
124
+ }
125
+ catch (error) {
126
+ this.handleErrorWithStateUpdate(error, 'startWorklet', (normalizedError) => ({
127
+ error: normalizedError.message,
128
+ isLoading: false,
129
+ worklet: null,
130
+ hrpc: null,
131
+ ipc: null,
132
+ isWorkletStarted: false,
133
+ }));
134
+ }
135
+ }
136
+ /**
137
+ * Ensure worklet is started, starting it if needed
138
+ *
139
+ * @param networkConfigs - Network configs (required if autoStart=true)
140
+ * @param options - Options
141
+ * @param options.autoStart - If true, start worklet if not started (default: false)
142
+ * @throws Error if worklet not started and autoStart=false or networkConfigs not provided
143
+ */
144
+ static async ensureWorkletStarted(networkConfigs, options) {
145
+ const store = getWorkletStore();
146
+ const state = store.getState();
147
+ if (state.isWorkletStarted) {
148
+ return; // Already started
149
+ }
150
+ const autoStart = options?.autoStart ?? false;
151
+ if (!autoStart || !networkConfigs) {
152
+ throw new Error('Worklet must be started before this operation');
153
+ }
154
+ await this.startWorklet(networkConfigs);
155
+ }
156
+ /**
157
+ * Initialize WDK with encrypted seed (ONLY encrypted approach)
158
+ */
159
+ static async initializeWDK(options) {
160
+ const store = getWorkletStore();
161
+ const state = store.getState();
162
+ if (!state.isWorkletStarted) {
163
+ throw new Error('Worklet must be started before initializing WDK');
164
+ }
165
+ if (state.isInitialized &&
166
+ state.encryptionKey === options.encryptionKey &&
167
+ state.encryptedSeed === options.encryptedSeed) {
168
+ log('WDK already initialized with the same encrypted seed');
169
+ return;
170
+ }
171
+ try {
172
+ store.setState({
173
+ error: null,
174
+ isLoading: true,
175
+ });
176
+ // Get HRPC directly from store instead of using requireExtendedHRPC()
177
+ // requireExtendedHRPC() requires isInitialized to be true, but we're setting it here
178
+ const currentState = store.getState();
179
+ if (!currentState.hrpc) {
180
+ throw new Error('HRPC instance not available. Worklet may not be fully started.');
181
+ }
182
+ const extendedHrpc = asExtendedHRPC(currentState.hrpc);
183
+ const result = await extendedHrpc.initializeWDK({
184
+ encryptionKey: options.encryptionKey,
185
+ encryptedSeed: options.encryptedSeed,
186
+ config: JSON.stringify(currentState.networkConfigs || {}),
187
+ });
188
+ // NEVER store seed phrase
189
+ // Extract status from result
190
+ const wdkInitResult = this.extractWdkInitResult(result);
191
+ store.setState({
192
+ isInitialized: true,
193
+ isLoading: false,
194
+ encryptedSeed: options.encryptedSeed,
195
+ encryptionKey: options.encryptionKey,
196
+ wdkInitResult,
197
+ error: null,
198
+ });
199
+ }
200
+ catch (error) {
201
+ this.handleErrorWithStateUpdate(error, 'initializeWDK', (normalizedError) => ({
202
+ error: normalizedError.message,
203
+ isLoading: false,
204
+ isInitialized: false,
205
+ }));
206
+ }
207
+ }
208
+ /**
209
+ * Generate entropy and encrypt (for creating new wallets)
210
+ */
211
+ static async generateEntropyAndEncrypt(wordCount = DEFAULT_MNEMONIC_WORD_COUNT) {
212
+ const store = getWorkletStore();
213
+ const state = store.getState();
214
+ if (!state.isWorkletStarted) {
215
+ throw new Error('Worklet must be started before generating entropy');
216
+ }
217
+ try {
218
+ // Get HRPC directly from store instead of using requireExtendedHRPC()
219
+ // These methods may be called before WDK is initialized
220
+ const currentState = store.getState();
221
+ if (!currentState.hrpc) {
222
+ throw new Error('HRPC instance not available. Worklet may not be fully started.');
223
+ }
224
+ const extendedHrpc = asExtendedHRPC(currentState.hrpc);
225
+ const result = await extendedHrpc.generateEntropyAndEncrypt({
226
+ wordCount,
227
+ });
228
+ return {
229
+ encryptionKey: result.encryptionKey,
230
+ encryptedSeedBuffer: result.encryptedSeedBuffer,
231
+ encryptedEntropyBuffer: result.encryptedEntropyBuffer,
232
+ };
233
+ }
234
+ catch (error) {
235
+ this.handleAndThrowError(error, 'generateEntropyAndEncrypt', 'Failed to generate entropy');
236
+ }
237
+ }
238
+ /**
239
+ * Get mnemonic from encrypted entropy (for display purposes only - never stored)
240
+ */
241
+ static async getMnemonicFromEntropy(encryptedEntropy, encryptionKey) {
242
+ const store = getWorkletStore();
243
+ const state = store.getState();
244
+ if (!state.isWorkletStarted) {
245
+ throw new Error('Worklet must be started before getting mnemonic');
246
+ }
247
+ try {
248
+ // Get HRPC directly from store instead of using requireExtendedHRPC()
249
+ // These methods may be called before WDK is initialized
250
+ const currentState = store.getState();
251
+ if (!currentState.hrpc) {
252
+ throw new Error('HRPC instance not available. Worklet may not be fully started.');
253
+ }
254
+ const extendedHrpc = asExtendedHRPC(currentState.hrpc);
255
+ const result = await extendedHrpc.getMnemonicFromEntropy({
256
+ encryptedEntropy,
257
+ encryptionKey,
258
+ });
259
+ return {
260
+ mnemonic: result.mnemonic,
261
+ };
262
+ }
263
+ catch (error) {
264
+ this.handleAndThrowError(error, 'getMnemonicFromEntropy', 'Failed to get mnemonic');
265
+ }
266
+ }
267
+ /**
268
+ * Get seed and entropy from mnemonic phrase (for importing existing wallets)
269
+ */
270
+ static async getSeedAndEntropyFromMnemonic(mnemonic) {
271
+ const store = getWorkletStore();
272
+ const state = store.getState();
273
+ if (!state.isWorkletStarted) {
274
+ throw new Error('Worklet must be started before getting seed and entropy from mnemonic');
275
+ }
276
+ try {
277
+ // Get HRPC directly from store instead of using requireExtendedHRPC()
278
+ // These methods may be called before WDK is initialized
279
+ const currentState = store.getState();
280
+ if (!currentState.hrpc) {
281
+ throw new Error('HRPC instance not available. Worklet may not be fully started.');
282
+ }
283
+ const extendedHrpc = asExtendedHRPC(currentState.hrpc);
284
+ const result = await extendedHrpc.getSeedAndEntropyFromMnemonic({
285
+ mnemonic,
286
+ });
287
+ return {
288
+ encryptionKey: result.encryptionKey,
289
+ encryptedSeedBuffer: result.encryptedSeedBuffer,
290
+ encryptedEntropyBuffer: result.encryptedEntropyBuffer,
291
+ };
292
+ }
293
+ catch (error) {
294
+ this.handleAndThrowError(error, 'getSeedAndEntropyFromMnemonic', 'Failed to get seed and entropy from mnemonic');
295
+ }
296
+ }
297
+ /**
298
+ * Initialize both worklet and WDK in one call (convenience method) - ONLY encrypted
299
+ */
300
+ static async initializeWorklet(options) {
301
+ // Convenience method that does both steps - ONLY encrypted approach
302
+ await this.startWorklet(options.networkConfigs);
303
+ await this.initializeWDK({
304
+ encryptionKey: options.encryptionKey,
305
+ encryptedSeed: options.encryptedSeed,
306
+ });
307
+ }
308
+ /**
309
+ * Handle error for methods that throw with a message prefix
310
+ * Normalizes error, logs it, and throws a new error with operation context
311
+ */
312
+ static handleAndThrowError(error, operation, errorMessagePrefix) {
313
+ const normalizedError = normalizeError(error, false, {
314
+ component: 'WorkletLifecycleService',
315
+ operation,
316
+ });
317
+ handleServiceError(error, 'WorkletLifecycleService', operation);
318
+ throw new Error(`${errorMessagePrefix}: ${normalizedError.message}`);
319
+ }
320
+ /**
321
+ * Handle error for methods that update store state
322
+ * Normalizes error, updates store state, and re-throws
323
+ */
324
+ static handleErrorWithStateUpdate(error, operation, stateUpdate) {
325
+ const normalizedError = normalizeError(error, false, {
326
+ component: 'WorkletLifecycleService',
327
+ operation,
328
+ });
329
+ const store = getWorkletStore();
330
+ store.setState(stateUpdate(normalizedError));
331
+ handleServiceError(error, 'WorkletLifecycleService', operation);
332
+ throw normalizedError;
333
+ }
334
+ /**
335
+ * Extract WDK initialization result status
336
+ * Safely extracts status from result object
337
+ */
338
+ static extractWdkInitResult(result) {
339
+ if (result && typeof result === 'object' && 'status' in result) {
340
+ const status = result.status;
341
+ if (status === null || status === undefined || typeof status === 'string') {
342
+ return { status: status ?? null };
343
+ }
344
+ }
345
+ return null;
346
+ }
347
+ /**
348
+ * Reset both worklet and wallet stores
349
+ */
350
+ static resetStores() {
351
+ const workletStore = getWorkletStore();
352
+ const walletStore = getWalletStore();
353
+ workletStore.setState({
354
+ worklet: null,
355
+ hrpc: null,
356
+ ipc: null,
357
+ isWorkletStarted: false,
358
+ isInitialized: false,
359
+ isLoading: false,
360
+ error: null,
361
+ encryptedSeed: null,
362
+ encryptionKey: null,
363
+ networkConfigs: null,
364
+ workletStartResult: null,
365
+ wdkInitResult: null,
366
+ });
367
+ walletStore.setState({
368
+ addresses: {},
369
+ walletLoading: {},
370
+ balances: {},
371
+ balanceLoading: {},
372
+ lastBalanceUpdate: {},
373
+ });
374
+ }
375
+ /**
376
+ * Cleanup worklet resources
377
+ * Clears only addresses, seed, and WDK instance - does NOT terminate the worklet
378
+ * The worklet continues running for faster re-initialization
379
+ */
380
+ static async cleanup() {
381
+ const workletStore = getWorkletStore();
382
+ const walletStore = getWalletStore();
383
+ // Clear only sensitive data - addresses, seed, and WDK instance
384
+ // Do NOT terminate worklet, hrpc, or ipc - keep them running
385
+ workletStore.setState({
386
+ encryptedSeed: null,
387
+ encryptionKey: null,
388
+ isInitialized: false,
389
+ wdkInitResult: null,
390
+ });
391
+ // Clear addresses from wallet store
392
+ walletStore.setState({
393
+ addresses: {},
394
+ });
395
+ }
396
+ /**
397
+ * Reset worklet state (synchronous)
398
+ * Clears only addresses, seed, and WDK instance - does NOT terminate the worklet
399
+ * The worklet continues running for faster re-initialization
400
+ * For async cleanup, use cleanup() instead
401
+ */
402
+ static reset() {
403
+ const workletStore = getWorkletStore();
404
+ const walletStore = getWalletStore();
405
+ // Clear only sensitive data - addresses, seed, and WDK instance
406
+ // Do NOT terminate worklet, hrpc, or ipc - keep them running
407
+ workletStore.setState({
408
+ encryptedSeed: null,
409
+ encryptionKey: null,
410
+ isInitialized: false,
411
+ wdkInitResult: null,
412
+ });
413
+ // Clear addresses from wallet store
414
+ walletStore.setState({
415
+ addresses: {},
416
+ });
417
+ }
418
+ /**
419
+ * Clear error state
420
+ */
421
+ static clearError() {
422
+ const store = getWorkletStore();
423
+ store.setState({ error: null });
424
+ }
425
+ /**
426
+ * Check if wallet is initialized
427
+ * Returns true if worklet is started and WDK is initialized
428
+ */
429
+ static isInitialized() {
430
+ return isWorkletInitialized();
431
+ }
432
+ }
433
+ //# sourceMappingURL=workletLifecycleService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workletLifecycleService.js","sourceRoot":"","sources":["../../src/services/workletLifecycleService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type MMKV } from 'react-native-mmkv';
2
+ /**
3
+ * Storage adapter interface for Zustand persistence
4
+ */
5
+ export interface StorageAdapter {
6
+ getItem: (name: string) => string | null;
7
+ setItem: (name: string, value: string) => void;
8
+ removeItem: (name: string) => void;
9
+ }
10
+ /**
11
+ * Create MMKV storage instance for the wallet
12
+ *
13
+ * SECURITY NOTE: MMKV stores files in the app's document directory, which is app-scoped.
14
+ * Two different apps will NOT share data because each app has its own isolated document directory.
15
+ *
16
+ * This is for non-sensitive data persistence (wallet metadata, balances, addresses).
17
+ * For sensitive data (encrypted seeds, keys), use SecureStorage from wdk-react-native-secure-storage.
18
+ *
19
+ * The encryption key is derived from a device/app identifier to ensure each app instance
20
+ * has a unique encryption key. If no account identifier is provided, a default app-scoped
21
+ * identifier is used.
22
+ *
23
+ * @param accountIdentifier - Optional account identifier for per-account encryption keys.
24
+ * If not provided, uses a default app-scoped identifier.
25
+ * @returns Promise that resolves to MMKV storage instance
26
+ */
27
+ export declare function createMMKVStorage(accountIdentifier?: string): Promise<MMKV>;
28
+ /**
29
+ * Storage adapter factory for Zustand persistence
30
+ * This allows Zustand stores to use MMKV for persistence
31
+ *
32
+ * Uses lazy async initialization with synchronous API.
33
+ * Storage is initialized asynchronously when first accessed, then cached.
34
+ * Operations are queued during initialization to prevent race conditions.
35
+ *
36
+ * IMPORTANT: The synchronous API (getItem) may return null during initialization.
37
+ * This is expected behavior - Zustand will handle missing data gracefully on first load.
38
+ * Subsequent operations will be queued and processed once storage is ready.
39
+ *
40
+ * @param accountIdentifier - Optional account identifier for per-account encryption keys.
41
+ * If not provided, uses a default app-scoped identifier.
42
+ * @returns StorageAdapter with lazy async initialization
43
+ */
44
+ export declare function createMMKVStorageAdapter(accountIdentifier?: string): StorageAdapter;