From 0864310713d8f263a39d9c716343d671c2b9ce9e Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Fri, 8 Sep 2023 02:03:11 +0000 Subject: [PATCH] import and type migrations --- package.json | 4 ++-- src/create-infura-middleware.ts | 41 +++++++++++++++++++++------------ src/create-provider.ts | 2 +- src/fetch-config-from-req.ts | 8 +++---- src/types.ts | 7 +++--- 5 files changed, 36 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 959e11f..5a8f937 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,9 @@ }, "dependencies": { "@metamask/eth-json-rpc-provider": "^2.1.0", - "@metamask/utils": "^8.1.0", - "@metamask/rpc-errors": "^6.0.0", "@metamask/json-rpc-engine": "^7.1.1", + "@metamask/rpc-errors": "^6.0.0", + "@metamask/utils": "^8.1.0", "node-fetch": "^2.6.7" }, "devDependencies": { diff --git a/src/create-infura-middleware.ts b/src/create-infura-middleware.ts index 363718d..4c7f878 100644 --- a/src/create-infura-middleware.ts +++ b/src/create-infura-middleware.ts @@ -1,7 +1,7 @@ -import type { EthereumRpcError } from 'eth-rpc-errors'; -import { ethErrors } from 'eth-rpc-errors'; -import { createAsyncMiddleware } from 'json-rpc-engine'; -import type { PendingJsonRpcResponse } from 'json-rpc-engine'; +import { createAsyncMiddleware } from '@metamask/json-rpc-engine'; +import type { JsonRpcError } from '@metamask/rpc-errors'; +import { rpcErrors } from '@metamask/rpc-errors'; +import type { JsonRpcParams, PendingJsonRpcResponse } from '@metamask/utils'; // eslint-disable-next-line @typescript-eslint/no-shadow import fetch from 'node-fetch'; @@ -33,7 +33,7 @@ const RETRIABLE_ERRORS = [ ]; /** - * Builds [`json-rpc-engine`](https://github.com/MetaMask/json-rpc-engine)-compatible middleware designed + * Builds [`@metamask/json-rpc-engine`](https://github.com/MetaMask/@metamask/json-rpc-engine)-compatible middleware designed * for interfacing with Infura's JSON-RPC endpoints. * @param opts - The options. * @param opts.network - A network that Infura supports; plugs into @@ -44,7 +44,7 @@ const RETRIABLE_ERRORS = [ * by Infura for analytics purposes. * @param opts.projectId - The Infura project id. * @param opts.headers - Extra headers that will be used to make the request. - * @returns The `json-rpc-engine`-compatible middleware. + * @returns The `@metamask/json-rpc-engine`-compatible middleware. */ export function createInfuraMiddleware({ network = 'mainnet', @@ -81,7 +81,16 @@ export function createInfuraMiddleware({ headers, req, ); - await performFetch(network, projectId, headers, req, res, source); + + await performFetch( + network, + projectId, + headers, + req, + // TODO: investigate type mismatch + res as any, + source, + ); // request was successful break; } catch (err: any) { @@ -146,8 +155,8 @@ async function performFetch( network: InfuraJsonRpcSupportedNetwork, projectId: string, extraHeaders: RequestHeaders, - req: ExtendedJsonRpcRequest, - res: PendingJsonRpcResponse, + req: ExtendedJsonRpcRequest, + res: PendingJsonRpcResponse, source: string | undefined, ): Promise { const { fetchUrl, fetchParams } = fetchConfigFromReq({ @@ -163,7 +172,7 @@ async function performFetch( if (!response.ok) { switch (response.status) { case 405: - throw ethErrors.rpc.methodNotFound(); + throw rpcErrors.methodNotFound(); case 429: throw createRatelimitError(); @@ -179,7 +188,9 @@ async function performFetch( // special case for now if (req.method === 'eth_getBlockByNumber' && rawData === 'Not Found') { - res.result = null; + // TODO Would this be more correct? + // delete res.result; + res.result = null as any as JsonRpcParams; return; } @@ -196,7 +207,7 @@ async function performFetch( * error. * @returns The error object. */ -function createRatelimitError(): EthereumRpcError { +function createRatelimitError(): JsonRpcError { const msg = `Request is being rate limited.`; return createInternalError(msg); } @@ -205,7 +216,7 @@ function createRatelimitError(): EthereumRpcError { * Builds a JSON-RPC 2.0 internal error object describing a timeout error. * @returns The error object. */ -function createTimeoutError(): EthereumRpcError { +function createTimeoutError(): JsonRpcError { let msg = `Gateway timeout. The request took too long to process. `; msg += `This can happen when querying logs over too wide a block range.`; return createInternalError(msg); @@ -216,8 +227,8 @@ function createTimeoutError(): EthereumRpcError { * @param msg - The message. * @returns The error object. */ -function createInternalError(msg: string): EthereumRpcError { - return ethErrors.rpc.internal(msg); +function createInternalError(msg: string): JsonRpcError { + return rpcErrors.internal(msg); } /** diff --git a/src/create-provider.ts b/src/create-provider.ts index 0941ff0..cd681d4 100644 --- a/src/create-provider.ts +++ b/src/create-provider.ts @@ -1,6 +1,6 @@ import { providerFromEngine } from '@metamask/eth-json-rpc-provider'; import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; -import { JsonRpcEngine } from 'json-rpc-engine'; +import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import type { CreateInfuraMiddlewareOptions } from './create-infura-middleware'; import { createInfuraMiddleware } from './create-infura-middleware'; diff --git a/src/fetch-config-from-req.ts b/src/fetch-config-from-req.ts index 70111f8..484762f 100644 --- a/src/fetch-config-from-req.ts +++ b/src/fetch-config-from-req.ts @@ -1,4 +1,4 @@ -import type { JsonRpcRequest } from 'json-rpc-engine'; +import type { JsonRpcParams, JsonRpcRequest } from '@metamask/utils'; import type { ExtendedJsonRpcRequest, @@ -41,7 +41,7 @@ export function fetchConfigFromReq({ network: InfuraJsonRpcSupportedNetwork; projectId: string; extraHeaders?: RequestHeaders; - req: ExtendedJsonRpcRequest; + req: ExtendedJsonRpcRequest; source?: string; }): FetchConfig { // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing @@ -72,8 +72,8 @@ export function fetchConfigFromReq({ * @returns An object that describes a JSON-RPC request. */ function normalizeReq( - req: ExtendedJsonRpcRequest, -): JsonRpcRequest { + req: ExtendedJsonRpcRequest, +): JsonRpcRequest { return { id: req.id, jsonrpc: req.jsonrpc, diff --git a/src/types.ts b/src/types.ts index ee3cffd..3b348c8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,9 @@ -import type { JsonRpcRequest } from 'json-rpc-engine'; +import type { JsonRpcParams, JsonRpcRequest } from '@metamask/utils'; export type RequestHeaders = Record; -export type ExtendedJsonRpcRequest = JsonRpcRequest & { - origin?: string; -}; +export type ExtendedJsonRpcRequest = + JsonRpcRequest & { origin?: string }; /** * These are networks: