From 8c872b3861d8dab2ef8fac63b1ac97a5835a8f4c Mon Sep 17 00:00:00 2001 From: Sander Declerck Date: Mon, 3 Nov 2025 14:54:42 +0100 Subject: [PATCH] Better error handling and extract validation logic to a re-usable function. --- packages/safe-chain/src/config/configFile.js | 31 ++++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/safe-chain/src/config/configFile.js b/packages/safe-chain/src/config/configFile.js index cf36b12..901e7d7 100644 --- a/packages/safe-chain/src/config/configFile.js +++ b/packages/safe-chain/src/config/configFile.js @@ -18,15 +18,15 @@ export function getScanTimeout() { const config = readConfigFile(); if (process.env.AIKIDO_SCAN_TIMEOUT_MS) { - const scanTimeout = Number(process.env.AIKIDO_SCAN_TIMEOUT_MS); - if (!Number.isNaN(scanTimeout) && scanTimeout > 0) { + const scanTimeout = validateTimeout(process.env.AIKIDO_SCAN_TIMEOUT_MS); + if (scanTimeout != null) { return scanTimeout; } } if (config.scanTimeout) { - const scanTimeout = Number(config.scanTimeout); - if (!Number.isNaN(scanTimeout) && scanTimeout > 0) { + const scanTimeout = validateTimeout(config.scanTimeout); + if (scanTimeout != null) { return scanTimeout; } } @@ -34,6 +34,19 @@ export function getScanTimeout() { return 10000; // Default to 10 seconds } +/** + * + * @param {any} value + * @returns {number?} + */ +function validateTimeout(value) { + const timeout = Number(value); + if (!Number.isNaN(timeout) && timeout > 0) { + return timeout; + } + return null; +} + /** * @param {import("../api/aikido.js").MalwarePackage[]} data * @param {string | number} version @@ -100,8 +113,14 @@ function readConfigFile() { }; } - const data = fs.readFileSync(configFilePath, "utf8"); - return JSON.parse(data); + try { + const data = fs.readFileSync(configFilePath, "utf8"); + return JSON.parse(data); + } catch { + return { + scanTimeout: undefined, + }; + } } /**