@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.
- package/README.md +551 -0
- package/dist/__mocks__/react.d.ts +40 -0
- package/dist/__mocks__/react.js +33 -0
- package/dist/__mocks__/react.js.map +1 -0
- package/dist/__mocks__/secureStorage.d.ts +26 -0
- package/dist/__mocks__/secureStorage.js +80 -0
- package/dist/__mocks__/secureStorage.js.map +1 -0
- package/dist/__tests__/hooks/useBalance.test.d.ts +6 -0
- package/dist/__tests__/hooks/useBalance.test.js +217 -0
- package/dist/__tests__/hooks/useBalance.test.js.map +1 -0
- package/dist/__tests__/hooks/useWallet.test.d.ts +6 -0
- package/dist/__tests__/hooks/useWallet.test.js +105 -0
- package/dist/__tests__/hooks/useWallet.test.js.map +1 -0
- package/dist/__tests__/hooks/useWalletManager.test.d.ts +6 -0
- package/dist/__tests__/hooks/useWalletManager.test.js +193 -0
- package/dist/__tests__/hooks/useWalletManager.test.js.map +1 -0
- package/dist/__tests__/hooks/useWdkApp.test.d.ts +6 -0
- package/dist/__tests__/hooks/useWdkApp.test.js +55 -0
- package/dist/__tests__/hooks/useWdkApp.test.js.map +1 -0
- package/dist/__tests__/hooks/useWorklet.test.d.ts +6 -0
- package/dist/__tests__/hooks/useWorklet.test.js +168 -0
- package/dist/__tests__/hooks/useWorklet.test.js.map +1 -0
- package/dist/__tests__/provider/WdkAppProvider.test.d.ts +6 -0
- package/dist/__tests__/provider/WdkAppProvider.test.js +57 -0
- package/dist/__tests__/provider/WdkAppProvider.test.js.map +1 -0
- package/dist/__tests__/services/accountService.test.d.ts +6 -0
- package/dist/__tests__/services/accountService.test.js +216 -0
- package/dist/__tests__/services/accountService.test.js.map +1 -0
- package/dist/__tests__/services/addressService.test.d.ts +6 -0
- package/dist/__tests__/services/addressService.test.js +246 -0
- package/dist/__tests__/services/addressService.test.js.map +1 -0
- package/dist/__tests__/services/balanceService.test.d.ts +6 -0
- package/dist/__tests__/services/balanceService.test.js +333 -0
- package/dist/__tests__/services/balanceService.test.js.map +1 -0
- package/dist/__tests__/services/walletSetupService.test.d.ts +6 -0
- package/dist/__tests__/services/walletSetupService.test.js +304 -0
- package/dist/__tests__/services/walletSetupService.test.js.map +1 -0
- package/dist/__tests__/services/walletSwitchingService.test.d.ts +6 -0
- package/dist/__tests__/services/walletSwitchingService.test.js +209 -0
- package/dist/__tests__/services/walletSwitchingService.test.js.map +1 -0
- package/dist/__tests__/services/workletLifecycleService.test.d.ts +6 -0
- package/dist/__tests__/services/workletLifecycleService.test.js +451 -0
- package/dist/__tests__/services/workletLifecycleService.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +7 -0
- package/dist/__tests__/setup.js +49 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/storage/mmkvStorage.test.d.ts +6 -0
- package/dist/__tests__/storage/mmkvStorage.test.js +213 -0
- package/dist/__tests__/storage/mmkvStorage.test.js.map +1 -0
- package/dist/__tests__/store/walletStore.test.d.ts +4 -0
- package/dist/__tests__/store/walletStore.test.js +86 -0
- package/dist/__tests__/store/walletStore.test.js.map +1 -0
- package/dist/__tests__/store/workletStore.test.d.ts +4 -0
- package/dist/__tests__/store/workletStore.test.js +255 -0
- package/dist/__tests__/store/workletStore.test.js.map +1 -0
- package/dist/__tests__/types/hrpc.test.d.ts +4 -0
- package/dist/__tests__/types/hrpc.test.js +99 -0
- package/dist/__tests__/types/hrpc.test.js.map +1 -0
- package/dist/__tests__/utils/balanceUtils.test.d.ts +4 -0
- package/dist/__tests__/utils/balanceUtils.test.js +133 -0
- package/dist/__tests__/utils/balanceUtils.test.js.map +1 -0
- package/dist/__tests__/utils/errorHandling.test.d.ts +6 -0
- package/dist/__tests__/utils/errorHandling.test.js +119 -0
- package/dist/__tests__/utils/errorHandling.test.js.map +1 -0
- package/dist/__tests__/utils/errorUtils.test.d.ts +4 -0
- package/dist/__tests__/utils/errorUtils.test.js +133 -0
- package/dist/__tests__/utils/errorUtils.test.js.map +1 -0
- package/dist/__tests__/utils/initializationState.test.d.ts +6 -0
- package/dist/__tests__/utils/initializationState.test.js +243 -0
- package/dist/__tests__/utils/initializationState.test.js.map +1 -0
- package/dist/__tests__/utils/jsonUtils.test.d.ts +4 -0
- package/dist/__tests__/utils/jsonUtils.test.js +118 -0
- package/dist/__tests__/utils/jsonUtils.test.js.map +1 -0
- package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +6 -0
- package/dist/__tests__/utils/mmkvKeyManager.test.js +158 -0
- package/dist/__tests__/utils/mmkvKeyManager.test.js.map +1 -0
- package/dist/__tests__/utils/mnemonicUtils.test.d.ts +4 -0
- package/dist/__tests__/utils/mnemonicUtils.test.js +40 -0
- package/dist/__tests__/utils/mnemonicUtils.test.js.map +1 -0
- package/dist/__tests__/utils/raceConditions.test.d.ts +6 -0
- package/dist/__tests__/utils/raceConditions.test.js +239 -0
- package/dist/__tests__/utils/raceConditions.test.js.map +1 -0
- package/dist/__tests__/utils/result.test.d.ts +4 -0
- package/dist/__tests__/utils/result.test.js +66 -0
- package/dist/__tests__/utils/result.test.js.map +1 -0
- package/dist/__tests__/utils/schemas.test.d.ts +4 -0
- package/dist/__tests__/utils/schemas.test.js +66 -0
- package/dist/__tests__/utils/schemas.test.js.map +1 -0
- package/dist/__tests__/utils/storeHelpers.test.d.ts +4 -0
- package/dist/__tests__/utils/storeHelpers.test.js +227 -0
- package/dist/__tests__/utils/storeHelpers.test.js.map +1 -0
- package/dist/__tests__/utils/typeGuards.test.d.ts +4 -0
- package/dist/__tests__/utils/typeGuards.test.js +175 -0
- package/dist/__tests__/utils/typeGuards.test.js.map +1 -0
- package/dist/__tests__/utils/validation.test.d.ts +4 -0
- package/dist/__tests__/utils/validation.test.js +126 -0
- package/dist/__tests__/utils/validation.test.js.map +1 -0
- package/dist/__tests__/utils/walletUtils.test.d.ts +4 -0
- package/dist/__tests__/utils/walletUtils.test.js +156 -0
- package/dist/__tests__/utils/walletUtils.test.js.map +1 -0
- package/dist/hooks/useBalance.d.ts +170 -0
- package/dist/hooks/useBalance.js +442 -0
- package/dist/hooks/useBalance.js.map +1 -0
- package/dist/hooks/useWallet.d.ts +43 -0
- package/dist/hooks/useWallet.js +193 -0
- package/dist/hooks/useWallet.js.map +1 -0
- package/dist/hooks/useWalletManager.d.ts +100 -0
- package/dist/hooks/useWalletManager.js +526 -0
- package/dist/hooks/useWalletManager.js.map +1 -0
- package/dist/hooks/useWdkApp.d.ts +66 -0
- package/dist/hooks/useWdkApp.js +74 -0
- package/dist/hooks/useWdkApp.js.map +1 -0
- package/dist/hooks/useWorklet.d.ts +66 -0
- package/dist/hooks/useWorklet.js +42 -0
- package/dist/hooks/useWorklet.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/provider/WdkAppProvider.d.ts +112 -0
- package/dist/provider/WdkAppProvider.js +558 -0
- package/dist/provider/WdkAppProvider.js.map +1 -0
- package/dist/services/accountService.d.ts +52 -0
- package/dist/services/accountService.js +119 -0
- package/dist/services/accountService.js.map +1 -0
- package/dist/services/addressService.d.ts +22 -0
- package/dist/services/addressService.js +110 -0
- package/dist/services/addressService.js.map +1 -0
- package/dist/services/balanceService.d.ts +114 -0
- package/dist/services/balanceService.js +208 -0
- package/dist/services/balanceService.js.map +1 -0
- package/dist/services/walletSetupService.d.ts +217 -0
- package/dist/services/walletSetupService.js +535 -0
- package/dist/services/walletSetupService.js.map +1 -0
- package/dist/services/walletSwitchingService.d.ts +48 -0
- package/dist/services/walletSwitchingService.js +143 -0
- package/dist/services/walletSwitchingService.js.map +1 -0
- package/dist/services/workletLifecycleService.d.ts +117 -0
- package/dist/services/workletLifecycleService.js +433 -0
- package/dist/services/workletLifecycleService.js.map +1 -0
- package/dist/storage/mmkvStorage.d.ts +44 -0
- package/dist/storage/mmkvStorage.js +348 -0
- package/dist/storage/mmkvStorage.js.map +1 -0
- package/dist/store/walletStore.d.ts +130 -0
- package/dist/store/walletStore.js +204 -0
- package/dist/store/walletStore.js.map +1 -0
- package/dist/store/workletStore.d.ts +121 -0
- package/dist/store/workletStore.js +256 -0
- package/dist/store/workletStore.js.map +1 -0
- package/dist/types/hrpc.d.ts +60 -0
- package/dist/types/hrpc.js +26 -0
- package/dist/types/hrpc.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/balanceUtils.d.ts +30 -0
- package/dist/utils/balanceUtils.js +86 -0
- package/dist/utils/balanceUtils.js.map +1 -0
- package/dist/utils/constants.d.ts +66 -0
- package/dist/utils/constants.js +73 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +47 -0
- package/dist/utils/errorHandling.js +54 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/errorUtils.d.ts +89 -0
- package/dist/utils/errorUtils.js +264 -0
- package/dist/utils/errorUtils.js.map +1 -0
- package/dist/utils/initializationState.d.ts +129 -0
- package/dist/utils/initializationState.js +220 -0
- package/dist/utils/initializationState.js.map +1 -0
- package/dist/utils/jsonUtils.d.ts +21 -0
- package/dist/utils/jsonUtils.js +67 -0
- package/dist/utils/jsonUtils.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mmkvKeyManager.d.ts +57 -0
- package/dist/utils/mmkvKeyManager.js +214 -0
- package/dist/utils/mmkvKeyManager.js.map +1 -0
- package/dist/utils/mnemonicUtils.d.ts +17 -0
- package/dist/utils/mnemonicUtils.js +28 -0
- package/dist/utils/mnemonicUtils.js.map +1 -0
- package/dist/utils/operationMutex.d.ts +69 -0
- package/dist/utils/operationMutex.js +150 -0
- package/dist/utils/operationMutex.js.map +1 -0
- package/dist/utils/result.d.ts +34 -0
- package/dist/utils/result.js +43 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/schemas.d.ts +365 -0
- package/dist/utils/schemas.js +152 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/storeHelpers.d.ts +112 -0
- package/dist/utils/storeHelpers.js +198 -0
- package/dist/utils/storeHelpers.js.map +1 -0
- package/dist/utils/typeGuards.d.ts +70 -0
- package/dist/utils/typeGuards.js +95 -0
- package/dist/utils/typeGuards.js.map +1 -0
- package/dist/utils/validation.d.ts +53 -0
- package/dist/utils/validation.js +152 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/walletStateHelpers.d.ts +62 -0
- package/dist/utils/walletStateHelpers.js +81 -0
- package/dist/utils/walletStateHelpers.js.map +1 -0
- package/dist/utils/walletUtils.d.ts +38 -0
- package/dist/utils/walletUtils.js +87 -0
- package/dist/utils/walletUtils.js.map +1 -0
- package/package.json +79 -0
- package/src/__mocks__/react.ts +34 -0
- package/src/__mocks__/secureStorage.ts +87 -0
- package/src/__tests__/hooks/useBalance.test.ts +286 -0
- package/src/__tests__/hooks/useWallet.test.ts +122 -0
- package/src/__tests__/hooks/useWalletManager.test.ts +271 -0
- package/src/__tests__/hooks/useWdkApp.test.tsx +59 -0
- package/src/__tests__/hooks/useWorklet.test.ts +195 -0
- package/src/__tests__/provider/WdkAppProvider.test.tsx +67 -0
- package/src/__tests__/services/accountService.test.ts +337 -0
- package/src/__tests__/services/addressService.test.ts +312 -0
- package/src/__tests__/services/balanceService.test.ts +411 -0
- package/src/__tests__/services/walletSetupService.test.ts +463 -0
- package/src/__tests__/services/walletSwitchingService.test.ts +258 -0
- package/src/__tests__/services/workletLifecycleService.test.ts +514 -0
- package/src/__tests__/setup.ts +54 -0
- package/src/__tests__/storage/mmkvStorage.test.ts +325 -0
- package/src/__tests__/store/walletStore.test.ts +101 -0
- package/src/__tests__/store/workletStore.test.ts +329 -0
- package/src/__tests__/types/hrpc.test.ts +125 -0
- package/src/__tests__/utils/balanceUtils.test.ts +151 -0
- package/src/__tests__/utils/errorHandling.test.ts +147 -0
- package/src/__tests__/utils/errorUtils.test.ts +170 -0
- package/src/__tests__/utils/initializationState.test.ts +337 -0
- package/src/__tests__/utils/jsonUtils.test.ts +131 -0
- package/src/__tests__/utils/mmkvKeyManager.test.ts +205 -0
- package/src/__tests__/utils/mnemonicUtils.test.ts +48 -0
- package/src/__tests__/utils/raceConditions.test.ts +292 -0
- package/src/__tests__/utils/result.test.ts +73 -0
- package/src/__tests__/utils/schemas.test.ts +82 -0
- package/src/__tests__/utils/storeHelpers.test.ts +323 -0
- package/src/__tests__/utils/typeGuards.test.ts +209 -0
- package/src/__tests__/utils/validation.test.ts +152 -0
- package/src/__tests__/utils/walletUtils.test.ts +195 -0
- package/src/hooks/useBalance.ts +597 -0
- package/src/hooks/useWallet.ts +288 -0
- package/src/hooks/useWalletManager.ts +654 -0
- package/src/hooks/useWdkApp.ts +78 -0
- package/src/hooks/useWorklet.ts +109 -0
- package/src/index.ts +112 -0
- package/src/provider/WdkAppProvider.tsx +764 -0
- package/src/services/accountService.ts +134 -0
- package/src/services/addressService.ts +125 -0
- package/src/services/balanceService.ts +291 -0
- package/src/services/walletSetupService.ts +695 -0
- package/src/services/walletSwitchingService.ts +157 -0
- package/src/services/workletLifecycleService.ts +561 -0
- package/src/storage/mmkvStorage.ts +417 -0
- package/src/store/walletStore.ts +301 -0
- package/src/store/workletStore.ts +340 -0
- package/src/types/hrpc.ts +78 -0
- package/src/types.ts +188 -0
- package/src/utils/balanceUtils.ts +96 -0
- package/src/utils/constants.ts +84 -0
- package/src/utils/errorHandling.md +163 -0
- package/src/utils/errorHandling.ts +61 -0
- package/src/utils/errorUtils.ts +300 -0
- package/src/utils/initializationState.ts +242 -0
- package/src/utils/jsonUtils.ts +75 -0
- package/src/utils/logger.ts +54 -0
- package/src/utils/mmkvKeyManager.ts +256 -0
- package/src/utils/mnemonicUtils.ts +35 -0
- package/src/utils/operationMutex.ts +181 -0
- package/src/utils/result.ts +57 -0
- package/src/utils/schemas.ts +190 -0
- package/src/utils/storeHelpers.ts +236 -0
- package/src/utils/typeGuards.ts +129 -0
- package/src/utils/validation.ts +174 -0
- package/src/utils/walletStateHelpers.ts +104 -0
- 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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAoB7E;;GAEG;AACH,SAAS,cAAc,CAAC,IAAU;IAChC,OAAO,SAAS,IAAI,IAAI,IAAI,OAAQ,IAAgC,CAAC,OAAO,KAAK,UAAU,CAAA;AAC7F,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAgB;IACzC,MAAM,CAAC,GAAG,OAA6C,CAAA;IACvD,OAAO,CACL,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC;QACjC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC;QACjC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAC/B,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAClC;;;OAGG;IACK,MAAM,CAAC,KAAK,CAAC,eAAe,CAClC,QAA+B,EAC/B,cAAwB;QAExB,IAAI,CAAC,QAAQ;YAAE,OAAM;QAErB,MAAM,CAAC,GAAG,QAA8C,CAAA;QACxD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAA;QACrE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAO,CAAC,CAAC,MAAM,CAAgC,EAAE,CAAA;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,iBAAiB,MAAM,eAAe,EAAE,KAAK,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAC1C,IAAiB,EACjB,OAAuB;QAEvB,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;YAE7C,gEAAgE;YAChE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAA;YACtD,iCAAiC;QACnC,CAAC;IACH,CAAC;IACD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,cAA8B;QAE9B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,4CAA4C,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QAED,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,GAAG,CAAC,yBAAyB,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC;gBACb,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;YAEF,sCAAsC;YACtC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YACzE,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;YACnE,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;YAE7B,mDAAmD;YACnD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAI,UAAmC,CAAC,MAAM,CAAA;YAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;YAClE,CAAC;YAED,wFAAwF;YACxF,CAAC;YAAC,OAAO,CAAC,KAAiD,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;YAE1F,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;YAEvB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;YACnD,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;YAElC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;gBAC7C,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;aACvC,CAAC,CAAA;YAEF,KAAK,CAAC,QAAQ,CAAC;gBACb,OAAO;gBACP,IAAI,EAAE,YAAY;gBAClB,GAAG,EAAE,GAAG;gBACR,gBAAgB,EAAE,IAAI;gBACtB,SAAS,EAAE,KAAK;gBAChB,cAAc;gBACd,kBAAkB,EAAE,MAAM;gBAC1B,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,0BAA0B,CAC7B,KAAK,EACL,cAAc,EACd,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACpB,KAAK,EAAE,eAAe,CAAC,OAAO;gBAC9B,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,IAAI;gBACT,gBAAgB,EAAE,KAAK;aACxB,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAC/B,cAA+B,EAC/B,OAAiC;QAEjC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAM,CAAC,kBAAkB;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAA;QAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,OAAyD;QAEzD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QAED,IACE,KAAK,CAAC,aAAa;YACnB,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa;YAC7C,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,EAC7C,CAAC;YACD,GAAG,CAAC,sDAAsD,CAAC,CAAA;YAC3D,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC;gBACb,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;YAEF,sEAAsE;YACtE,qFAAqF;YACrF,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;gBAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,IAAI,EAAE,CAAC;aAC1D,CAAC,CAAA;YAEF,0BAA0B;YAC1B,6BAA6B;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;YAEvD,KAAK,CAAC,QAAQ,CAAC;gBACb,aAAa,EAAE,IAAI;gBACnB,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,aAAa;gBACb,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,0BAA0B,CAC7B,KAAK,EACL,eAAe,EACf,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBACpB,KAAK,EAAE,eAAe,CAAC,OAAO;gBAC9B,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,KAAK;aACrB,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,yBAAyB,CACpC,YAAqB,2BAA2B;QAMhD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC;YACH,sEAAsE;YACtE,wDAAwD;YACxD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC;gBAC1D,SAAS;aACV,CAAC,CAAA;YAEF,OAAO;gBACL,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;aACtD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,2BAA2B,EAAE,4BAA4B,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACjC,gBAAwB,EACxB,aAAqB;QAIrB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QAED,IAAI,CAAC;YACH,sEAAsE;YACtE,wDAAwD;YACxD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAEtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC;gBACvD,gBAAgB;gBAChB,aAAa;aACd,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,6BAA6B,CACxC,QAAgB;QAMhB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE9B,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;QAC1F,CAAC;QAED,IAAI,CAAC;YACH,sEAAsE;YACtE,wDAAwD;YACxD,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,6BAA6B,CAAC;gBAC9D,QAAQ;aACT,CAAC,CAAA;YAEF,OAAO;gBACL,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;aACtD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CACtB,KAAK,EACL,+BAA+B,EAC/B,8CAA8C,CAC/C,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAC5B,OAIC;QAED,oEAAoE;QACpE,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC/C,MAAM,IAAI,CAAC,aAAa,CAAC;YACvB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,mBAAmB,CAChC,KAAc,EACd,SAAiB,EACjB,kBAA0B;QAE1B,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;YACnD,SAAS,EAAE,yBAAyB;YACpC,SAAS;SACV,CAAC,CAAA;QACF,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAA;QAC/D,MAAM,IAAI,KAAK,CAAC,GAAG,kBAAkB,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC,CAAA;IACtE,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,0BAA0B,CACvC,KAAc,EACd,SAAiB,EACjB,WAA8D;QAE9D,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;YACnD,SAAS,EAAE,yBAAyB;YACpC,SAAS;SACV,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAA;QAC5C,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAA;QAC/D,MAAM,eAAe,CAAA;IACvB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,oBAAoB,CAAC,MAAe;QACjD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAI,MAA+B,CAAC,MAAM,CAAA;YACtD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAA;YACnC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,WAAW;QACxB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;QACtC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;QAEpC,YAAY,CAAC,QAAQ,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,gBAAgB,EAAE,KAAK;YACvB,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;YACpB,kBAAkB,EAAE,IAAI;YACxB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QACF,WAAW,CAAC,QAAQ,CAAC;YACnB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,EAAE;YACZ,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,EAAE;SACtB,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO;QAClB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;QACtC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;QAEpC,gEAAgE;QAChE,6DAA6D;QAC7D,YAAY,CAAC,QAAQ,CAAC;YACpB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,oCAAoC;QACpC,WAAW,CAAC,QAAQ,CAAC;YACnB,SAAS,EAAE,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK;QACV,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;QACtC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;QAEpC,gEAAgE;QAChE,6DAA6D;QAC7D,YAAY,CAAC,QAAQ,CAAC;YACpB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,oCAAoC;QACpC,WAAW,CAAC,QAAQ,CAAC;YACnB,SAAS,EAAE,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU;QACf,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;QAC/B,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa;QAClB,OAAO,oBAAoB,EAAE,CAAA;IAC/B,CAAC;CACF"}
|
|
@@ -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;
|