Import account using mnemonic
This commit is contained in:
parent
86deb2aab7
commit
6089085a0a
4
src/global.d.ts
vendored
4
src/global.d.ts
vendored
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user