diff --git a/server/status.js b/server/status.js index 169f635..8a41ba5 100644 --- a/server/status.js +++ b/server/status.js @@ -10,6 +10,7 @@ function queryFulcrum(fulcrumUrl, method, params = []) { resolve({ ok: false, result: null, + error: 'Fulcrum URL is not configured', }); return; } @@ -22,6 +23,7 @@ function queryFulcrum(fulcrumUrl, method, params = []) { resolve({ ok: false, result: null, + error: 'Invalid Fulcrum URL', }); return; } @@ -30,6 +32,7 @@ function queryFulcrum(fulcrumUrl, method, params = []) { resolve({ ok: false, result: null, + error: 'Fulcrum URL must use tcp://', }); return; } @@ -41,6 +44,7 @@ function queryFulcrum(fulcrumUrl, method, params = []) { resolve({ ok: false, result: null, + error: 'Fulcrum URL is missing host or port', }); return; } @@ -64,18 +68,28 @@ function queryFulcrum(fulcrumUrl, method, params = []) { socket.setTimeout(fulcrumTimeoutMs); socket.on('connect', () => { - socket.write( - JSON.stringify({ - jsonrpc: '2.0', - id: 1, - method, - params, - }) + '\n', + console.log( + `Fulcrum connected for ${method} (${host}:${fulcrumPort})`, ); + + const request = JSON.stringify({ + jsonrpc: '2.0', + id: 1, + method, + params, + }) + '\n'; + + console.log(`Sending Fulcrum request: ${request.trim()}`); + + socket.write(request); }); socket.on('data', (data) => { - response += data.toString(); + const chunk = data.toString(); + + console.log(`Fulcrum response data: ${chunk.trim()}`); + + response += chunk; const lines = response.split('\n'); @@ -91,10 +105,17 @@ function queryFulcrum(fulcrumUrl, method, params = []) { } if (message.error) { + console.error( + `Fulcrum returned an error for ${method}:`, + JSON.stringify(message.error), + ); + finish({ ok: false, result: null, + error: message.error, }); + return; } @@ -102,30 +123,48 @@ function queryFulcrum(fulcrumUrl, method, params = []) { finish({ ok: true, result: message.result, + error: null, }); + return; } } }); socket.on('timeout', () => { + console.error( + `Fulcrum request timed out after ${fulcrumTimeoutMs}ms: ${method}`, + ); + finish({ ok: false, result: null, + error: 'Connection timed out', }); }); - socket.on('error', () => { + socket.on('error', (error) => { + console.error( + `Fulcrum socket error for ${method}:`, + error.message, + ); + finish({ ok: false, result: null, + error: error.message, }); }); - socket.on('close', () => { + socket.on('close', (hadError) => { + console.log( + `Fulcrum socket closed for ${method}; hadError=${hadError}`, + ); + finish({ ok: false, result: null, + error: 'Connection closed before a response was received', }); }); }); @@ -145,6 +184,7 @@ async function getFulcrumStatus(fulcrumUrl) { url: fulcrumUrl, serverVersion: null, blockchainHeight: null, + error: version.error, }; } @@ -163,6 +203,7 @@ async function getFulcrumStatus(fulcrumUrl) { headers.ok && headers.result ? headers.result.height ?? null : null, + error: headers.ok ? null : headers.error, }; }