diff --git a/blue_modules/notifications.js b/blue_modules/notifications.js index e9618d776..b27400800 100644 --- a/blue_modules/notifications.js +++ b/blue_modules/notifications.js @@ -190,24 +190,54 @@ function Notifications(props) { * @returns {Promise} Response object from API rest call */ Notifications.majorTomToGroundControl = async function (addresses, hashes, txids) { - if (!Array.isArray(addresses) || !Array.isArray(hashes) || !Array.isArray(txids)) - throw new Error('no addresses or hashes or txids provided'); - const pushToken = await Notifications.getPushToken(); - if (!pushToken || !pushToken.token || !pushToken.os) return; + try { + if (!Array.isArray(addresses) || !Array.isArray(hashes) || !Array.isArray(txids)) { + throw new Error('No addresses, hashes, or txids provided'); + } - const response = await fetch(`${baseURI}/majorTomToGroundControl`, { - method: 'POST', - headers: _getHeaders(), - body: JSON.stringify({ + const pushToken = await Notifications.getPushToken(); + if (!pushToken || !pushToken.token || !pushToken.os) { + return; + } + + const requestBody = JSON.stringify({ addresses, hashes, txids, token: pushToken.token, os: pushToken.os, - }), - }); + }); - return response.json(); + let response; + try { + response = await fetch(`${baseURI}/majorTomToGroundControl`, { + method: 'POST', + headers: _getHeaders(), + body: requestBody, + }); + } catch (networkError) { + console.error('Network request failed:', networkError); + throw networkError; + } + + if (!response.ok) { + return; + } + + const responseText = await response.text(); + if (responseText) { + try { + return JSON.parse(responseText); + } catch (jsonError) { + console.error('Error parsing response JSON:', jsonError); + throw jsonError; + } + } else { + return {}; // Return an empty object if there is no response body + } + } catch (error) { + console.error('Error in majorTomToGroundControl:', error); + } }; /** diff --git a/screen/receive/details.js b/screen/receive/details.js index 37f680f3c..f00b09b68 100644 --- a/screen/receive/details.js +++ b/screen/receive/details.js @@ -107,15 +107,20 @@ const ReceiveDetails = () => { let newAddress; if (address) { setAddressBIP21Encoded(address); - await Notifications.tryToObtainPermissions(receiveAddressButton); - Notifications.majorTomToGroundControl([address], [], []); + try { + await Notifications.tryToObtainPermissions(receiveAddressButton); + Notifications.majorTomToGroundControl([address], [], []); + } catch (error) { + console.error('Error obtaining notifications permissions:', error); + } } else { if (wallet.chain === Chain.ONCHAIN) { try { if (!isElectrumDisabled) newAddress = await Promise.race([wallet.getAddressAsync(), sleep(1000)]); - } catch (_) {} + } catch (error) { + console.warn('Error fetching wallet address (ONCHAIN):', error); + } if (newAddress === undefined) { - // either sleep expired or getAddressAsync threw an exception console.warn('either sleep expired or getAddressAsync threw an exception'); newAddress = wallet._getExternalAddressByIndex(wallet.getNextFreeAddressIndex()); } else { @@ -125,9 +130,10 @@ const ReceiveDetails = () => { try { await Promise.race([wallet.getAddressAsync(), sleep(1000)]); newAddress = wallet.getAddress(); - } catch (_) {} + } catch (error) { + console.warn('Error fetching wallet address (OFFCHAIN):', error); + } if (newAddress === undefined) { - // either sleep expired or getAddressAsync threw an exception console.warn('either sleep expired or getAddressAsync threw an exception'); newAddress = wallet.getAddress(); } else { @@ -135,8 +141,12 @@ const ReceiveDetails = () => { } } setAddressBIP21Encoded(newAddress); - await Notifications.tryToObtainPermissions(receiveAddressButton); - Notifications.majorTomToGroundControl([newAddress], [], []); + try { + await Notifications.tryToObtainPermissions(receiveAddressButton); + Notifications.majorTomToGroundControl([newAddress], [], []); + } catch (error) { + console.error('Error obtaining notifications permissions:', error); + } } }, [wallet, saveToDisk, address, setAddressBIP21Encoded, isElectrumDisabled, sleep]); @@ -167,7 +177,6 @@ const ReceiveDetails = () => { const HeaderRight = useMemo( () => , - [onPressMenuItem, toolTipActions], ); @@ -271,7 +280,7 @@ const ReceiveDetails = () => { } } } catch (error) { - console.debug(error); + console.debug('Error checking balance:', error); } }, intervalMs); @@ -363,10 +372,14 @@ const ReceiveDetails = () => { useFocusEffect( useCallback(() => { const task = InteractionManager.runAfterInteractions(async () => { - if (wallet) { - obtainWalletAddress(); - } else if (!wallet && address) { - setAddressBIP21Encoded(address); + try { + if (wallet) { + await obtainWalletAddress(); + } else if (!wallet && address) { + setAddressBIP21Encoded(address); + } + } catch (error) { + console.error('Error during focus effect:', error); } }); return () => { @@ -423,7 +436,7 @@ const ReceiveDetails = () => { const handleShareButtonPressed = () => { Share.open({ message: currentTab === loc.wallets.details_address ? bip21encoded : wallet.getBIP47PaymentCode() }).catch(error => - console.debug(error), + console.debug('Error sharing:', error), ); };