From fc4cedb63030c406a64c588cd3a0e7923e73c576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Schj=C3=B8nhaug?= Date: Mon, 16 Jun 2025 15:26:16 +0200 Subject: [PATCH] fix: make deriveAddress consistently throw errors Updated deriveAddress function to always throw errors instead of inconsistently logging with logger.error and returning null. Updated all call sites to handle thrown errors with try-catch blocks. --- server/io/addDescriptor.js | 9 +++++---- server/io/editDescriptor.js | 9 +++++---- server/lib/descriptors.js | 14 +++++++------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/server/io/addDescriptor.js b/server/io/addDescriptor.js index 2579433..28dffc4 100644 --- a/server/io/addDescriptor.js +++ b/server/io/addDescriptor.js @@ -43,10 +43,11 @@ export default async ({ data, io }) => { } // Validate by trying to derive the first address - const testAddress = deriveAddress(data.descriptor, 0); - if (!testAddress) { - logger.error(`Invalid descriptor: Could not derive address`); - return { error: "Invalid descriptor: Could not derive address" }; + try { + deriveAddress(data.descriptor, 0); + } catch (error) { + logger.error(`Invalid descriptor: ${error.message}`); + return { error: `Invalid descriptor: ${error.message}` }; } // If the descriptor is just an extended key, wrap it in the appropriate format diff --git a/server/io/editDescriptor.js b/server/io/editDescriptor.js index 0352d8a..3d472be 100644 --- a/server/io/editDescriptor.js +++ b/server/io/editDescriptor.js @@ -45,10 +45,11 @@ export default async ({ data, io }) => { } // Validate by trying to derive the first address - const testAddress = deriveAddress(data.descriptor, 0); - if (!testAddress) { - logger.error(`Invalid descriptor: Could not derive address`); - return { error: "Invalid descriptor: Could not derive address" }; + try { + deriveAddress(data.descriptor, 0); + } catch (error) { + logger.error(`Invalid descriptor: ${error.message}`); + return { error: `Invalid descriptor: ${error.message}` }; } // Get all addresses in one batch const allAddressesResult = await deriveAddresses( diff --git a/server/lib/descriptors.js b/server/lib/descriptors.js index c19842e..0e1a74b 100644 --- a/server/lib/descriptors.js +++ b/server/lib/descriptors.js @@ -221,15 +221,16 @@ export const deriveAddresses = (descriptor, startIndex, count, skip = 0) => { const addresses = []; for (let i = 0; i < count; i++) { const index = startIndex + skip + i; - const address = deriveAddress(descriptor, index); - if (!address) { - logger.error(`Failed to derive address at index ${index}`); + try { + const address = deriveAddress(descriptor, index); + addresses.push(address); + } catch (error) { + logger.error(`Failed to derive address at index ${index}: ${error.message}`); return { success: false, - error: `Failed to derive address at index ${index}`, + error: `Failed to derive address at index ${index}: ${error.message}`, }; } - addresses.push(address); } return { success: true, @@ -330,8 +331,7 @@ export const deriveAddress = (descriptor, index) => { } if (!payment?.address) { - logger.error("Failed to generate address"); - return null; + throw new Error("Failed to generate address"); } return {