standardize API error strings & validation

This commit is contained in:
Mononaut
2024-12-19 12:50:17 +00:00
parent 01df22ef86
commit 47044db043
10 changed files with 284 additions and 169 deletions

View File

@@ -3,6 +3,8 @@ import { Application, Request, Response } from 'express';
import channelsApi from './channels.api';
import { handleError } from '../../utils/api';
const TXID_REGEX = /^[a-f0-9]{64}$/i;
class ChannelsRoutes {
constructor() { }
@@ -23,7 +25,7 @@ class ChannelsRoutes {
const channels = await channelsApi.$searchChannelsById(req.params.search);
res.json(channels);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to search channels by id');
}
}
@@ -39,7 +41,7 @@ class ChannelsRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(channel);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get channel');
}
}
@@ -70,7 +72,7 @@ class ChannelsRoutes {
res.header('X-Total-Count', channelsCount.toString());
res.json(channels);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get channels for node');
}
}
@@ -83,7 +85,10 @@ class ChannelsRoutes {
const txIds: string[] = [];
for (const _txId in req.query.txId) {
if (typeof req.query.txId[_txId] === 'string') {
txIds.push(req.query.txId[_txId].toString());
const txid = req.query.txId[_txId].toString();
if (TXID_REGEX.test(txid)) {
txIds.push(txid);
}
}
}
const channels = await channelsApi.$getChannelsByTransactionId(txIds);
@@ -108,7 +113,7 @@ class ChannelsRoutes {
res.json(result);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get channels by transaction ids');
}
}
@@ -120,7 +125,7 @@ class ChannelsRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(channels);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get penalty closed channels');
}
}
@@ -133,7 +138,7 @@ class ChannelsRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(channels);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get channel geodata');
}
}

View File

@@ -29,7 +29,7 @@ class GeneralLightningRoutes {
channels: channels,
});
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to search for nodes and channels');
}
}
@@ -43,7 +43,7 @@ class GeneralLightningRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(statistics);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get lightning statistics');
}
}
@@ -52,7 +52,7 @@ class GeneralLightningRoutes {
const statistics = await statisticsApi.$getLatestStatistics();
res.json(statistics);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get lightning statistics');
}
}
}

View File

@@ -32,7 +32,7 @@ class NodesRoutes {
const nodes = await nodesApi.$searchNodeByPublicKeyOrAlias(req.params.search);
res.json(nodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to search for node');
}
}
@@ -188,7 +188,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(nodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get node group');
}
}
@@ -204,7 +204,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(node);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get node');
}
}
@@ -216,7 +216,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(statistics);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get historical node stats');
}
}
@@ -232,7 +232,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(node);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get fee histogram');
}
}
@@ -248,7 +248,7 @@ class NodesRoutes {
topByChannels: topChannelsNodes,
});
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get nodes ranking');
}
}
@@ -260,7 +260,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(topCapacityNodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get top nodes by capacity');
}
}
@@ -272,7 +272,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(topCapacityNodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get top nodes by channels');
}
}
@@ -284,7 +284,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(topCapacityNodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get oldest nodes');
}
}
@@ -296,7 +296,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString());
res.json(nodesPerAs);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get ISP ranking');
}
}
@@ -308,7 +308,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString());
res.json(worldNodes);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get world nodes');
}
}
@@ -336,7 +336,7 @@ class NodesRoutes {
nodes: nodes,
});
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get nodes per country');
}
}
@@ -363,7 +363,7 @@ class NodesRoutes {
nodes: nodes,
});
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get nodes per ISP');
}
}
@@ -375,7 +375,7 @@ class NodesRoutes {
res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString());
res.json(nodesPerAs);
} catch (e) {
handleError(req, res, 500, e instanceof Error ? e.message : e);
handleError(req, res, 500, 'Failed to get nodes per country');
}
}
}