eth-json-rpc-middleware
Version:
Ethereum-related json-rpc-engine middleware.
39 lines • 1.95 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBlockTrackerInspectorMiddleware = void 0;
const json_rpc_engine_1 = require("json-rpc-engine");
const logging_utils_1 = require("./logging-utils");
const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'block-tracker-inspector');
const futureBlockRefRequests = [
'eth_getTransactionByHash',
'eth_getTransactionReceipt',
];
// inspect if response contains a block ref higher than our latest block
function createBlockTrackerInspectorMiddleware({ blockTracker, }) {
return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => {
var _a;
if (!futureBlockRefRequests.includes(req.method)) {
return next();
}
// eslint-disable-next-line node/callback-return
await next();
// abort if no result or no block number
if (!((_a = res.result) === null || _a === void 0 ? void 0 : _a.blockNumber)) {
return undefined;
}
log('res.result.blockNumber exists, proceeding. res = %o', res);
if (typeof res.result.blockNumber === 'string') {
// if number is higher, suggest block-tracker check for a new block
const blockNumber = Number.parseInt(res.result.blockNumber, 16);
// Typecast: If getCurrentBlock returns null, currentBlockNumber will be NaN, which is fine.
const currentBlockNumber = Number.parseInt(blockTracker.getCurrentBlock(), 16);
if (blockNumber > currentBlockNumber) {
log('blockNumber from response is greater than current block number, refreshing current block number');
await blockTracker.checkForLatestBlock();
}
}
return undefined;
});
}
exports.createBlockTrackerInspectorMiddleware = createBlockTrackerInspectorMiddleware;
//# sourceMappingURL=block-tracker-inspector.js.map
;