import type { Plugin, PluginAPI } from "@lumeweb/interface-relay"; import fetch, { Request, RequestInit } from "node-fetch"; const EXECUTION_RPC_URL = "https://g.w.lavanet.xyz:443/gateway/eth/rpc-http/f195d68175eb091ec1f71d00f8952b85"; const CONSENSUS_RPC_URL = "https://www.lightclientdata.org"; async function doFetch(url: string, request: RequestInit) { sanitizeRequestArgs(request); let req = new Request(url, request); const resp = await fetch(req); return (await resp.json()) as any; } function sanitizeRequestArgs(request: RequestInit) { if (!request || typeof request !== "object") { throw Error("invalid request"); } [ "agent", "hostname", "referrer", "referrerPolicy", "compress", "port", "protocol", "hostname", "insecureHTTPParser", "highWaterMark", "size", ].forEach((element) => { if (element in request) { delete request[element]; } }); } const plugin: Plugin = { name: "eth", async plugin(api: PluginAPI): Promise { api.registerMethod("execution_request", { cacheable: false, async handler(request: RequestInit): Promise { return doFetch(EXECUTION_RPC_URL, request); }, }); api.registerMethod("consensus_request", { cacheable: false, async handler(request: RequestInit): Promise { return doFetch(CONSENSUS_RPC_URL, request); }, }); }, }; export default plugin;