UNPKG

3.27 kBSource Map (JSON)View Raw
1{"version":3,"file":"block-ref.js","sourceRoot":"","sources":["../src/block-ref.ts"],"names":[],"mappings":";;;;;;AACA,qDAIyB;AACzB,kDAA0B;AAC1B,gDAAwB;AACxB,yCAIuB;AAOvB,SAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,YAAY,MACiB,EAAE;IAC/B,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,KAAK,CAAC,8DAA8D,CAAC,CAAC;KAC7E;IACD,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,KAAK,CACT,kEAAkE,CACnE,CAAC;KACH;IAED,OAAO,uCAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;;QACpD,MAAM,aAAa,GAAuB,0BAAkB,CAAC,GAAG,CAAC,CAAC;QAClE,2CAA2C;QAC3C,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,OAAO,IAAI,EAAE,CAAC;SACf;QACD,uBAAuB;QACvB,IAAI,QAAQ,SAAuB,GAAG,CAAC,MAAM,0CAAG,aAAa,CAAC,CAAC;QAC/D,oCAAoC;QACpC,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,QAAQ,GAAG,QAAQ,CAAC;SACrB;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,OAAO,IAAI,EAAE,CAAC;SACf;QACD,sBAAsB;QACtB,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9D,+CAA+C;QAC/C,MAAM,YAAY,GAAG,eAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;SACxD;QACD,wBAAwB;QACxB,MAAM,QAAQ,GAAkC,MAAM,cAAI,CACvD,QAAqC,CAAC,SAAS,CACjD,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/B,6CAA6C;QAC7C,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC7B,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC3B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AA5CD,4DA4CC","sourcesContent":["import { PollingBlockTracker } from 'eth-block-tracker';\nimport {\n createAsyncMiddleware,\n JsonRpcMiddleware,\n PendingJsonRpcResponse,\n} from 'json-rpc-engine';\nimport clone from 'clone';\nimport pify from 'pify';\nimport {\n Block,\n SafeEventEmitterProvider,\n blockTagParamIndex,\n} from './utils/cache';\n\ninterface BlockRefMiddlewareOptions {\n blockTracker?: PollingBlockTracker;\n provider?: SafeEventEmitterProvider;\n}\n\nexport function createBlockRefMiddleware({\n provider,\n blockTracker,\n}: BlockRefMiddlewareOptions = {}): JsonRpcMiddleware<string[], Block> {\n if (!provider) {\n throw Error('BlockRefMiddleware - mandatory \"provider\" option is missing.');\n }\n if (!blockTracker) {\n throw Error(\n 'BlockRefMiddleware - mandatory \"blockTracker\" option is missing.',\n );\n }\n\n return createAsyncMiddleware(async (req, res, next) => {\n const blockRefIndex: number | undefined = blockTagParamIndex(req);\n // skip if method does not include blockRef\n if (blockRefIndex === undefined) {\n return next();\n }\n // skip if not \"latest\"\n let blockRef: string | undefined = req.params?.[blockRefIndex];\n // omitted blockRef implies \"latest\"\n if (blockRef === undefined) {\n blockRef = 'latest';\n }\n if (blockRef !== 'latest') {\n return next();\n }\n // lookup latest block\n const latestBlockNumber = await blockTracker.getLatestBlock();\n // create child request with specific block-ref\n const childRequest = clone(req);\n if (childRequest.params) {\n childRequest.params[blockRefIndex] = latestBlockNumber;\n }\n // perform child request\n const childRes: PendingJsonRpcResponse<Block> = await pify(\n (provider as SafeEventEmitterProvider).sendAsync,\n ).call(provider, childRequest);\n // copy child response onto original response\n res.result = childRes.result;\n res.error = childRes.error;\n return next();\n });\n}\n"]}
\No newline at end of file