Update server/status.js

Add Fulcrum query diagnostics
This commit is contained in:
2026-08-28 16:04:38 +00:00
parent 553b54d133
commit c8529489a1
+51 -10
View File
@@ -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,
};
}