From 52d6dfe200b2204786659afb1e1ddd0cc7f9d7ea Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 19 Aug 2025 14:49:22 +0530 Subject: [PATCH] Handle webView Java bridge undefined values --- package.json | 2 +- src/global.d.ts | 3 --- src/hooks/useWebViewHandler.ts | 20 +++++++------------- src/utils/key-store.ts | 22 +++++++++------------- 4 files changed, 17 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index fcf0e1c..8a8f495 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "web-wallet", - "version": "0.1.7-nym-0.1.2", + "version": "0.1.7-nym-0.1.3", "private": true, "dependencies": { "@cerc-io/registry-sdk": "^0.2.5", diff --git a/src/global.d.ts b/src/global.d.ts index 501f4a0..8800b97 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -3,9 +3,6 @@ declare global { interface Window { // Android bridge callbacks for signature and accounts related events Android?: { - // Check if running in Android WebView environment - isAndroidWebView(): boolean; - // Store a key-value pair securely in encrypted storage setItem(key: string, value: string): boolean; diff --git a/src/hooks/useWebViewHandler.ts b/src/hooks/useWebViewHandler.ts index c5c44d4..2825764 100644 --- a/src/hooks/useWebViewHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -8,7 +8,6 @@ import { useNetworks } from '../context/NetworksContext'; import { StackParamsList } from '../types'; import useGetOrCreateAccounts from './useGetOrCreateAccounts'; import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData, isWalletCreated } from '../utils/accounts'; -import { getInternetCredentials } from '../utils/key-store'; export const useWebViewHandler = () => { // Navigation and context hooks @@ -41,15 +40,18 @@ export const useWebViewHandler = () => { try { // Get available networks data const networksData = await retrieveNetworksData(); - + if (!networksData || networksData.length === 0) { window.Android?.onAccountError?.('No networks configured'); return; } - - // Check if wallet exists and if account data exists for the requested network + + // 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) { @@ -57,14 +59,6 @@ export const useWebViewHandler = () => { return; } - // Check if account data exists for this network - const accountKey = `accounts/${requestedNetwork.namespace}:${requestedNetwork.chainId}/0`; - const accountData = await getInternetCredentials(accountKey); - - if (!walletExists || !accountData) { - await createWallet(networksData, mnemonic); - } - // Update networks context setNetworksData(networksData); setSelectedNetwork(requestedNetwork); diff --git a/src/utils/key-store.ts b/src/utils/key-store.ts index d096aec..f19ba5c 100644 --- a/src/utils/key-store.ts +++ b/src/utils/key-store.ts @@ -1,29 +1,25 @@ -// Check if running in Android WebView with secure storage available -const isAndroidSecureStorageAvailable = (): boolean => { - return typeof window !== 'undefined' && - window.Android !== undefined && - window.Android.isAndroidWebView(); -}; - const setInternetCredentials = (name:string, username:string, password:string) => { - if (isAndroidSecureStorageAvailable()) { - window.Android!.setItem(name, password); + if (window.Android?.setItem) { + window.Android.setItem(name, password); } else { localStorage.setItem(name, password); } }; const getInternetCredentials = (name:string) : string | null => { - if (isAndroidSecureStorageAvailable()) { - return window.Android!.getItem(name); + if (window.Android?.getItem) { + const result = window.Android.getItem(name); + + // Normalize undefined to null to match localStorage behavior + return result === undefined ? null : result; } else { return localStorage.getItem(name); } }; const resetInternetCredentials = (name:string) => { - if (isAndroidSecureStorageAvailable()) { - window.Android!.removeItem(name); + if (window.Android?.removeItem) { + window.Android.removeItem(name); } else { localStorage.removeItem(name); }