Add method to import account from android using mnemonic #41
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "web-wallet",
|
||||
"version": "0.1.7-nym-0.1.1",
|
||||
"version": "0.1.7-nym-0.1.2",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@cerc-io/registry-sdk": "^0.2.5",
|
||||
|
||||
3
src/global.d.ts
vendored
3
src/global.d.ts
vendored
@ -39,6 +39,9 @@ declare global {
|
||||
|
||||
// Handles account creation requests from Android
|
||||
receiveGetOrCreateAccountFromAndroid?: (chainId: string) => void;
|
||||
|
||||
// Handles account import requests from Android
|
||||
receiveImportAccountFromAndroid?: (chainId: string, mnemonic: string) => void;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -7,14 +7,14 @@ import { useNetworks } from '../context/NetworksContext';
|
||||
|
||||
import { StackParamsList } from '../types';
|
||||
import useGetOrCreateAccounts from './useGetOrCreateAccounts';
|
||||
import { retrieveAccountsForNetwork } from '../utils/accounts';
|
||||
import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData, isWalletCreated } 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) => {
|
||||
@ -35,6 +35,57 @@ export const useWebViewHandler = () => {
|
||||
}
|
||||
}, [getOrCreateAccountsForChain]);
|
||||
|
||||
// Import account using mnemonic
|
||||
const handleImportAccount = useCallback(async (chainId: string, mnemonic: string) => {
|
||||
try {
|
||||
// Get available networks data
|
||||
const networksData = await retrieveNetworksData();
|
||||
|
||||
if (!networksData || networksData.length === 0) {
|
||||
window.Android?.onAccountError?.('No networks configured');
|
||||
return;
|
||||
}
|
||||
|
||||
// Create wallet using the provided mnemonic if it doesn't exist
|
||||
const walletExists = await isWalletCreated();
|
||||
if (!walletExists) {
|
||||
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('Import account error:', error);
|
||||
window.Android?.onAccountError?.(`Import failed: ${error}`);
|
||||
}
|
||||
}, [setNetworksData, setSelectedNetwork, setAccounts]);
|
||||
|
||||
// Core navigation handler
|
||||
const navigateToSignRequest = useCallback((message: string) => {
|
||||
try {
|
||||
@ -146,13 +197,16 @@ 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, handleGetOrCreateAccount, handleImportAccount]); // Only the function reference as dependency
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user