Import account using mnemonic

This commit is contained in:
pranavjadhav007 2025-07-30 20:15:06 +05:30
parent 86deb2aab7
commit 6089085a0a
2 changed files with 51 additions and 24 deletions

4
src/global.d.ts vendored
View File

@ -37,8 +37,8 @@ declare global {
// Handles incoming transfer requests from Android
receiveTransferRequestFromAndroid?: (to: string, amount: string, namespace: String, chainId: string, memo: string) => void;
// Handles account creation requests from Android
receiveGetOrCreateAccountFromAndroid?: (chainId: string) => void;
// Handles account import requests from Android
receiveImportAccountFromAndroid?: (mnemonic: string, chainId: string) => void;
}
}

View File

@ -6,34 +6,61 @@ import { useAccounts } from '../context/AccountsContext';
import { useNetworks } from '../context/NetworksContext';
import { StackParamsList } from '../types';
import useGetOrCreateAccounts from './useGetOrCreateAccounts';
import { retrieveAccountsForNetwork } from '../utils/accounts';
import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData } from '../utils/accounts';
export const useWebViewHandler = () => {
// Navigation and context hooks
const navigation = useNavigation<NativeStackNavigationProp<StackParamsList>>();
const { selectedNetwork } = useNetworks();
const { accounts, currentIndex } = useAccounts();
const { getOrCreateAccountsForChain } = useGetOrCreateAccounts();
const { selectedNetwork, setNetworksData, setSelectedNetwork } = useNetworks();
const { accounts, currentIndex, setAccounts } = useAccounts();
// Initialize accounts
const handleGetOrCreateAccount = useCallback(async (chainId: string) => {
// Import account using mnemonic
const handleImportAccount = useCallback(async (mnemonic: string, chainId: string) => {
try {
const accountsData = await getOrCreateAccountsForChain(chainId);
if (!accountsData || accountsData.length === 0) {
window.Android?.onAccountError?.('Failed to create/retrieve account');
// Get available networks data
const networksData = await retrieveNetworksData();
if (!networksData || networksData.length === 0) {
window.Android?.onAccountError?.('No networks configured');
return;
}
window.Android?.onAccountCreated?.(JSON.stringify(accountsData[0]));
// Create wallet using the provided mnemonic
await createWallet(networksData, mnemonic);
// Find the requested network
const requestedNetwork = networksData.find(network => network.chainId === chainId);
if (!requestedNetwork) {
window.Android?.onAccountError?.(`Network with chainId '${chainId}' not found`);
return;
}
// Update networks context
setNetworksData(networksData);
setSelectedNetwork(requestedNetwork);
// Retrieve accounts for the requested network
const accounts = await retrieveAccountsForNetwork(
`${requestedNetwork.namespace}:${requestedNetwork.chainId}`,
'0'
);
if (!accounts || accounts.length === 0) {
window.Android?.onAccountError?.('Failed to import account');
return;
}
// Update accounts context
setAccounts(accounts);
// Notify Android that account was successfully imported for the requested chain
window.Android?.onAccountCreated?.(JSON.stringify(accounts[0]));
} catch (error) {
console.error('Account operation error:', error);
window.Android?.onAccountError?.(`Operation failed: ${error}`);
console.error('Import account error:', error);
window.Android?.onAccountError?.(`Import failed: ${error}`);
}
}, [getOrCreateAccountsForChain]);
}, [setNetworksData, setSelectedNetwork, setAccounts]);
// Core navigation handler
const navigateToSignRequest = useCallback((message: string) => {
@ -146,13 +173,13 @@ export const useWebViewHandler = () => {
window.receiveSignRequestFromAndroid = navigateToSignRequest;
window.receiveTransferRequestFromAndroid = navigateToTransfer;
window.receiveGetOrCreateAccountFromAndroid = handleGetOrCreateAccount;
window.receiveImportAccountFromAndroid = handleImportAccount;
return () => {
window.receiveSignRequestFromAndroid = undefined;
window.receiveTransferRequestFromAndroid = undefined;
window.receiveGetOrCreateAccountFromAndroid = undefined;
window.receiveImportAccountFromAndroid = undefined;
};
}, [navigateToSignRequest, navigateToTransfer, handleGetOrCreateAccount]); // Only the function reference as dependency
}, [navigateToSignRequest, navigateToTransfer, handleImportAccount]); // Only the function reference as dependency
};