@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,558 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WdkAppProvider
|
|
3
|
+
*
|
|
4
|
+
* App-level orchestration provider that manages initialization state.
|
|
5
|
+
* Provides app-level status and initialization state via useWdkApp() hook.
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* - Manages worklet initialization state
|
|
9
|
+
* - Manages wallet initialization state
|
|
10
|
+
* - Provides combined app status (isReady, isInitializing, error)
|
|
11
|
+
* - Sets up QueryClientProvider for TanStack Query
|
|
12
|
+
* - Sets up SecureStorage
|
|
13
|
+
* - Handles AppState listeners for security
|
|
14
|
+
*
|
|
15
|
+
* Architecture:
|
|
16
|
+
* - Worklet state: Managed by workletStore (global, initialized once)
|
|
17
|
+
* - Wallet state: Managed by separate state machine (per-identifier, can load multiple)
|
|
18
|
+
* - Combined status: Derived from both worklet and wallet states
|
|
19
|
+
*/
|
|
20
|
+
import React, { createContext, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
21
|
+
import { AppState } from 'react-native';
|
|
22
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
23
|
+
import { createSecureStorage } from '@tetherto/wdk-react-native-secure-storage';
|
|
24
|
+
import { useWalletManager } from '../hooks/useWalletManager';
|
|
25
|
+
import { useWorklet } from '../hooks/useWorklet';
|
|
26
|
+
import { getWalletStore } from '../store/walletStore';
|
|
27
|
+
import { updateWalletLoadingState, getWalletIdFromLoadingState, isWalletLoadingState, isWalletErrorState, } from '../store/walletStore';
|
|
28
|
+
import { shouldResetToNotLoaded, getWalletSwitchDecision, shouldMarkWalletAsReady, shouldHandleError, } from '../utils/walletStateHelpers';
|
|
29
|
+
import { clearAllSensitiveData } from '../store/workletStore';
|
|
30
|
+
import { WalletSetupService } from '../services/walletSetupService';
|
|
31
|
+
import { WorkletLifecycleService } from '../services/workletLifecycleService';
|
|
32
|
+
import { normalizeError } from '../utils/errorUtils';
|
|
33
|
+
import { log, logError } from '../utils/logger';
|
|
34
|
+
import { validateNetworkConfigs, validateTokenConfigs } from '../utils/validation';
|
|
35
|
+
import { DEFAULT_QUERY_STALE_TIME_MS, DEFAULT_QUERY_GC_TIME_MS } from '../utils/constants';
|
|
36
|
+
import { isAppReadyStatus, isAppInProgressStatus, getCombinedStatus, getWorkletStatus } from '../utils/initializationState';
|
|
37
|
+
const WdkAppContext = createContext(null);
|
|
38
|
+
/**
|
|
39
|
+
* WdkAppProvider - Orchestrates WDK initialization flow
|
|
40
|
+
*
|
|
41
|
+
* Composes useWorklet and useWalletManager hooks into a unified initialization flow.
|
|
42
|
+
* Automatically fetches balances when wallet is ready.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Create QueryClient singleton for TanStack Query
|
|
46
|
+
* This is created once and reused across the app lifecycle
|
|
47
|
+
*/
|
|
48
|
+
const queryClient = new QueryClient({
|
|
49
|
+
defaultOptions: {
|
|
50
|
+
queries: {
|
|
51
|
+
retry: 1,
|
|
52
|
+
staleTime: DEFAULT_QUERY_STALE_TIME_MS,
|
|
53
|
+
gcTime: DEFAULT_QUERY_GC_TIME_MS,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
// Custom deep equality for walletLoadingState comparison
|
|
58
|
+
// Defined outside component to prevent recreation on every render
|
|
59
|
+
const deepEqualityFn = (a, b) => {
|
|
60
|
+
if (a === b)
|
|
61
|
+
return true;
|
|
62
|
+
if (!a || !b)
|
|
63
|
+
return false;
|
|
64
|
+
if (typeof a !== 'object' || typeof b !== 'object')
|
|
65
|
+
return a === b;
|
|
66
|
+
const keysA = Object.keys(a);
|
|
67
|
+
const keysB = Object.keys(b);
|
|
68
|
+
if (keysA.length !== keysB.length)
|
|
69
|
+
return false;
|
|
70
|
+
for (const key of keysA) {
|
|
71
|
+
if (!keysB.includes(key))
|
|
72
|
+
return false;
|
|
73
|
+
if (a[key] !== b[key])
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
};
|
|
78
|
+
export function WdkAppProvider({ networkConfigs, tokenConfigs, enableAutoInitialization = true, currentUserId, children, }) {
|
|
79
|
+
// Create secureStorage singleton and register synchronously so child effects
|
|
80
|
+
// (e.g. useWallet wallet switching) can access it on the first paint.
|
|
81
|
+
const secureStorage = useMemo(() => {
|
|
82
|
+
const storage = createSecureStorage();
|
|
83
|
+
WalletSetupService.setSecureStorage(storage);
|
|
84
|
+
return storage;
|
|
85
|
+
}, []);
|
|
86
|
+
// Clear sensitive data on mount AND when app goes to background
|
|
87
|
+
// This ensures biometrics are always required on app restart or foreground
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
// CRITICAL: Clear cache on mount to handle true app restarts (not hot reloads)
|
|
90
|
+
// When app is killed and reopened:
|
|
91
|
+
// - walletStore rehydrates with 'not_loaded' state
|
|
92
|
+
// - But in dev mode with hot reload, JS context persists and cache remains
|
|
93
|
+
// - Clearing here ensures cache is empty even in dev mode
|
|
94
|
+
log('[WdkAppProvider] Clearing credentials cache on mount (app restart)');
|
|
95
|
+
clearAllSensitiveData();
|
|
96
|
+
const appStateRef = { current: AppState.currentState };
|
|
97
|
+
const subscription = AppState.addEventListener('change', (nextAppState) => {
|
|
98
|
+
const previousState = appStateRef.current;
|
|
99
|
+
appStateRef.current = nextAppState;
|
|
100
|
+
// When going to background: clear cache and mark wallet for re-authentication
|
|
101
|
+
if ((nextAppState === 'background' || nextAppState === 'inactive') && previousState === 'active') {
|
|
102
|
+
log('[WdkAppProvider] App going to background - clearing sensitive data and marking for re-auth');
|
|
103
|
+
clearAllSensitiveData();
|
|
104
|
+
// Reset wallet state to trigger re-authentication on foreground
|
|
105
|
+
// This ensures biometrics are required when app comes back
|
|
106
|
+
// CRITICAL: Only reset if wallet is 'ready' - don't interrupt 'loading' or 'checking' states
|
|
107
|
+
// Interrupting these states would cancel biometric authentication in progress
|
|
108
|
+
const currentState = walletStore.getState();
|
|
109
|
+
const currentStateType = currentState.walletLoadingState.type;
|
|
110
|
+
if (currentStateType === 'ready' && currentState.activeWalletId) {
|
|
111
|
+
log('[WdkAppProvider] Resetting wallet state to trigger biometrics on foreground');
|
|
112
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, {
|
|
113
|
+
type: 'not_loaded'
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
else if (currentStateType === 'loading' || currentStateType === 'checking') {
|
|
117
|
+
log('[WdkAppProvider] Preserving wallet loading state during background transition', {
|
|
118
|
+
currentState: currentStateType,
|
|
119
|
+
});
|
|
120
|
+
// Do not reset - allow biometric authentication to complete
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// When coming to foreground: wallet will auto-initialize with biometrics
|
|
124
|
+
// (handled by the consolidated effect below)
|
|
125
|
+
if (nextAppState === 'active' && (previousState === 'background' || previousState === 'inactive')) {
|
|
126
|
+
log('[WdkAppProvider] App coming to foreground - auto-initialization will trigger biometrics');
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
return () => subscription.remove();
|
|
130
|
+
}, []);
|
|
131
|
+
// Validate props on mount and when props change
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
try {
|
|
134
|
+
validateNetworkConfigs(networkConfigs);
|
|
135
|
+
validateTokenConfigs(tokenConfigs);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const err = normalizeError(error, true, { component: 'WdkAppProvider', operation: 'propsValidation' });
|
|
139
|
+
logError('[WdkAppProvider] Invalid props:', err);
|
|
140
|
+
// Always throw validation errors - they indicate programming errors
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
143
|
+
}, [networkConfigs, tokenConfigs]);
|
|
144
|
+
// Worklet state - read from workletStore via hook
|
|
145
|
+
const workletHookState = useWorklet();
|
|
146
|
+
const { isWorkletStarted, isInitialized: isWorkletInitialized, isLoading: isWorkletLoading, error: workletError, } = workletHookState;
|
|
147
|
+
// Wallet state - read from walletStore (single source of truth)
|
|
148
|
+
const walletStore = getWalletStore();
|
|
149
|
+
// Subscribe to primitive values directly
|
|
150
|
+
const activeWalletId = walletStore((state) => state.activeWalletId);
|
|
151
|
+
// For walletLoadingState, use a ref to manually check equality and prevent unnecessary re-renders
|
|
152
|
+
const walletLoadingStateRef = useRef(walletStore.getState().walletLoadingState);
|
|
153
|
+
const [walletLoadingState, setWalletLoadingState] = React.useState(walletStore.getState().walletLoadingState);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
const unsubscribe = walletStore.subscribe((state) => {
|
|
156
|
+
const newState = state.walletLoadingState;
|
|
157
|
+
// Only update if content actually changed (deep equality check)
|
|
158
|
+
if (!deepEqualityFn(walletLoadingStateRef.current, newState)) {
|
|
159
|
+
walletLoadingStateRef.current = newState;
|
|
160
|
+
setWalletLoadingState(newState);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return unsubscribe;
|
|
164
|
+
}, [walletStore]);
|
|
165
|
+
const walletAddresses = walletStore((state) => state.activeWalletId ? state.addresses[state.activeWalletId] : undefined);
|
|
166
|
+
// Hooks for wallet operations
|
|
167
|
+
const { initializeWallet, hasWallet, error: walletManagerError, } = useWalletManager();
|
|
168
|
+
// Store initializeWallet in a ref to avoid it being a dependency of the effect
|
|
169
|
+
// This breaks the infinite loop: effect runs → component re-renders → initializeWallet recreated → effect runs again
|
|
170
|
+
const initializeWalletRef = useRef(initializeWallet);
|
|
171
|
+
useEffect(() => {
|
|
172
|
+
initializeWalletRef.current = initializeWallet;
|
|
173
|
+
}, [initializeWallet]);
|
|
174
|
+
// Track authentication errors to prevent infinite retry loops
|
|
175
|
+
// When biometric authentication fails, we shouldn't automatically retry
|
|
176
|
+
const authErrorRef = useRef(null);
|
|
177
|
+
// Derive isWalletInitializing from walletLoadingState (single source of truth)
|
|
178
|
+
const isWalletInitializing = useMemo(() => {
|
|
179
|
+
return isWalletLoadingState(walletLoadingState);
|
|
180
|
+
}, [walletLoadingState]);
|
|
181
|
+
// Worklet state object (exposed separately for flexibility)
|
|
182
|
+
const workletState = useMemo(() => ({
|
|
183
|
+
isReady: isWorkletStarted && !isWorkletLoading && !workletError,
|
|
184
|
+
isLoading: isWorkletLoading,
|
|
185
|
+
error: workletError,
|
|
186
|
+
}), [isWorkletStarted, isWorkletLoading, workletError]);
|
|
187
|
+
// Wallet state object (exposed separately for flexibility)
|
|
188
|
+
const walletStateObject = useMemo(() => ({
|
|
189
|
+
status: (walletLoadingState.type === 'not_loaded' ? 'not_loaded' :
|
|
190
|
+
walletLoadingState.type === 'checking' ? 'checking' :
|
|
191
|
+
walletLoadingState.type === 'loading' ? 'loading' :
|
|
192
|
+
walletLoadingState.type === 'ready' ? 'ready' :
|
|
193
|
+
'error'),
|
|
194
|
+
identifier: getWalletIdFromLoadingState(walletLoadingState),
|
|
195
|
+
error: walletLoadingState.type === 'error' ? walletLoadingState.error : null,
|
|
196
|
+
}), [walletLoadingState]);
|
|
197
|
+
// Worklet initialization status (worklet-specific)
|
|
198
|
+
const workletStatus = useMemo(() => {
|
|
199
|
+
return getWorkletStatus({
|
|
200
|
+
isWorkletStarted,
|
|
201
|
+
isLoading: isWorkletLoading,
|
|
202
|
+
error: workletError,
|
|
203
|
+
});
|
|
204
|
+
}, [isWorkletStarted, isWorkletLoading, workletError]);
|
|
205
|
+
// Combined app status - derived from both worklet and wallet states (convenience)
|
|
206
|
+
const status = useMemo(() => {
|
|
207
|
+
return getCombinedStatus({
|
|
208
|
+
isWorkletStarted,
|
|
209
|
+
isLoading: isWorkletLoading,
|
|
210
|
+
error: workletError,
|
|
211
|
+
}, walletLoadingState);
|
|
212
|
+
}, [isWorkletStarted, isWorkletLoading, workletError, walletLoadingState]);
|
|
213
|
+
// Automatically initialize worklet when component mounts
|
|
214
|
+
useEffect(() => {
|
|
215
|
+
log('[WdkAppProvider] Checking initialization conditions', {
|
|
216
|
+
isWorkletInitialized,
|
|
217
|
+
isWorkletLoading,
|
|
218
|
+
isWorkletStarted,
|
|
219
|
+
});
|
|
220
|
+
// Skip if worklet is loading
|
|
221
|
+
if (isWorkletLoading) {
|
|
222
|
+
log('[WdkAppProvider] Initialization skipped', { reason: 'already loading' });
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// If worklet is already started/initialized, nothing to do
|
|
226
|
+
if (isWorkletStarted || isWorkletInitialized) {
|
|
227
|
+
log('[WdkAppProvider] Worklet already started, ready to load wallets');
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
let cancelled = false;
|
|
231
|
+
const initializeWorklet = async () => {
|
|
232
|
+
try {
|
|
233
|
+
log('[WdkAppProvider] Starting worklet initialization...');
|
|
234
|
+
await WorkletLifecycleService.startWorklet(networkConfigs);
|
|
235
|
+
if (!cancelled) {
|
|
236
|
+
log('[WdkAppProvider] Worklet started successfully');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
if (!cancelled) {
|
|
241
|
+
const err = normalizeError(error, true, {
|
|
242
|
+
component: 'WdkAppProvider',
|
|
243
|
+
operation: 'workletInitialization',
|
|
244
|
+
});
|
|
245
|
+
logError('[WdkAppProvider] Failed to initialize worklet:', error);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
initializeWorklet();
|
|
250
|
+
// Cleanup function to prevent state updates if component unmounts
|
|
251
|
+
return () => {
|
|
252
|
+
cancelled = true;
|
|
253
|
+
};
|
|
254
|
+
}, [isWorkletInitialized, isWorkletLoading, isWorkletStarted]);
|
|
255
|
+
// Note: networkConfigs removed from deps - it's a prop that should be stable for app lifetime
|
|
256
|
+
// and doesn't need to trigger worklet re-initialization
|
|
257
|
+
// Consolidated effect: Sync wallet loading state with activeWalletId, addresses, and errors
|
|
258
|
+
//
|
|
259
|
+
// IMPORTANT: This effect MUST remain consolidated to prevent race conditions.
|
|
260
|
+
// Multiple interdependent state changes (activeWalletId, addresses, loadingState, errors)
|
|
261
|
+
// must be evaluated atomically in a single effect. Splitting into multiple effects would
|
|
262
|
+
// allow them to run with stale state, causing race conditions.
|
|
263
|
+
//
|
|
264
|
+
// State synchronization logic:
|
|
265
|
+
// 1. If activeWalletId is cleared, reset to not_loaded
|
|
266
|
+
// 2. If activeWalletId changes, handle wallet switch (check if addresses exist)
|
|
267
|
+
// 3. If wallet has addresses but state is not_loaded, transition to loading first
|
|
268
|
+
// 4. If wallet is loading and addresses appear, mark as ready (initialization complete)
|
|
269
|
+
// 5. If error occurs, update error state (only if tracking the correct wallet)
|
|
270
|
+
//
|
|
271
|
+
// All conditions are checked in order with early returns to ensure atomic evaluation.
|
|
272
|
+
useEffect(() => {
|
|
273
|
+
// EARLY EXIT: Skip automatic wallet initialization if disabled (e.g., when logged out)
|
|
274
|
+
if (!enableAutoInitialization) {
|
|
275
|
+
// Clear authentication error flag when auto-init is disabled (e.g., logout)
|
|
276
|
+
if (authErrorRef.current) {
|
|
277
|
+
log('[WdkAppProvider] Clearing authentication error flag - auto-init disabled');
|
|
278
|
+
authErrorRef.current = null;
|
|
279
|
+
}
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// VALIDATION 1: User identity must be confirmed before auto-initialization
|
|
283
|
+
// If currentUserId is undefined/null, we don't know which user is logged in yet
|
|
284
|
+
// Wait until user identity is confirmed to prevent wrong wallet initialization
|
|
285
|
+
if (currentUserId === undefined || currentUserId === null) {
|
|
286
|
+
log('[WdkAppProvider] Waiting for user identity confirmation before auto-init', {
|
|
287
|
+
hasActiveWalletId: !!activeWalletId,
|
|
288
|
+
});
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// VALIDATION 2: If activeWalletId doesn't match currentUserId, set it to correct user
|
|
292
|
+
// This allows useOnboarding to initialize the correct wallet without interference
|
|
293
|
+
if (activeWalletId !== currentUserId) {
|
|
294
|
+
log('[WdkAppProvider] Setting activeWalletId to current user', {
|
|
295
|
+
activeWalletId,
|
|
296
|
+
currentUserId,
|
|
297
|
+
});
|
|
298
|
+
// Set activeWalletId to current user - let useOnboarding handle initialization
|
|
299
|
+
walletStore.setState({
|
|
300
|
+
activeWalletId: currentUserId,
|
|
301
|
+
});
|
|
302
|
+
// Clear auth error flag to allow fresh authentication
|
|
303
|
+
if (authErrorRef.current) {
|
|
304
|
+
authErrorRef.current = null;
|
|
305
|
+
}
|
|
306
|
+
// Return and let the effect re-run with correct activeWalletId
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// EARLY EXIT: Skip if we have an authentication error to prevent infinite retry loop
|
|
310
|
+
// Authentication errors (biometric failures) require user intervention, not automatic retry
|
|
311
|
+
if (authErrorRef.current) {
|
|
312
|
+
log('[WdkAppProvider] Skipping auto-initialization due to authentication error', {
|
|
313
|
+
error: authErrorRef.current,
|
|
314
|
+
});
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const currentWalletId = getWalletIdFromLoadingState(walletLoadingState);
|
|
318
|
+
const hasAddresses = !!(walletAddresses && Object.keys(walletAddresses).length > 0);
|
|
319
|
+
// Handle activeWalletId cleared
|
|
320
|
+
if (shouldResetToNotLoaded(activeWalletId, walletLoadingState)) {
|
|
321
|
+
log('[WdkAppProvider] Active wallet cleared, resetting wallet state');
|
|
322
|
+
// Clear authentication error flag when wallet is reset
|
|
323
|
+
if (authErrorRef.current) {
|
|
324
|
+
log('[WdkAppProvider] Clearing authentication error flag on wallet reset');
|
|
325
|
+
authErrorRef.current = null;
|
|
326
|
+
}
|
|
327
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, { type: 'not_loaded' }));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
// Ensure activeWalletId is not null before proceeding (shouldn't happen after check above, but TypeScript needs it)
|
|
331
|
+
if (!activeWalletId) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
// Handle wallet switching (activeWalletId changed to different wallet)
|
|
335
|
+
const switchDecision = getWalletSwitchDecision(currentWalletId, activeWalletId, hasAddresses);
|
|
336
|
+
if (switchDecision.shouldSwitch) {
|
|
337
|
+
log('[WdkAppProvider] Active wallet changed', {
|
|
338
|
+
from: currentWalletId,
|
|
339
|
+
to: activeWalletId,
|
|
340
|
+
hasAddresses,
|
|
341
|
+
isWorkletStarted,
|
|
342
|
+
shouldMarkReady: switchDecision.shouldMarkReady,
|
|
343
|
+
});
|
|
344
|
+
// When switching to a wallet, trigger proper initialization with biometrics
|
|
345
|
+
if (isWorkletStarted) {
|
|
346
|
+
// Skip if wallet is already initializing to prevent duplicate biometric prompts
|
|
347
|
+
if (isWalletInitializing) {
|
|
348
|
+
log('[WdkAppProvider] Skipping wallet switch initialization - already in progress', {
|
|
349
|
+
activeWalletId,
|
|
350
|
+
walletLoadingState: walletLoadingState.type,
|
|
351
|
+
});
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
log('[WdkAppProvider] Wallet switch detected - triggering initialization', {
|
|
355
|
+
activeWalletId,
|
|
356
|
+
hasAddresses,
|
|
357
|
+
});
|
|
358
|
+
(async () => {
|
|
359
|
+
try {
|
|
360
|
+
const walletExists = await hasWallet(activeWalletId);
|
|
361
|
+
const shouldCreateNew = !walletExists;
|
|
362
|
+
log('[WdkAppProvider] Wallet existence check', {
|
|
363
|
+
activeWalletId,
|
|
364
|
+
walletExists,
|
|
365
|
+
shouldCreateNew,
|
|
366
|
+
});
|
|
367
|
+
// Call initializeWallet to trigger biometrics and properly load the wallet
|
|
368
|
+
// This will transition state to 'checking' immediately, preventing duplicate calls
|
|
369
|
+
await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
|
|
370
|
+
log('[WdkAppProvider] Wallet initialized successfully after switch');
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
logError('[WdkAppProvider] Failed to initialize wallet after switch:', error);
|
|
374
|
+
// Error will be handled by the error handling logic below
|
|
375
|
+
}
|
|
376
|
+
})();
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// Worklet not started yet - reset to not_loaded and wait
|
|
380
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, {
|
|
381
|
+
type: 'not_loaded'
|
|
382
|
+
}));
|
|
383
|
+
}
|
|
384
|
+
// This effect will run again when isWorkletStarted becomes true
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
// Handle case where addresses exist but state is not_loaded (from persistence/app restart)
|
|
388
|
+
// This means wallet was cached but worklet is not initialized with credentials
|
|
389
|
+
// We need to trigger proper initialization with biometrics
|
|
390
|
+
// Only trigger if we're not already in the process of loading (checking/loading state)
|
|
391
|
+
if (walletLoadingState.type === 'not_loaded' && hasAddresses && activeWalletId && isWorkletStarted) {
|
|
392
|
+
// Skip if wallet is already initializing to prevent duplicate biometric prompts
|
|
393
|
+
if (isWalletInitializing) {
|
|
394
|
+
log('[WdkAppProvider] Skipping cached wallet initialization - already in progress', {
|
|
395
|
+
activeWalletId,
|
|
396
|
+
walletLoadingState: walletLoadingState.type,
|
|
397
|
+
});
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
log('[WdkAppProvider] Cached wallet detected on restart - triggering initialization with biometrics', {
|
|
401
|
+
activeWalletId,
|
|
402
|
+
hasAddresses,
|
|
403
|
+
isWorkletStarted,
|
|
404
|
+
isWorkletInitialized,
|
|
405
|
+
walletLoadingState: walletLoadingState.type
|
|
406
|
+
});
|
|
407
|
+
(async () => {
|
|
408
|
+
try {
|
|
409
|
+
const walletExists = await hasWallet(activeWalletId);
|
|
410
|
+
const shouldCreateNew = !walletExists;
|
|
411
|
+
log('[WdkAppProvider] Wallet existence check', {
|
|
412
|
+
activeWalletId,
|
|
413
|
+
walletExists,
|
|
414
|
+
shouldCreateNew,
|
|
415
|
+
});
|
|
416
|
+
// Call initializeWallet to trigger biometrics and properly load the wallet
|
|
417
|
+
// This will transition state to 'checking' immediately, preventing duplicate calls
|
|
418
|
+
// Then it will go through: checking -> loading -> ready
|
|
419
|
+
await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
|
|
420
|
+
log('[WdkAppProvider] Wallet initialized successfully from cache');
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
logError('[WdkAppProvider] Failed to initialize wallet from cache:', error);
|
|
424
|
+
// Error will be handled by the error handling logic below
|
|
425
|
+
}
|
|
426
|
+
})();
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
// Handle case where activeWalletId exists but no addresses (after logout/app restart)
|
|
430
|
+
// This means the user logged in but addresses were cleared during logout
|
|
431
|
+
// We need to trigger initialization to load the wallet
|
|
432
|
+
if (walletLoadingState.type === 'not_loaded' && !hasAddresses && activeWalletId && isWorkletStarted) {
|
|
433
|
+
// Skip if wallet is already initializing to prevent duplicate biometric prompts
|
|
434
|
+
if (isWalletInitializing) {
|
|
435
|
+
log('[WdkAppProvider] Skipping wallet initialization - already in progress', {
|
|
436
|
+
activeWalletId,
|
|
437
|
+
walletLoadingState: walletLoadingState.type,
|
|
438
|
+
});
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
log('[WdkAppProvider] Active wallet detected without addresses - triggering initialization', {
|
|
442
|
+
activeWalletId,
|
|
443
|
+
hasAddresses,
|
|
444
|
+
isWorkletStarted,
|
|
445
|
+
walletLoadingState: walletLoadingState.type
|
|
446
|
+
});
|
|
447
|
+
(async () => {
|
|
448
|
+
try {
|
|
449
|
+
const walletExists = await hasWallet(activeWalletId);
|
|
450
|
+
const shouldCreateNew = !walletExists;
|
|
451
|
+
log('[WdkAppProvider] Wallet existence check', {
|
|
452
|
+
activeWalletId,
|
|
453
|
+
walletExists,
|
|
454
|
+
shouldCreateNew,
|
|
455
|
+
});
|
|
456
|
+
// Call initializeWallet to trigger biometrics and properly load the wallet
|
|
457
|
+
// This will transition state to 'checking' immediately, preventing duplicate calls
|
|
458
|
+
await initializeWalletRef.current({ createNew: shouldCreateNew, walletId: activeWalletId });
|
|
459
|
+
log('[WdkAppProvider] Wallet initialized successfully');
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
logError('[WdkAppProvider] Failed to initialize wallet:', error);
|
|
463
|
+
// Error will be handled by the error handling logic below
|
|
464
|
+
}
|
|
465
|
+
})();
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
// Handle ready state transitions
|
|
469
|
+
if (shouldMarkWalletAsReady(walletLoadingState, hasAddresses, currentWalletId, activeWalletId, isWorkletInitialized)) {
|
|
470
|
+
log('[WdkAppProvider] Wallet ready', { activeWalletId });
|
|
471
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, {
|
|
472
|
+
type: 'ready',
|
|
473
|
+
identifier: activeWalletId
|
|
474
|
+
}));
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
// Handle errors from useWalletManager
|
|
478
|
+
if (shouldHandleError(walletManagerError, currentWalletId, activeWalletId, walletLoadingState)) {
|
|
479
|
+
log('[WdkAppProvider] Wallet operation error detected', {
|
|
480
|
+
activeWalletId,
|
|
481
|
+
error: walletManagerError
|
|
482
|
+
});
|
|
483
|
+
const error = new Error(walletManagerError);
|
|
484
|
+
// Check if this is an authentication error (biometric failure)
|
|
485
|
+
const errorMessage = walletManagerError?.toLowerCase() || '';
|
|
486
|
+
const isAuthError = errorMessage.includes('authentication') ||
|
|
487
|
+
errorMessage.includes('biometric') ||
|
|
488
|
+
errorMessage.includes('user cancel');
|
|
489
|
+
if (isAuthError && !authErrorRef.current) {
|
|
490
|
+
log('[WdkAppProvider] Authentication error detected - preventing auto-retry', {
|
|
491
|
+
error: walletManagerError,
|
|
492
|
+
});
|
|
493
|
+
authErrorRef.current = walletManagerError || 'Authentication failed';
|
|
494
|
+
}
|
|
495
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, {
|
|
496
|
+
type: 'error',
|
|
497
|
+
identifier: activeWalletId,
|
|
498
|
+
error
|
|
499
|
+
}));
|
|
500
|
+
}
|
|
501
|
+
}, [enableAutoInitialization, currentUserId, activeWalletId, walletLoadingState, walletAddresses, walletManagerError, isWalletInitializing, isWorkletStarted, isWorkletInitialized]);
|
|
502
|
+
// Note: walletStore removed from deps - it's a singleton that never changes
|
|
503
|
+
// Note: initializeWallet removed from deps and accessed via ref to prevent infinite loop
|
|
504
|
+
// Retry initialization
|
|
505
|
+
const retry = useCallback(() => {
|
|
506
|
+
log('[WdkAppProvider] Retrying initialization...');
|
|
507
|
+
// Clear authentication error flag to allow retry
|
|
508
|
+
if (authErrorRef.current) {
|
|
509
|
+
log('[WdkAppProvider] Clearing authentication error flag for retry');
|
|
510
|
+
authErrorRef.current = null;
|
|
511
|
+
}
|
|
512
|
+
if (isWalletErrorState(walletLoadingState)) {
|
|
513
|
+
walletStore.setState((prev) => updateWalletLoadingState(prev, { type: 'not_loaded' }));
|
|
514
|
+
}
|
|
515
|
+
}, [walletLoadingState]);
|
|
516
|
+
// Note: walletStore removed from deps - it's a singleton that never changes
|
|
517
|
+
// Convenience getters
|
|
518
|
+
const isInitializing = useMemo(() => isAppInProgressStatus(status), [status]);
|
|
519
|
+
const isReady = useMemo(() => isAppReadyStatus(status), [status]);
|
|
520
|
+
// Get wallet error from wallet state
|
|
521
|
+
const walletError = walletLoadingState.type === 'error' ? walletLoadingState.error : null;
|
|
522
|
+
const initializationError = workletError ? new Error(workletError) : walletError;
|
|
523
|
+
// Get walletExists from wallet state
|
|
524
|
+
const walletExists = useMemo(() => {
|
|
525
|
+
if (walletLoadingState.type === 'loading') {
|
|
526
|
+
return walletLoadingState.walletExists;
|
|
527
|
+
}
|
|
528
|
+
if (walletLoadingState.type === 'ready') {
|
|
529
|
+
return true; // Wallet is loaded, so it exists
|
|
530
|
+
}
|
|
531
|
+
return null;
|
|
532
|
+
}, [walletLoadingState]);
|
|
533
|
+
// Loading wallet ID (transient, during loading operations)
|
|
534
|
+
const loadingWalletId = useMemo(() => {
|
|
535
|
+
if (walletLoadingState.type === 'checking' || walletLoadingState.type === 'loading') {
|
|
536
|
+
return walletLoadingState.identifier;
|
|
537
|
+
}
|
|
538
|
+
return null;
|
|
539
|
+
}, [walletLoadingState]);
|
|
540
|
+
const contextValue = useMemo(() => ({
|
|
541
|
+
status,
|
|
542
|
+
workletStatus,
|
|
543
|
+
workletState,
|
|
544
|
+
walletState: walletStateObject,
|
|
545
|
+
isInitializing,
|
|
546
|
+
isReady,
|
|
547
|
+
activeWalletId,
|
|
548
|
+
loadingWalletId,
|
|
549
|
+
walletExists,
|
|
550
|
+
error: initializationError,
|
|
551
|
+
retry,
|
|
552
|
+
}), [status, workletStatus, workletState, walletStateObject, isInitializing, isReady, activeWalletId, loadingWalletId, walletExists, initializationError, retry]);
|
|
553
|
+
return (React.createElement(QueryClientProvider, { client: queryClient },
|
|
554
|
+
React.createElement(WdkAppContext.Provider, { value: contextValue }, children)));
|
|
555
|
+
}
|
|
556
|
+
// Export context for use by the useWdkApp hook
|
|
557
|
+
export { WdkAppContext };
|
|
558
|
+
//# sourceMappingURL=WdkAppProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WdkAppProvider.js","sourceRoot":"","sources":["../../src/provider/WdkAppProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EAAmC,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AA6E5J,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAA;AAyBpE;;;;;GAKG;AACH;;;GAGG;AACH,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;IAClC,cAAc,EAAE;QACd,OAAO,EAAE;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,2BAA2B;YACtC,MAAM,EAAE,wBAAwB;SACjC;KACF;CACF,CAAC,CAAA;AAEF,yDAAyD;AACzD,kEAAkE;AAClE,MAAM,cAAc,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;IACxC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAElE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACtC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,cAAc,EACd,YAAY,EACZ,wBAAwB,GAAG,IAAI,EAC/B,aAAa,EACb,QAAQ,GACY;IACpB,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAA;QACrC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC5C,OAAO,OAAO,CAAA;IAChB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,gEAAgE;IAChE,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,+EAA+E;QAC/E,mCAAmC;QACnC,mDAAmD;QACnD,2EAA2E;QAC3E,0DAA0D;QAC1D,GAAG,CAAC,oEAAoE,CAAC,CAAA;QACzE,qBAAqB,EAAE,CAAA;QAEvB,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAA;QAEtD,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,YAA4B,EAAE,EAAE;YACxF,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAA;YACzC,WAAW,CAAC,OAAO,GAAG,YAAY,CAAA;YAElC,8EAA8E;YAC9E,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,YAAY,KAAK,UAAU,CAAC,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACjG,GAAG,CAAC,4FAA4F,CAAC,CAAA;gBACjG,qBAAqB,EAAE,CAAA;gBAEvB,gEAAgE;gBAChE,2DAA2D;gBAC3D,6FAA6F;gBAC7F,8EAA8E;gBAC9E,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;gBAC3C,MAAM,gBAAgB,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAA;gBAE7D,IAAI,gBAAgB,KAAK,OAAO,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;oBAChE,GAAG,CAAC,6EAA6E,CAAC,CAAA;oBAClF,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE;wBAC5D,IAAI,EAAE,YAAY;qBACnB,CAAC,CAAC,CAAA;gBACL,CAAC;qBAAM,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC;oBAC7E,GAAG,CAAC,+EAA+E,EAAE;wBACnF,YAAY,EAAE,gBAAgB;qBAC/B,CAAC,CAAA;oBACF,4DAA4D;gBAC9D,CAAC;YACH,CAAC;YAED,yEAAyE;YACzE,6CAA6C;YAC7C,IAAI,YAAY,KAAK,QAAQ,IAAI,CAAC,aAAa,KAAK,YAAY,IAAI,aAAa,KAAK,UAAU,CAAC,EAAE,CAAC;gBAClG,GAAG,CAAC,yFAAyF,CAAC,CAAA;YAChG,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;IACpC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,gDAAgD;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,sBAAsB,CAAC,cAAc,CAAC,CAAA;YACtC,oBAAoB,CAAC,YAAY,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACtG,QAAQ,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;YAChD,oEAAoE;YACpE,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;IAElC,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAA;IACrC,MAAM,EACJ,gBAAgB,EAChB,aAAa,EAAE,oBAAoB,EACnC,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,YAAY,GACpB,GAAG,gBAAgB,CAAA;IAEpB,gEAAgE;IAChE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,yCAAyC;IACzC,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAEhF,kGAAkG;IAClG,MAAM,qBAAqB,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,CAAA;IAC/E,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,CAAA;IAE7G,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,KAAkB,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAA;YACzC,gEAAgE;YAChE,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC7D,qBAAqB,CAAC,OAAO,GAAG,QAAQ,CAAA;gBACxC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,WAAW,CAAA;IACpB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,KAAkB,EAAE,EAAE,CACzD,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CACzE,CAAA;IAED,8BAA8B;IAC9B,MAAM,EACJ,gBAAgB,EAChB,SAAS,EACT,KAAK,EAAE,kBAAkB,GAC1B,GAAG,gBAAgB,EAAE,CAAA;IAEtB,+EAA+E;IAC/E,qHAAqH;IACrH,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAA;IAChD,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEtB,8DAA8D;IAC9D,wEAAwE;IACxE,MAAM,YAAY,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAEhD,+EAA+E;IAC/E,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;IACjD,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExB,4DAA4D;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,gBAAgB,IAAI,CAAC,gBAAgB,IAAI,CAAC,YAAY;QAC/D,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE,YAAY;KACpB,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAA;IAEvD,2DAA2D;IAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAC1D,kBAAkB,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACrD,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACnD,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC/C,OAAO,CAA8D;QAC7E,UAAU,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;QAC3D,KAAK,EAAE,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KAC7E,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAEzB,mDAAmD;IACnD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,OAAO,gBAAgB,CAAC;YACtB,gBAAgB;YAChB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,YAAY;SACpB,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAA;IAEtD,kFAAkF;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,OAAO,iBAAiB,CACtB;YACE,gBAAgB;YAChB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,YAAY;SACpB,EACD,kBAAkB,CACnB,CAAA;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAE1E,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,qDAAqD,EAAE;YACzD,oBAAoB;YACpB,gBAAgB;YAChB,gBAAgB;SACjB,CAAC,CAAA;QAEF,6BAA6B;QAC7B,IAAI,gBAAgB,EAAE,CAAC;YACrB,GAAG,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;YAC7E,OAAM;QACR,CAAC;QAED,2DAA2D;QAC3D,IAAI,gBAAgB,IAAI,oBAAoB,EAAE,CAAC;YAC7C,GAAG,CAAC,iEAAiE,CAAC,CAAA;YACtE,OAAM;QACR,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC;gBACH,GAAG,CAAC,qDAAqD,CAAC,CAAA;gBAC1D,MAAM,uBAAuB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;gBAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,GAAG,CAAC,+CAA+C,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE;wBACtC,SAAS,EAAE,gBAAgB;wBAC3B,SAAS,EAAE,uBAAuB;qBACnC,CAAC,CAAA;oBACF,QAAQ,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,iBAAiB,EAAE,CAAA;QAEnB,kEAAkE;QAClE,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC9D,8FAA8F;IAC9F,wDAAwD;IAExD,4FAA4F;IAC5F,GAAG;IACH,8EAA8E;IAC9E,0FAA0F;IAC1F,yFAAyF;IACzF,+DAA+D;IAC/D,EAAE;IACF,+BAA+B;IAC/B,uDAAuD;IACvD,gFAAgF;IAChF,kFAAkF;IAClF,wFAAwF;IACxF,+EAA+E;IAC/E,EAAE;IACF,sFAAsF;IACtF,SAAS,CAAC,GAAG,EAAE;QACb,uFAAuF;QACvF,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,4EAA4E;YAC5E,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,GAAG,CAAC,0EAA0E,CAAC,CAAA;gBAC/E,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC7B,CAAC;YACD,OAAM;QACR,CAAC;QAED,2EAA2E;QAC3E,gFAAgF;QAChF,+EAA+E;QAC/E,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC1D,GAAG,CAAC,0EAA0E,EAAE;gBAC9E,iBAAiB,EAAE,CAAC,CAAC,cAAc;aACpC,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,sFAAsF;QACtF,kFAAkF;QAClF,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;YACrC,GAAG,CAAC,yDAAyD,EAAE;gBAC7D,cAAc;gBACd,aAAa;aACd,CAAC,CAAA;YAEF,+EAA+E;YAC/E,WAAW,CAAC,QAAQ,CAAC;gBACnB,cAAc,EAAE,aAAa;aAC9B,CAAC,CAAA;YAEF,sDAAsD;YACtD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC7B,CAAC;YAED,+DAA+D;YAC/D,OAAM;QACR,CAAC;QAED,qFAAqF;QACrF,4FAA4F;QAC5F,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,GAAG,CAAC,2EAA2E,EAAE;gBAC/E,KAAK,EAAE,YAAY,CAAC,OAAO;aAC5B,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,MAAM,eAAe,GAAG,2BAA2B,CAAC,kBAAkB,CAAC,CAAA;QACvE,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAEnF,gCAAgC;QAChC,IAAI,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,gEAAgE,CAAC,CAAA;YACrE,uDAAuD;YACvD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,GAAG,CAAC,qEAAqE,CAAC,CAAA;gBAC1E,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;YAC7B,CAAC;YACD,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;YACtF,OAAM;QACR,CAAC;QAED,oHAAoH;QACpH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QAED,uEAAuE;QACvE,MAAM,cAAc,GAAG,uBAAuB,CAAC,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC,CAAA;QAC7F,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,GAAG,CAAC,wCAAwC,EAAE;gBAC5C,IAAI,EAAE,eAAe;gBACrB,EAAE,EAAE,cAAc;gBAClB,YAAY;gBACZ,gBAAgB;gBAChB,eAAe,EAAE,cAAc,CAAC,eAAe;aAChD,CAAC,CAAA;YAEF,4EAA4E;YAC5E,IAAI,gBAAgB,EAAE,CAAC;gBACrB,gFAAgF;gBAChF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,GAAG,CAAC,8EAA8E,EAAE;wBAClF,cAAc;wBACd,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;qBAC5C,CAAC,CAAA;oBACF,OAAM;gBACR,CAAC;gBAED,GAAG,CAAC,qEAAqE,EAAE;oBACzE,cAAc;oBACd,YAAY;iBACb,CAAC,CAGD;gBAAA,CAAC,KAAK,IAAI,EAAE;oBACX,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAA;wBACpD,MAAM,eAAe,GAAG,CAAC,YAAY,CAAA;wBAErC,GAAG,CAAC,yCAAyC,EAAE;4BAC7C,cAAc;4BACd,YAAY;4BACZ,eAAe;yBAChB,CAAC,CAAA;wBAEF,2EAA2E;wBAC3E,mFAAmF;wBACnF,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;wBAC3F,GAAG,CAAC,+DAA+D,CAAC,CAAA;oBACtE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,QAAQ,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAA;wBAC7E,0DAA0D;oBAC5D,CAAC;gBACH,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;iBAAM,CAAC;gBACN,yDAAyD;gBACzD,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE;oBAC5D,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC,CAAA;YACL,CAAC;YACD,gEAAgE;YAChE,OAAM;QACR,CAAC;QAED,2FAA2F;QAC3F,+EAA+E;QAC/E,2DAA2D;QAC3D,uFAAuF;QACvF,IAAI,kBAAkB,CAAC,IAAI,KAAK,YAAY,IAAI,YAAY,IAAI,cAAc,IAAI,gBAAgB,EAAE,CAAC;YACnG,gFAAgF;YAChF,IAAI,oBAAoB,EAAE,CAAC;gBACzB,GAAG,CAAC,8EAA8E,EAAE;oBAClF,cAAc;oBACd,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;iBAC5C,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YAED,GAAG,CAAC,gGAAgG,EAAE;gBACpG,cAAc;gBACd,YAAY;gBACZ,gBAAgB;gBAChB,oBAAoB;gBACpB,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;aAC5C,CAAC,CAGD;YAAA,CAAC,KAAK,IAAI,EAAE;gBACX,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAA;oBACpD,MAAM,eAAe,GAAG,CAAC,YAAY,CAAA;oBAErC,GAAG,CAAC,yCAAyC,EAAE;wBAC7C,cAAc;wBACd,YAAY;wBACZ,eAAe;qBAChB,CAAC,CAAA;oBAEF,2EAA2E;oBAC3E,mFAAmF;oBACnF,wDAAwD;oBACxD,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;oBAC3F,GAAG,CAAC,6DAA6D,CAAC,CAAA;gBACpE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,0DAA0D,EAAE,KAAK,CAAC,CAAA;oBAC3E,0DAA0D;gBAC5D,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YAEJ,OAAM;QACR,CAAC;QAED,sFAAsF;QACtF,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,kBAAkB,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,YAAY,IAAI,cAAc,IAAI,gBAAgB,EAAE,CAAC;YACpG,gFAAgF;YAChF,IAAI,oBAAoB,EAAE,CAAC;gBACzB,GAAG,CAAC,uEAAuE,EAAE;oBAC3E,cAAc;oBACd,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;iBAC5C,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YAED,GAAG,CAAC,uFAAuF,EAAE;gBAC3F,cAAc;gBACd,YAAY;gBACZ,gBAAgB;gBAChB,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;aAC5C,CAAC,CAGD;YAAA,CAAC,KAAK,IAAI,EAAE;gBACX,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAA;oBACpD,MAAM,eAAe,GAAG,CAAC,YAAY,CAAA;oBAErC,GAAG,CAAC,yCAAyC,EAAE;wBAC7C,cAAc;wBACd,YAAY;wBACZ,eAAe;qBAChB,CAAC,CAAA;oBAEF,2EAA2E;oBAC3E,mFAAmF;oBACnF,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;oBAC3F,GAAG,CAAC,kDAAkD,CAAC,CAAA;gBACzD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAA;oBAChE,0DAA0D;gBAC5D,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YAEJ,OAAM;QACR,CAAC;QAED,iCAAiC;QACjC,IAAI,uBAAuB,CAAC,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,CAAC,EAAE,CAAC;YACrH,GAAG,CAAC,+BAA+B,EAAE,EAAE,cAAc,EAAE,CAAC,CAAA;YACxD,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE;gBAC5D,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,cAAc;aAC3B,CAAC,CAAC,CAAA;YACH,OAAM;QACR,CAAC;QAED,sCAAsC;QACtC,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC/F,GAAG,CAAC,kDAAkD,EAAE;gBACtD,cAAc;gBACd,KAAK,EAAE,kBAAkB;aAC1B,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kBAAmB,CAAC,CAAA;YAE5C,+DAA+D;YAC/D,MAAM,YAAY,GAAG,kBAAkB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;YAC5D,MAAM,WAAW,GACf,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBACvC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;YAEtC,IAAI,WAAW,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzC,GAAG,CAAC,wEAAwE,EAAE;oBAC5E,KAAK,EAAE,kBAAkB;iBAC1B,CAAC,CAAA;gBACF,YAAY,CAAC,OAAO,GAAG,kBAAkB,IAAI,uBAAuB,CAAA;YACtE,CAAC;YAED,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE;gBAC5D,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,cAAc;gBAC1B,KAAK;aACN,CAAC,CAAC,CAAA;QACL,CAAC;IACH,CAAC,EAAE,CAAC,wBAAwB,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAA;IACpL,4EAA4E;IAC5E,yFAAyF;IAEzF,uBAAuB;IACvB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,GAAG,CAAC,6CAA6C,CAAC,CAAA;QAClD,iDAAiD;QACjD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,GAAG,CAAC,+DAA+D,CAAC,CAAA;YACpE,YAAY,CAAC,OAAO,GAAG,IAAI,CAAA;QAC7B,CAAC;QACD,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC3C,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;QACxF,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACxB,4EAA4E;IAE5E,sBAAsB;IACtB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjE,qCAAqC;IACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACzF,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;IAEhF,qCAAqC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,kBAAkB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,kBAAkB,CAAC,YAAY,CAAA;QACxC,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxC,OAAO,IAAI,CAAA,CAAC,iCAAiC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExB,2DAA2D;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,IAAI,kBAAkB,CAAC,IAAI,KAAK,UAAU,IAAI,kBAAkB,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpF,OAAO,kBAAkB,CAAC,UAAU,CAAA;QACtC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExB,MAAM,YAAY,GAAuB,OAAO,CAC9C,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,aAAa;QACb,YAAY;QACZ,WAAW,EAAE,iBAAiB;QAC9B,cAAc;QACd,OAAO;QACP,cAAc;QACd,eAAe;QACf,YAAY;QACZ,KAAK,EAAE,mBAAmB;QAC1B,KAAK;KACN,CAAC,EACF,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAC7J,CAAA;IAED,OAAO,CACL,oBAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW;QACtC,oBAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,IAAG,QAAQ,CAA0B,CAC5D,CACvB,CAAA;AACH,CAAC;AAED,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Service
|
|
3
|
+
*
|
|
4
|
+
* Handles account method calls through the worklet.
|
|
5
|
+
* This service provides a generic interface for calling account methods
|
|
6
|
+
* like getBalance, getTokenBalance, signMessage, signTransaction, etc.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Account Service
|
|
10
|
+
*
|
|
11
|
+
* Provides methods for calling account operations through the worklet.
|
|
12
|
+
*/
|
|
13
|
+
export declare class AccountService {
|
|
14
|
+
/**
|
|
15
|
+
* Call a method on a wallet account
|
|
16
|
+
* Generic method for calling any account method through the worklet
|
|
17
|
+
*
|
|
18
|
+
* The worklet should already have the correct wallet loaded via `initializeWDK`.
|
|
19
|
+
* Wallet switching is handled at the hook level before calling this service.
|
|
20
|
+
*
|
|
21
|
+
* @param network - Network name
|
|
22
|
+
* @param accountIndex - Account index
|
|
23
|
+
* @param methodName - Method name
|
|
24
|
+
* @param args - Optional arguments for the method
|
|
25
|
+
* @param walletId - Optional wallet identifier (for consistency, worklet should already have correct wallet loaded)
|
|
26
|
+
* @returns Promise with the method result
|
|
27
|
+
* @throws Error if validation fails
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // Get balance
|
|
32
|
+
* const balance = await AccountService.callAccountMethod('ethereum', 0, 'getBalance', null)
|
|
33
|
+
*
|
|
34
|
+
* // Get token balance
|
|
35
|
+
* const tokenBalance = await AccountService.callAccountMethod(
|
|
36
|
+
* 'ethereum',
|
|
37
|
+
* 0,
|
|
38
|
+
* 'getTokenBalance',
|
|
39
|
+
* '0x...'
|
|
40
|
+
* )
|
|
41
|
+
*
|
|
42
|
+
* // Sign a message
|
|
43
|
+
* const signature = await AccountService.callAccountMethod(
|
|
44
|
+
* 'ethereum',
|
|
45
|
+
* 0,
|
|
46
|
+
* 'signMessage',
|
|
47
|
+
* { message: 'Hello World' }
|
|
48
|
+
* )
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
static callAccountMethod<T = unknown>(network: string, accountIndex: number, methodName: string, args?: unknown, walletId?: string): Promise<T>;
|
|
52
|
+
}
|