From 6089085a0a033ffad3ce731485bded57a0407745 Mon Sep 17 00:00:00 2001 From: pranavjadhav007 Date: Wed, 30 Jul 2025 20:15:06 +0530 Subject: [PATCH 1/4] Import account using mnemonic --- src/global.d.ts | 4 +- src/hooks/useWebViewHandler.ts | 71 +++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index e3611ef..ab2343e 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -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; } } diff --git a/src/hooks/useWebViewHandler.ts b/src/hooks/useWebViewHandler.ts index 5b0fb12..070f7ad 100644 --- a/src/hooks/useWebViewHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -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>(); - 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 }; -- 2.45.2 From 92a63208e8c714a772a42ff8f525ad1019c61275 Mon Sep 17 00:00:00 2001 From: pranavjadhav007 Date: Sat, 2 Aug 2025 13:39:52 +0530 Subject: [PATCH 2/4] Restore handleGetOrCreateAccount function --- src/global.d.ts | 5 +++- src/hooks/useWebViewHandler.ts | 43 ++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index ab2343e..c691cf7 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -37,8 +37,11 @@ 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; + receiveImportAccountFromAndroid?: (chainId: string, mnemonic: string) => void; } } diff --git a/src/hooks/useWebViewHandler.ts b/src/hooks/useWebViewHandler.ts index 070f7ad..7c086b9 100644 --- a/src/hooks/useWebViewHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -6,16 +6,37 @@ import { useAccounts } from '../context/AccountsContext'; import { useNetworks } from '../context/NetworksContext'; import { StackParamsList } from '../types'; -import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData } from '../utils/accounts'; +import useGetOrCreateAccounts from './useGetOrCreateAccounts'; +import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData, isWalletCreated } from '../utils/accounts'; export const useWebViewHandler = () => { // Navigation and context hooks const navigation = useNavigation>(); + const { getOrCreateAccountsForChain } = useGetOrCreateAccounts(); const { selectedNetwork, setNetworksData, setSelectedNetwork } = useNetworks(); const { accounts, currentIndex, setAccounts } = useAccounts(); + // Initialize accounts + const handleGetOrCreateAccount = useCallback(async (chainId: string) => { + try { + + const accountsData = await getOrCreateAccountsForChain(chainId); + + if (!accountsData || accountsData.length === 0) { + window.Android?.onAccountError?.('Failed to create/retrieve account'); + + return; + } + + window.Android?.onAccountCreated?.(JSON.stringify(accountsData[0])); + } catch (error) { + console.error('Account operation error:', error); + window.Android?.onAccountError?.(`Operation failed: ${error}`); + } + }, [getOrCreateAccountsForChain]); + // Import account using mnemonic - const handleImportAccount = useCallback(async (mnemonic: string, chainId: string) => { + const handleImportAccount = useCallback(async (chainId: string, mnemonic: string) => { try { // Get available networks data const networksData = await retrieveNetworksData(); @@ -24,10 +45,15 @@ export const useWebViewHandler = () => { window.Android?.onAccountError?.('No networks configured'); return; } - - // Create wallet using the provided mnemonic - await createWallet(networksData, mnemonic); - + console.log('Available networks:', networksData); + // Create wallet using the provided mnemonic if it doesn't exist + const walletExists = await isWalletCreated(); + console.log('Wallet exists:', walletExists); + if (!walletExists) { + console.log('Creating wallet with mnemonic:', mnemonic); + await createWallet(networksData, mnemonic); + } + console.log('Wallet created or already exists'); // Find the requested network const requestedNetwork = networksData.find(network => network.chainId === chainId); if (!requestedNetwork) { @@ -174,12 +200,15 @@ export const useWebViewHandler = () => { window.receiveTransferRequestFromAndroid = navigateToTransfer; + window.receiveGetOrCreateAccountFromAndroid = handleGetOrCreateAccount; + window.receiveImportAccountFromAndroid = handleImportAccount; return () => { window.receiveSignRequestFromAndroid = undefined; window.receiveTransferRequestFromAndroid = undefined; + window.receiveGetOrCreateAccountFromAndroid = undefined; window.receiveImportAccountFromAndroid = undefined; }; - }, [navigateToSignRequest, navigateToTransfer, handleImportAccount]); // Only the function reference as dependency + }, [navigateToSignRequest, navigateToTransfer, handleGetOrCreateAccount, handleImportAccount]); // Only the function reference as dependency }; -- 2.45.2 From 6d57247ebfaf537ca3b9c0e4846247b10d40479d Mon Sep 17 00:00:00 2001 From: pranavjadhav007 Date: Sat, 2 Aug 2025 13:43:13 +0530 Subject: [PATCH 3/4] Remove the unwanted comments --- src/hooks/useWebViewHandler.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/hooks/useWebViewHandler.ts b/src/hooks/useWebViewHandler.ts index 7c086b9..b306a8f 100644 --- a/src/hooks/useWebViewHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -45,15 +45,13 @@ export const useWebViewHandler = () => { window.Android?.onAccountError?.('No networks configured'); return; } - console.log('Available networks:', networksData); + // Create wallet using the provided mnemonic if it doesn't exist const walletExists = await isWalletCreated(); - console.log('Wallet exists:', walletExists); if (!walletExists) { - console.log('Creating wallet with mnemonic:', mnemonic); await createWallet(networksData, mnemonic); } - console.log('Wallet created or already exists'); + // Find the requested network const requestedNetwork = networksData.find(network => network.chainId === chainId); if (!requestedNetwork) { -- 2.45.2 From 80e504d8e335c9ba7f0751a061eb6537c7ed6a9d Mon Sep 17 00:00:00 2001 From: pranavjadhav007 Date: Sat, 2 Aug 2025 17:56:44 +0530 Subject: [PATCH 4/4] Upgrade the laconic wallet web version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c2f4bc8..fcf0e1c 100644 --- a/package.json +++ b/package.json @@ -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", -- 2.45.2