@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,535 @@
|
|
|
1
|
+
import { getWorkletStore, getCachedCredentials, setCachedCredentials, clearCredentialsCache as clearWorkletCredentialsCache } from '../store/workletStore';
|
|
2
|
+
import { WorkletLifecycleService } from './workletLifecycleService';
|
|
3
|
+
import { DEFAULT_MNEMONIC_WORD_COUNT } from '../utils/constants';
|
|
4
|
+
import { log, logError } from '../utils/logger';
|
|
5
|
+
/**
|
|
6
|
+
* Wallet setup service
|
|
7
|
+
* Handles creating new wallets and loading existing wallets with biometric authentication
|
|
8
|
+
* Caches credentials in ephemeral memory to avoid repeated biometric prompts
|
|
9
|
+
*
|
|
10
|
+
* ## Biometric Authentication Lifecycle
|
|
11
|
+
*
|
|
12
|
+
* ### When Biometric Authentication is Required
|
|
13
|
+
*
|
|
14
|
+
* 1. **Creating a new wallet** (`createNewWallet`)
|
|
15
|
+
* - Always requires biometric authentication before wallet creation
|
|
16
|
+
* - Ensures only authorized users can create wallets
|
|
17
|
+
* - Credentials are cached after successful authentication
|
|
18
|
+
*
|
|
19
|
+
* 2. **Loading existing wallet** (`loadExistingWallet`)
|
|
20
|
+
* - Requires biometric authentication if credentials are not cached
|
|
21
|
+
* - If credentials are in cache, authentication is skipped (better UX)
|
|
22
|
+
* - Cache is checked first before prompting for biometrics
|
|
23
|
+
*
|
|
24
|
+
* 3. **Importing wallet from mnemonic** (`initializeFromMnemonic`)
|
|
25
|
+
* - Always requires biometric authentication before import
|
|
26
|
+
* - Ensures only authorized users can import wallets
|
|
27
|
+
* - Credentials are cached after successful authentication
|
|
28
|
+
*
|
|
29
|
+
* ### Credential Caching Behavior
|
|
30
|
+
*
|
|
31
|
+
* - **Cache Location**: Ephemeral memory only (Map<string, CachedCredentials>)
|
|
32
|
+
* - Cache is keyed by `identifier` (user email/ID) for multi-wallet support
|
|
33
|
+
* - Cache persists for the lifetime of the app session
|
|
34
|
+
* - Cache is cleared when app is terminated (not persisted to disk)
|
|
35
|
+
*
|
|
36
|
+
* - **Cache Contents**:
|
|
37
|
+
* - `encryptionKey`: Cached after first retrieval (most sensitive, requires biometrics)
|
|
38
|
+
* - `encryptedSeed`: Cached after first retrieval
|
|
39
|
+
* - `encryptedEntropy`: Cached after first retrieval
|
|
40
|
+
*
|
|
41
|
+
* - **Cache Benefits**:
|
|
42
|
+
* - Avoids repeated biometric prompts during the same app session
|
|
43
|
+
* - Improves UX for operations that need credentials multiple times
|
|
44
|
+
* - Reduces security surface (fewer biometric prompts = fewer attack vectors)
|
|
45
|
+
*
|
|
46
|
+
* ### When Cache is Cleared
|
|
47
|
+
*
|
|
48
|
+
* Cache is automatically cleared in the following scenarios:
|
|
49
|
+
*
|
|
50
|
+
* 1. **Explicit cache clearing** (`clearCredentialsCache`)
|
|
51
|
+
* - Called when wallet data is corrupted or invalid
|
|
52
|
+
* - Called during wallet deletion
|
|
53
|
+
* - Can be called manually for security (e.g., on logout)
|
|
54
|
+
*
|
|
55
|
+
* 2. **App termination**
|
|
56
|
+
* - Cache is in-memory only, so it's cleared when app closes
|
|
57
|
+
* - Next app launch will require biometric authentication again
|
|
58
|
+
*
|
|
59
|
+
* 3. **Wallet deletion** (`deleteWallet`)
|
|
60
|
+
* - Cache for the deleted wallet identifier is cleared
|
|
61
|
+
* - Other wallet caches remain intact
|
|
62
|
+
*
|
|
63
|
+
* ### Security Considerations
|
|
64
|
+
*
|
|
65
|
+
* - **Cache Lifetime**: Ephemeral (in-memory only, cleared on app termination)
|
|
66
|
+
* - **Cache Scope**: Per-identifier (multi-wallet support)
|
|
67
|
+
* - **Cache Invalidation**: Manual via `clearCredentialsCache()` or automatic on app termination
|
|
68
|
+
* - **Biometric Prompt Frequency**:
|
|
69
|
+
* - First access per app session: Always required
|
|
70
|
+
* - Subsequent accesses in same session: Cached (no prompt)
|
|
71
|
+
* - After app restart: Always required again
|
|
72
|
+
*
|
|
73
|
+
* ### Best Practices
|
|
74
|
+
*
|
|
75
|
+
* 1. **Clear cache on logout**: Call `clearCredentialsCache(identifier)` when user logs out
|
|
76
|
+
* 2. **Clear cache on errors**: Clear cache if decryption fails (may indicate corrupted data)
|
|
77
|
+
* 3. **Don't persist cache**: Cache is intentionally in-memory only for security
|
|
78
|
+
* 4. **Handle cache misses**: Always handle the case where cache is empty (will prompt for biometrics)
|
|
79
|
+
*
|
|
80
|
+
* ### Example Usage
|
|
81
|
+
*
|
|
82
|
+
* ```typescript
|
|
83
|
+
* // Create new wallet (always requires biometrics)
|
|
84
|
+
* await WalletSetupService.createNewWallet(networkConfigs, walletId)
|
|
85
|
+
*
|
|
86
|
+
* // Load existing wallet (biometrics only if not cached)
|
|
87
|
+
* const credentials = await WalletSetupService.loadExistingWallet(walletId)
|
|
88
|
+
*
|
|
89
|
+
* // Clear cache (e.g., on logout)
|
|
90
|
+
* WalletSetupService.clearCredentialsCache(walletId)
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export class WalletSetupService {
|
|
94
|
+
/**
|
|
95
|
+
* Set the secureStorage singleton instance
|
|
96
|
+
* Called by WdkAppProvider during initialization
|
|
97
|
+
* Also exposed publicly for testing purposes
|
|
98
|
+
*
|
|
99
|
+
* @param secureStorage - SecureStorage instance to use
|
|
100
|
+
* @param allowOverwrite - If false, warns when overwriting existing instance (default: true)
|
|
101
|
+
*/
|
|
102
|
+
static setSecureStorage(secureStorage, allowOverwrite = true) {
|
|
103
|
+
if (this.secureStorageInstance && !allowOverwrite) {
|
|
104
|
+
log('⚠️ SecureStorage already set. This may indicate multiple WdkAppProviders are mounted.', {
|
|
105
|
+
hasExisting: !!this.secureStorageInstance
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else if (this.secureStorageInstance) {
|
|
109
|
+
log('⚠️ SecureStorage being overwritten. This may indicate multiple WdkAppProviders are mounted.');
|
|
110
|
+
}
|
|
111
|
+
this.secureStorageInstance = secureStorage;
|
|
112
|
+
log('✅ SecureStorage singleton set in WalletSetupService');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get the secureStorage singleton instance
|
|
116
|
+
* Throws error if not initialized (should only happen if called before WdkAppProvider mounts)
|
|
117
|
+
*/
|
|
118
|
+
static getSecureStorage() {
|
|
119
|
+
if (!this.secureStorageInstance) {
|
|
120
|
+
throw new Error('SecureStorage not initialized. Ensure WdkAppProvider is mounted.');
|
|
121
|
+
}
|
|
122
|
+
return this.secureStorageInstance;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if secureStorage is initialized
|
|
126
|
+
* Useful for testing or debugging
|
|
127
|
+
*/
|
|
128
|
+
static isSecureStorageInitialized() {
|
|
129
|
+
return this.secureStorageInstance !== null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get cache key for walletId
|
|
133
|
+
*/
|
|
134
|
+
static getCacheKey(walletId) {
|
|
135
|
+
return walletId || 'default';
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Cache credentials after retrieval
|
|
139
|
+
*/
|
|
140
|
+
static cacheCredentials(walletId, encryptionKey, encryptedSeed, encryptedEntropy) {
|
|
141
|
+
const cacheKey = this.getCacheKey(walletId);
|
|
142
|
+
const existing = getCachedCredentials(cacheKey) || {};
|
|
143
|
+
// Use workletStore functions for all credential caching
|
|
144
|
+
setCachedCredentials(cacheKey, {
|
|
145
|
+
...existing,
|
|
146
|
+
...(encryptionKey && { encryptionKey }),
|
|
147
|
+
...(encryptedSeed && { encryptedSeed }),
|
|
148
|
+
...(encryptedEntropy && { encryptedEntropy }),
|
|
149
|
+
});
|
|
150
|
+
log('Credentials cached', { hasWalletId: !!walletId });
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Generic helper to retrieve a credential value (checks cache first, then secureStorage)
|
|
154
|
+
*/
|
|
155
|
+
static async getCredential(walletId, credentialType, fetchFn, cacheKey) {
|
|
156
|
+
const secureStorage = this.getSecureStorage();
|
|
157
|
+
const cacheKeyStr = this.getCacheKey(walletId);
|
|
158
|
+
const cached = getCachedCredentials(cacheKeyStr);
|
|
159
|
+
if (cached?.[cacheKey]) {
|
|
160
|
+
const logMessage = credentialType === 'encryptionKey'
|
|
161
|
+
? '✅ Encryption key retrieved from cache (no biometrics needed)'
|
|
162
|
+
: `✅ ${credentialType} retrieved from cache`;
|
|
163
|
+
log(logMessage);
|
|
164
|
+
return cached[cacheKey];
|
|
165
|
+
}
|
|
166
|
+
if (credentialType === 'encryptionKey') {
|
|
167
|
+
log('Encryption key not in cache, fetching from secureStorage...');
|
|
168
|
+
}
|
|
169
|
+
const value = await fetchFn(walletId);
|
|
170
|
+
if (value) {
|
|
171
|
+
// Cache it for future use
|
|
172
|
+
if (credentialType === 'encryptionKey') {
|
|
173
|
+
this.cacheCredentials(walletId, value);
|
|
174
|
+
}
|
|
175
|
+
else if (credentialType === 'encryptedSeed') {
|
|
176
|
+
this.cacheCredentials(walletId, undefined, value);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.cacheCredentials(walletId, undefined, undefined, value);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Validate that encrypted data can be decrypted with the encryption key
|
|
186
|
+
* Attempts to initialize WDK with the provided credentials to verify compatibility
|
|
187
|
+
*
|
|
188
|
+
* @param networkConfigs - Network configurations for worklet
|
|
189
|
+
* @param encryptionKey - Encryption key to test
|
|
190
|
+
* @param encryptedSeed - Encrypted seed to test
|
|
191
|
+
* @param encryptedEntropy - Optional encrypted entropy to test
|
|
192
|
+
* @throws Error if validation fails (decryption fails)
|
|
193
|
+
*/
|
|
194
|
+
static async validateEncryptionCompatibility(networkConfigs, encryptionKey, encryptedSeed, encryptedEntropy) {
|
|
195
|
+
const store = getWorkletStore();
|
|
196
|
+
// Ensure worklet is started
|
|
197
|
+
if (!store.getState().isWorkletStarted) {
|
|
198
|
+
await WorkletLifecycleService.startWorklet(networkConfigs);
|
|
199
|
+
}
|
|
200
|
+
const wasInitialized = store.getState().isInitialized;
|
|
201
|
+
const previousEncryptionKey = store.getState().encryptionKey;
|
|
202
|
+
const previousEncryptedSeed = store.getState().encryptedSeed;
|
|
203
|
+
try {
|
|
204
|
+
// Attempt to initialize WDK with the credentials
|
|
205
|
+
// This will fail if the encryption key cannot decrypt the seed
|
|
206
|
+
await WorkletLifecycleService.initializeWDK({
|
|
207
|
+
encryptionKey,
|
|
208
|
+
encryptedSeed,
|
|
209
|
+
});
|
|
210
|
+
log('✅ Encryption compatibility validation passed');
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
214
|
+
const isDecryptionError = errorMessage.toLowerCase().includes('decryption failed') ||
|
|
215
|
+
errorMessage.toLowerCase().includes('failed to decrypt');
|
|
216
|
+
if (isDecryptionError) {
|
|
217
|
+
log('❌ Encryption compatibility validation failed - decryption error detected');
|
|
218
|
+
throw new Error(`Failed to validate encryption compatibility: The encryption key cannot decrypt the encrypted seed. ` +
|
|
219
|
+
`This indicates corrupted or mismatched wallet data. Error: ${errorMessage}`);
|
|
220
|
+
}
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
// Restore previous state if wallet was already initialized
|
|
225
|
+
// Only restore if we're not overwriting with the same credentials
|
|
226
|
+
if (wasInitialized &&
|
|
227
|
+
(previousEncryptionKey !== encryptionKey || previousEncryptedSeed !== encryptedSeed)) {
|
|
228
|
+
try {
|
|
229
|
+
if (previousEncryptionKey && previousEncryptedSeed) {
|
|
230
|
+
await WorkletLifecycleService.initializeWDK({
|
|
231
|
+
encryptionKey: previousEncryptionKey,
|
|
232
|
+
encryptedSeed: previousEncryptedSeed,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
WorkletLifecycleService.reset();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (restoreError) {
|
|
240
|
+
log('⚠️ Failed to restore previous wallet state after validation, resetting', restoreError);
|
|
241
|
+
WorkletLifecycleService.reset();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create a new wallet
|
|
248
|
+
* Generates entropy, encrypts it, and stores credentials securely
|
|
249
|
+
* Requires biometric authentication to ensure authorized wallet creation
|
|
250
|
+
*/
|
|
251
|
+
static async createNewWallet(networkConfigs, walletId) {
|
|
252
|
+
const store = getWorkletStore();
|
|
253
|
+
const secureStorage = this.getSecureStorage();
|
|
254
|
+
// Step 1: Require biometric authentication before creating wallet
|
|
255
|
+
log('🔐 Creating new wallet - biometric authentication required...');
|
|
256
|
+
try {
|
|
257
|
+
const authenticated = await secureStorage.authenticate();
|
|
258
|
+
if (!authenticated) {
|
|
259
|
+
throw new Error('Biometric authentication required to create wallet');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
// Re-throw authentication errors so they can be properly handled by the UI
|
|
264
|
+
// This includes AuthenticationError from secure storage
|
|
265
|
+
log('❌ Biometric authentication failed', error);
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
268
|
+
// Step 2: Start worklet
|
|
269
|
+
if (!store.getState().isWorkletStarted) {
|
|
270
|
+
await WorkletLifecycleService.startWorklet(networkConfigs);
|
|
271
|
+
}
|
|
272
|
+
// Step 3: Generate entropy and encrypt
|
|
273
|
+
const result = await WorkletLifecycleService.generateEntropyAndEncrypt(DEFAULT_MNEMONIC_WORD_COUNT);
|
|
274
|
+
// Step 4: Validate encryption compatibility before saving to keychain
|
|
275
|
+
log('🔍 Validating encryption compatibility before saving to keychain...');
|
|
276
|
+
try {
|
|
277
|
+
await this.validateEncryptionCompatibility(networkConfigs, result.encryptionKey, result.encryptedSeedBuffer, result.encryptedEntropyBuffer);
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
log('❌ Encryption validation failed - aborting wallet creation', error);
|
|
281
|
+
// Reset worklet state on validation failure
|
|
282
|
+
WorkletLifecycleService.reset();
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
// Step 5: Store credentials securely with walletId for multi-wallet support
|
|
286
|
+
try {
|
|
287
|
+
await secureStorage.setEncryptionKey(result.encryptionKey, walletId);
|
|
288
|
+
await secureStorage.setEncryptedSeed(result.encryptedSeedBuffer, walletId);
|
|
289
|
+
await secureStorage.setEncryptedEntropy(result.encryptedEntropyBuffer, walletId);
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
// Clean up any partial writes (deleteWallet is idempotent)
|
|
293
|
+
try {
|
|
294
|
+
await secureStorage.deleteWallet(walletId);
|
|
295
|
+
log('[WalletSetupService] Cleaned up partial wallet creation after storage failure');
|
|
296
|
+
}
|
|
297
|
+
catch (cleanupError) {
|
|
298
|
+
logError('[WalletSetupService] Failed to cleanup partial wallet creation:', cleanupError);
|
|
299
|
+
}
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
this.cacheCredentials(walletId, result.encryptionKey, result.encryptedSeedBuffer, result.encryptedEntropyBuffer);
|
|
303
|
+
log('✅ New wallet created and stored securely');
|
|
304
|
+
return {
|
|
305
|
+
encryptionKey: result.encryptionKey,
|
|
306
|
+
encryptedSeed: result.encryptedSeedBuffer,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Load existing wallet from secure storage
|
|
311
|
+
* Checks cache first, only requires biometric authentication if not cached
|
|
312
|
+
*/
|
|
313
|
+
static async loadExistingWallet(walletId) {
|
|
314
|
+
const secureStorage = this.getSecureStorage();
|
|
315
|
+
const cacheKey = this.getCacheKey(walletId);
|
|
316
|
+
const cached = getCachedCredentials(cacheKey);
|
|
317
|
+
// Check if all required credentials are cached
|
|
318
|
+
if (cached?.encryptionKey && cached?.encryptedSeed) {
|
|
319
|
+
log('✅ Wallet loaded from cache (no biometrics needed)');
|
|
320
|
+
return {
|
|
321
|
+
encryptionKey: cached.encryptionKey,
|
|
322
|
+
encryptedSeed: cached.encryptedSeed,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
log('🔓 Loading existing wallet - biometric authentication required...');
|
|
326
|
+
// Get encrypted seed first (doesn't require biometrics)
|
|
327
|
+
const encryptedSeed = await secureStorage.getEncryptedSeed(walletId);
|
|
328
|
+
// Try to get encryption key from cache first
|
|
329
|
+
let encryptionKey = cached?.encryptionKey;
|
|
330
|
+
// If not in cache, get from secureStorage (will trigger biometrics)
|
|
331
|
+
if (!encryptionKey) {
|
|
332
|
+
log('Encryption key not in cache, fetching from secureStorage...');
|
|
333
|
+
try {
|
|
334
|
+
const allEncrypted = await secureStorage.getAllEncrypted(walletId);
|
|
335
|
+
encryptionKey = allEncrypted.encryptionKey || undefined;
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
throw error;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
log('Using cached encryption key (no biometrics needed)');
|
|
343
|
+
}
|
|
344
|
+
if (!encryptionKey) {
|
|
345
|
+
throw new Error('Encryption key not found. Authentication may have failed or wallet does not exist.');
|
|
346
|
+
}
|
|
347
|
+
if (!encryptedSeed) {
|
|
348
|
+
throw new Error('Encrypted seed not found. Authentication may have failed or wallet does not exist.');
|
|
349
|
+
}
|
|
350
|
+
// Cache credentials for future use
|
|
351
|
+
this.cacheCredentials(walletId, encryptionKey, encryptedSeed);
|
|
352
|
+
log('✅ Wallet loaded successfully from secure storage');
|
|
353
|
+
return {
|
|
354
|
+
encryptionKey,
|
|
355
|
+
encryptedSeed,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Check if a wallet exists
|
|
360
|
+
*/
|
|
361
|
+
static async hasWallet(walletId) {
|
|
362
|
+
const secureStorage = this.getSecureStorage();
|
|
363
|
+
const result = await secureStorage.hasWallet(walletId);
|
|
364
|
+
return result;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Initialize WDK from an existing mnemonic phrase
|
|
368
|
+
* Converts mnemonic to encrypted seed and entropy, stores them securely, and initializes WDK
|
|
369
|
+
* Requires biometric authentication to ensure authorized wallet import
|
|
370
|
+
*/
|
|
371
|
+
static async initializeFromMnemonic(networkConfigs, mnemonic, walletId) {
|
|
372
|
+
const store = getWorkletStore();
|
|
373
|
+
const secureStorage = this.getSecureStorage();
|
|
374
|
+
// Step 1: Require biometric authentication before importing wallet
|
|
375
|
+
log('🔐 Importing wallet from mnemonic - biometric authentication required...');
|
|
376
|
+
try {
|
|
377
|
+
const authenticated = await secureStorage.authenticate();
|
|
378
|
+
if (!authenticated) {
|
|
379
|
+
throw new Error('Biometric authentication required to import wallet');
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
// Re-throw authentication errors so they can be properly handled by the UI
|
|
384
|
+
// This includes AuthenticationError from secure storage
|
|
385
|
+
log('❌ Biometric authentication failed', error);
|
|
386
|
+
throw error;
|
|
387
|
+
}
|
|
388
|
+
// Step 2: Start worklet
|
|
389
|
+
if (!store.getState().isWorkletStarted) {
|
|
390
|
+
await WorkletLifecycleService.startWorklet(networkConfigs);
|
|
391
|
+
}
|
|
392
|
+
// Step 3: Get seed and entropy from mnemonic
|
|
393
|
+
const result = await WorkletLifecycleService.getSeedAndEntropyFromMnemonic(mnemonic);
|
|
394
|
+
// Step 4: Validate encryption compatibility before saving to keychain
|
|
395
|
+
log('🔍 Validating encryption compatibility before saving to keychain...');
|
|
396
|
+
try {
|
|
397
|
+
await this.validateEncryptionCompatibility(networkConfigs, result.encryptionKey, result.encryptedSeedBuffer, result.encryptedEntropyBuffer);
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
log('❌ Encryption validation failed - aborting wallet import', error);
|
|
401
|
+
// Reset worklet state on validation failure
|
|
402
|
+
WorkletLifecycleService.reset();
|
|
403
|
+
throw error;
|
|
404
|
+
}
|
|
405
|
+
// Step 5: Store credentials securely with walletId for multi-wallet support
|
|
406
|
+
try {
|
|
407
|
+
await secureStorage.setEncryptionKey(result.encryptionKey, walletId);
|
|
408
|
+
await secureStorage.setEncryptedSeed(result.encryptedSeedBuffer, walletId);
|
|
409
|
+
await secureStorage.setEncryptedEntropy(result.encryptedEntropyBuffer, walletId);
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
// Clean up any partial writes (deleteWallet is idempotent)
|
|
413
|
+
try {
|
|
414
|
+
await secureStorage.deleteWallet(walletId);
|
|
415
|
+
log('[WalletSetupService] Cleaned up partial wallet import after storage failure');
|
|
416
|
+
}
|
|
417
|
+
catch (cleanupError) {
|
|
418
|
+
logError('[WalletSetupService] Failed to cleanup partial wallet import:', cleanupError);
|
|
419
|
+
}
|
|
420
|
+
throw error;
|
|
421
|
+
}
|
|
422
|
+
this.cacheCredentials(walletId, result.encryptionKey, result.encryptedSeedBuffer, result.encryptedEntropyBuffer);
|
|
423
|
+
// Step 6: Initialize WDK with the credentials
|
|
424
|
+
await WorkletLifecycleService.initializeWDK({
|
|
425
|
+
encryptionKey: result.encryptionKey,
|
|
426
|
+
encryptedSeed: result.encryptedSeedBuffer,
|
|
427
|
+
});
|
|
428
|
+
log('✅ Wallet imported from mnemonic and stored securely');
|
|
429
|
+
return {
|
|
430
|
+
encryptionKey: result.encryptionKey,
|
|
431
|
+
encryptedSeed: result.encryptedSeedBuffer,
|
|
432
|
+
encryptedEntropy: result.encryptedEntropyBuffer,
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Initialize WDK with wallet credentials
|
|
437
|
+
*/
|
|
438
|
+
static async initializeWDK(networkConfigs, credentials) {
|
|
439
|
+
const store = getWorkletStore();
|
|
440
|
+
// Ensure worklet is started
|
|
441
|
+
if (!store.getState().isWorkletStarted) {
|
|
442
|
+
log('Starting worklet...');
|
|
443
|
+
await WorkletLifecycleService.startWorklet(networkConfigs);
|
|
444
|
+
log('Worklet started');
|
|
445
|
+
}
|
|
446
|
+
// Initialize WDK
|
|
447
|
+
await WorkletLifecycleService.initializeWDK(credentials);
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Complete wallet initialization flow
|
|
451
|
+
* Either creates a new wallet or loads an existing one
|
|
452
|
+
*/
|
|
453
|
+
static async initializeWallet(networkConfigs, options) {
|
|
454
|
+
// Remove the early return check - WorkletLifecycleService.initializeWDK() will handle
|
|
455
|
+
// checking if credentials match (it already has the correct logic to skip if same credentials)
|
|
456
|
+
let credentials;
|
|
457
|
+
if (options.createNew) {
|
|
458
|
+
credentials = await this.createNewWallet(networkConfigs, options.walletId);
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
credentials = await this.loadExistingWallet(options.walletId);
|
|
462
|
+
}
|
|
463
|
+
// Initialize WDK with credentials
|
|
464
|
+
await this.initializeWDK(networkConfigs, credentials);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Delete wallet and clear all data
|
|
468
|
+
*
|
|
469
|
+
* @param identifier - Optional identifier for multi-wallet support. If provided, deletes wallet for that identifier.
|
|
470
|
+
* If not provided, deletes the default wallet.
|
|
471
|
+
*/
|
|
472
|
+
static async deleteWallet(walletId) {
|
|
473
|
+
const secureStorage = this.getSecureStorage();
|
|
474
|
+
// Clear secure storage for the specified walletId
|
|
475
|
+
await secureStorage.deleteWallet(walletId);
|
|
476
|
+
// Reset store state
|
|
477
|
+
WorkletLifecycleService.reset();
|
|
478
|
+
// Clear credentials cache
|
|
479
|
+
this.clearCredentialsCache(walletId);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Get encryption key (checks cache first, then secureStorage with biometrics)
|
|
483
|
+
*/
|
|
484
|
+
static async getEncryptionKey(walletId) {
|
|
485
|
+
const secureStorage = this.getSecureStorage();
|
|
486
|
+
return this.getCredential(walletId, 'encryptionKey', async (id) => {
|
|
487
|
+
const allEncrypted = await secureStorage.getAllEncrypted(id);
|
|
488
|
+
return allEncrypted.encryptionKey || null;
|
|
489
|
+
}, 'encryptionKey');
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Get encrypted seed (checks cache first, then secureStorage)
|
|
493
|
+
*/
|
|
494
|
+
static async getEncryptedSeed(walletId) {
|
|
495
|
+
const secureStorage = this.getSecureStorage();
|
|
496
|
+
return this.getCredential(walletId, 'encryptedSeed', (id) => secureStorage.getEncryptedSeed(id), 'encryptedSeed');
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Get encrypted entropy (checks cache first, then secureStorage)
|
|
500
|
+
*/
|
|
501
|
+
static async getEncryptedEntropy(walletId) {
|
|
502
|
+
const secureStorage = this.getSecureStorage();
|
|
503
|
+
return this.getCredential(walletId, 'encryptedEntropy', (id) => secureStorage.getEncryptedEntropy(id), 'encryptedEntropy');
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get mnemonic phrase from wallet
|
|
507
|
+
* Retrieves encrypted entropy and encryption key, then decrypts to get mnemonic
|
|
508
|
+
*
|
|
509
|
+
* @param walletId - Optional walletId for multi-wallet support
|
|
510
|
+
* @returns Promise<string | null> - The mnemonic phrase or null if not found
|
|
511
|
+
*/
|
|
512
|
+
static async getMnemonic(walletId) {
|
|
513
|
+
const encryptedEntropy = await this.getEncryptedEntropy(walletId);
|
|
514
|
+
const encryptionKey = await this.getEncryptionKey(walletId);
|
|
515
|
+
if (!encryptedEntropy || !encryptionKey) {
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
const result = await WorkletLifecycleService.getMnemonicFromEntropy(encryptedEntropy, encryptionKey);
|
|
519
|
+
return result.mnemonic || null;
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Clear all cached credentials
|
|
523
|
+
* Should be called on logout or app background for security
|
|
524
|
+
*/
|
|
525
|
+
static clearCredentialsCache(walletId) {
|
|
526
|
+
clearWorkletCredentialsCache(walletId ? this.getCacheKey(walletId) : undefined);
|
|
527
|
+
log('Credentials cache cleared', { walletId });
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* SecureStorage singleton instance
|
|
532
|
+
* Set by WdkAppProvider during initialization
|
|
533
|
+
*/
|
|
534
|
+
WalletSetupService.secureStorageInstance = null;
|
|
535
|
+
//# sourceMappingURL=walletSetupService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletSetupService.js","sourceRoot":"","sources":["../../src/services/walletSetupService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Switching Service
|
|
3
|
+
*
|
|
4
|
+
* Handles wallet switching operations: checking wallet existence, loading credentials,
|
|
5
|
+
* and initializing WDK with the new wallet.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - This service is the single source of truth for wallet switching logic
|
|
9
|
+
* - Used by useWallet hook for automatic wallet switching
|
|
10
|
+
* - Can be used by other components that need to switch wallets programmatically
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Wallet Switching Service
|
|
14
|
+
*
|
|
15
|
+
* Provides methods for switching between wallets.
|
|
16
|
+
*/
|
|
17
|
+
export declare class WalletSwitchingService {
|
|
18
|
+
/**
|
|
19
|
+
* Switch to a wallet by identifier
|
|
20
|
+
*
|
|
21
|
+
* This method:
|
|
22
|
+
* 1. Checks if the wallet exists (fail fast)
|
|
23
|
+
* 2. Ensures worklet is started
|
|
24
|
+
* 3. Loads credentials for the wallet
|
|
25
|
+
* 4. Initializes WDK with the credentials
|
|
26
|
+
* 5. Updates activeWalletId in the store
|
|
27
|
+
*
|
|
28
|
+
* @param walletId - Wallet identifier to switch to
|
|
29
|
+
* @param options - Optional configuration
|
|
30
|
+
* @param options.autoStartWorklet - If true, start worklet if not started (default: false)
|
|
31
|
+
* @throws Error if wallet doesn't exist or switching fails
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* await WalletSwitchingService.switchToWallet('user@example.com')
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
static switchToWallet(walletId: string, options?: {
|
|
39
|
+
autoStartWorklet?: boolean;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if a wallet can be switched to
|
|
43
|
+
*
|
|
44
|
+
* @param walletId - Wallet identifier to check
|
|
45
|
+
* @returns Promise resolving to true if wallet exists and can be switched to
|
|
46
|
+
*/
|
|
47
|
+
static canSwitchToWallet(walletId: string): Promise<boolean>;
|
|
48
|
+
}
|