@rarible/estimate-middleware
Version:
30 lines (29 loc) • 1.19 kB
JavaScript
import { createFetchMiddleware, providerAsMiddleware, providerFromEngine } from "eth-json-rpc-middleware";
import { JsonRpcEngine } from "json-rpc-engine";
import { createEstimateGasMiddleware } from "./middleware.js";
import { isSafeEventEmitterProvider } from "./utils.js";
export function estimate(provider, options = {}) {
if (isSafeEventEmitterProvider(provider)) {
const engine = new JsonRpcEngine();
const estimateEngine = getEstimateEngine(provider, options.estimation);
engine.push(createEstimateGasMiddleware(estimateEngine, options.force, options.threshold));
engine.push(providerAsMiddleware(provider));
return providerFromEngine(engine);
}
return provider;
}
function getEstimateEngine(provider, estimate) {
if (estimate === undefined) {
const estimateEngine = new JsonRpcEngine();
estimateEngine.push(providerAsMiddleware(provider));
return estimateEngine;
}
else if (typeof estimate === "string") {
const engine = new JsonRpcEngine();
engine.push(createFetchMiddleware({ rpcUrl: estimate }));
return engine;
}
else {
return estimate;
}
}