UNPKG

eth-json-rpc-middleware

Version:
51 lines 2.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBlockRefMiddleware = void 0; const json_rpc_engine_1 = require("json-rpc-engine"); const clone_1 = __importDefault(require("clone")); const pify_1 = __importDefault(require("pify")); const logging_utils_1 = require("./logging-utils"); const cache_1 = require("./utils/cache"); const log = logging_utils_1.createModuleLogger(logging_utils_1.projectLogger, 'block-ref'); function createBlockRefMiddleware({ provider, blockTracker, } = {}) { if (!provider) { throw Error('BlockRefMiddleware - mandatory "provider" option is missing.'); } if (!blockTracker) { throw Error('BlockRefMiddleware - mandatory "blockTracker" option is missing.'); } return json_rpc_engine_1.createAsyncMiddleware(async (req, res, next) => { var _a, _b; const blockRefIndex = cache_1.blockTagParamIndex(req); // skip if method does not include blockRef if (blockRefIndex === undefined) { return next(); } const blockRef = (_b = (_a = req.params) === null || _a === void 0 ? void 0 : _a[blockRefIndex]) !== null && _b !== void 0 ? _b : 'latest'; // skip if not "latest" if (blockRef !== 'latest') { log('blockRef is not "latest", carrying request forward'); return next(); } // lookup latest block const latestBlockNumber = await blockTracker.getLatestBlock(); log(`blockRef is "latest", setting param ${blockRefIndex} to latest block ${latestBlockNumber}`); // create child request with specific block-ref const childRequest = clone_1.default(req); if (childRequest.params) { childRequest.params[blockRefIndex] = latestBlockNumber; } // perform child request log('Performing another request %o', childRequest); const childRes = await pify_1.default(provider.sendAsync).call(provider, childRequest); // copy child response onto original response res.result = childRes.result; res.error = childRes.error; return undefined; }); } exports.createBlockRefMiddleware = createBlockRefMiddleware; //# sourceMappingURL=block-ref.js.map