Skip to content
This repository was archived by the owner on Oct 16, 2025. It is now read-only.

Commit 3910dad

Browse files
deps: Bump and align json-rpc packages (#245)
* Bump @metamask/eth-json-rpc-provider from 1.0.0 to 2.0.0 Bumps [@metamask/eth-json-rpc-provider](https://github.com/MetaMask/eth-json-rpc-provider) from 1.0.0 to 2.0.0. - [Release notes](https://github.com/MetaMask/eth-json-rpc-provider/releases) - [Changelog](https://github.com/MetaMask/eth-json-rpc-provider/blob/main/CHANGELOG.md) - [Commits](MetaMask/eth-json-rpc-provider@v1.0.0...v2.0.0) --- updated-dependencies: - dependency-name: "@metamask/eth-json-rpc-provider" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * deps: @metamask/eth-json-rpc-provider@^2.0.0->^2.1.0 * deps: eth-block-tracker@^7.0.1->^8.0.0 * deps: json-rpc-engine@^6.1.0 -> @metamask/json-rpc-engine@^7.1.0; @metamask/rpc-errors@^6.1.0 * Update usage after dependencies updates --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent 20d77de commit 3910dad

21 files changed

Lines changed: 391 additions & 351 deletions

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module.exports = {
88
files: ['*.ts'],
99
extends: ['@metamask/eslint-config-typescript'],
1010
rules: {
11+
'@typescript-eslint/prefer-nullish-coalescing': 'off',
1112
// TODO: resolve warnings and remove to make into errors
1213
'@typescript-eslint/consistent-type-definitions': 'off',
1314
'@typescript-eslint/naming-convention': 'off',

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@
2828
"test:watch": "jest --watch"
2929
},
3030
"dependencies": {
31-
"@metamask/eth-json-rpc-provider": "^1.0.0",
31+
"@metamask/eth-json-rpc-provider": "^2.1.0",
3232
"@metamask/eth-sig-util": "^7.0.0",
33+
"@metamask/json-rpc-engine": "^7.1.1",
34+
"@metamask/rpc-errors": "^6.0.0",
3335
"@metamask/utils": "^8.1.0",
3436
"clone": "^2.1.1",
35-
"eth-block-tracker": "^7.0.1",
36-
"eth-rpc-errors": "^4.0.3",
37-
"json-rpc-engine": "^6.1.0",
37+
"eth-block-tracker": "^8.0.0",
3838
"pify": "^3.0.0",
3939
"safe-stable-stringify": "^2.3.2"
4040
},

src/block-cache.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { providerFromEngine } from '@metamask/eth-json-rpc-provider';
2+
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
23
import { PollingBlockTracker } from 'eth-block-tracker';
3-
import { JsonRpcEngine } from 'json-rpc-engine';
44
import pify from 'pify';
55

66
import { createBlockCacheMiddleware } from '.';

src/block-cache.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { createAsyncMiddleware } from '@metamask/json-rpc-engine';
2+
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
13
import type { PollingBlockTracker } from 'eth-block-tracker';
2-
import type { JsonRpcRequest } from 'json-rpc-engine';
3-
import { createAsyncMiddleware } from 'json-rpc-engine';
44

55
import { projectLogger, createModuleLogger } from './logging-utils';
66
import type {
@@ -51,7 +51,7 @@ class BlockCacheStrategy {
5151
}
5252

5353
async get(
54-
request: JsonRpcRequest<unknown>,
54+
request: JsonRpcRequest,
5555
requestedBlockNumber: string,
5656
): Promise<Block | undefined> {
5757
// lookup block cache
@@ -62,7 +62,7 @@ class BlockCacheStrategy {
6262
}
6363

6464
async set(
65-
request: JsonRpcRequest<unknown>,
65+
request: JsonRpcRequest,
6666
requestedBlockNumber: string,
6767
result: Block,
6868
): Promise<void> {
@@ -81,7 +81,7 @@ class BlockCacheStrategy {
8181
blockCache[identifier] = result;
8282
}
8383

84-
canCacheRequest(request: JsonRpcRequest<unknown>): boolean {
84+
canCacheRequest(request: JsonRpcRequest): boolean {
8585
// check request method
8686
if (!canCache(request.method)) {
8787
return false;
@@ -96,7 +96,7 @@ class BlockCacheStrategy {
9696
return true;
9797
}
9898

99-
canCacheResult(request: JsonRpcRequest<unknown>, result: Block): boolean {
99+
canCacheResult(request: JsonRpcRequest, result: Block): boolean {
100100
// never cache empty values (e.g. undefined)
101101
if (emptyValues.includes(result as any)) {
102102
return false;
@@ -135,7 +135,10 @@ class BlockCacheStrategy {
135135

136136
export function createBlockCacheMiddleware({
137137
blockTracker,
138-
}: BlockCacheMiddlewareOptions = {}): JsonRpcCacheMiddleware<unknown, unknown> {
138+
}: BlockCacheMiddlewareOptions = {}): JsonRpcCacheMiddleware<
139+
JsonRpcParams,
140+
Json
141+
> {
139142
// validate options
140143
if (!blockTracker) {
141144
throw new Error(
@@ -153,7 +156,7 @@ export function createBlockCacheMiddleware({
153156
};
154157

155158
return createAsyncMiddleware(
156-
async (req: JsonRpcRequestToCache<unknown>, res, next) => {
159+
async (req: JsonRpcRequestToCache<JsonRpcParams>, res, next) => {
157160
// allow cach to be skipped if so specified
158161
if (req.skipCache) {
159162
return next();

src/block-ref-rewrite.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
2+
import { createAsyncMiddleware } from '@metamask/json-rpc-engine';
3+
import type { Json, JsonRpcParams } from '@metamask/utils';
14
import type { PollingBlockTracker } from 'eth-block-tracker';
2-
import type { JsonRpcMiddleware } from 'json-rpc-engine';
3-
import { createAsyncMiddleware } from 'json-rpc-engine';
45

56
import { blockTagParamIndex } from './utils/cache';
67

@@ -10,7 +11,10 @@ interface BlockRefRewriteMiddlewareOptions {
1011

1112
export function createBlockRefRewriteMiddleware({
1213
blockTracker,
13-
}: BlockRefRewriteMiddlewareOptions = {}): JsonRpcMiddleware<unknown, unknown> {
14+
}: BlockRefRewriteMiddlewareOptions = {}): JsonRpcMiddleware<
15+
JsonRpcParams,
16+
Json
17+
> {
1418
if (!blockTracker) {
1519
throw Error(
1620
'BlockRefRewriteMiddleware - mandatory "blockTracker" option is missing.',
@@ -24,13 +28,11 @@ export function createBlockRefRewriteMiddleware({
2428
return next();
2529
}
2630
// skip if not "latest"
27-
let blockRef: string | undefined = Array.isArray(req.params)
28-
? req.params[blockRefIndex]
29-
: undefined;
30-
// omitted blockRef implies "latest"
31-
if (blockRef === undefined) {
32-
blockRef = 'latest';
33-
}
31+
const blockRef: string | undefined =
32+
Array.isArray(req.params) && req.params[blockRefIndex]
33+
? (req.params[blockRefIndex] as string)
34+
: // omitted blockRef implies "latest"
35+
'latest';
3436

3537
if (blockRef !== 'latest') {
3638
return next();

src/block-ref.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { providerFromEngine } from '@metamask/eth-json-rpc-provider';
22
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
3+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
4+
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
35
import { PollingBlockTracker } from 'eth-block-tracker';
4-
import type { JsonRpcMiddleware } from 'json-rpc-engine';
5-
import { JsonRpcEngine } from 'json-rpc-engine';
66

77
import { createBlockRefMiddleware } from '.';
88
import {

src/block-ref.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
2-
import clone from 'clone';
3-
import type { PollingBlockTracker } from 'eth-block-tracker';
2+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
3+
import { createAsyncMiddleware } from '@metamask/json-rpc-engine';
44
import type {
5-
JsonRpcMiddleware,
5+
Json,
6+
JsonRpcParams,
67
PendingJsonRpcResponse,
7-
} from 'json-rpc-engine';
8-
import { createAsyncMiddleware } from 'json-rpc-engine';
8+
} from '@metamask/utils';
9+
import clone from 'clone';
10+
import type { PollingBlockTracker } from 'eth-block-tracker';
911
import pify from 'pify';
1012

1113
import { projectLogger, createModuleLogger } from './logging-utils';
@@ -22,7 +24,7 @@ const log = createModuleLogger(projectLogger, 'block-ref');
2224
export function createBlockRefMiddleware({
2325
provider,
2426
blockTracker,
25-
}: BlockRefMiddlewareOptions = {}): JsonRpcMiddleware<unknown, unknown> {
27+
}: BlockRefMiddlewareOptions = {}): JsonRpcMiddleware<JsonRpcParams, Json> {
2628
if (!provider) {
2729
throw Error('BlockRefMiddleware - mandatory "provider" option is missing.');
2830
}

src/block-tracker-inspector.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import type { PollingBlockTracker } from 'eth-block-tracker';
1+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
2+
import { createAsyncMiddleware } from '@metamask/json-rpc-engine';
23
import type {
3-
JsonRpcMiddleware,
4+
Json,
5+
JsonRpcParams,
46
PendingJsonRpcResponse,
5-
} from 'json-rpc-engine';
6-
import { createAsyncMiddleware } from 'json-rpc-engine';
7+
} from '@metamask/utils';
8+
import type { PollingBlockTracker } from 'eth-block-tracker';
79

810
import { projectLogger, createModuleLogger } from './logging-utils';
911

@@ -37,7 +39,7 @@ function hasProperty<ObjectToCheck, Property extends ValidPropertyType>(
3739
}
3840

3941
function getResultBlockNumber(
40-
response: PendingJsonRpcResponse<unknown>,
42+
response: PendingJsonRpcResponse<Json>,
4143
): string | undefined {
4244
const { result } = response;
4345
if (
@@ -58,8 +60,8 @@ function getResultBlockNumber(
5860
export function createBlockTrackerInspectorMiddleware({
5961
blockTracker,
6062
}: BlockTrackerInspectorMiddlewareOptions): JsonRpcMiddleware<
61-
unknown,
62-
unknown
63+
JsonRpcParams,
64+
Json
6365
> {
6466
return createAsyncMiddleware(async (req, res, next) => {
6567
if (!futureBlockRefRequests.includes(req.method)) {

src/fetch.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import type { EthereumRpcError } from 'eth-rpc-errors';
2-
import { ethErrors } from 'eth-rpc-errors';
3-
import type { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine';
4-
import { createAsyncMiddleware } from 'json-rpc-engine';
1+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
2+
import { createAsyncMiddleware } from '@metamask/json-rpc-engine';
3+
import type { JsonRpcError, DataWithOptionalCause } from '@metamask/rpc-errors';
4+
import { rpcErrors } from '@metamask/rpc-errors';
5+
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
56

67
import type { Block } from './types';
78
import { timeout } from './utils/timeout';
@@ -17,7 +18,7 @@ const RETRIABLE_ERRORS: string[] = [
1718
'Failed to fetch',
1819
];
1920

20-
export interface PayloadWithOrigin extends JsonRpcRequest<unknown> {
21+
export interface PayloadWithOrigin extends JsonRpcRequest {
2122
origin?: string;
2223
}
2324
interface Request {
@@ -53,7 +54,7 @@ export function createFetchMiddleware({
5354
fetch: typeof global.fetch;
5455
rpcUrl: string;
5556
originHttpHeaderKey?: string;
56-
}): JsonRpcMiddleware<unknown, unknown> {
57+
}): JsonRpcMiddleware<JsonRpcParams, Json> {
5758
return createAsyncMiddleware(async (req, res, _next) => {
5859
const { fetchUrl, fetchParams } = createFetchConfigFromReq({
5960
btoa,
@@ -104,7 +105,7 @@ function checkForHttpErrors(fetchRes: Response): void {
104105
// check for errors
105106
switch (fetchRes.status) {
106107
case 405:
107-
throw ethErrors.rpc.methodNotFound();
108+
throw rpcErrors.methodNotFound();
108109

109110
case 418:
110111
throw createRatelimitError();
@@ -121,15 +122,15 @@ function checkForHttpErrors(fetchRes: Response): void {
121122
function parseResponse(fetchRes: Response, body: Record<string, Block>): Block {
122123
// check for error code
123124
if (fetchRes.status !== 200) {
124-
throw ethErrors.rpc.internal({
125+
throw rpcErrors.internal({
125126
message: `Non-200 status code: '${fetchRes.status}'`,
126127
data: body,
127128
});
128129
}
129130

130131
// check for rpc error
131132
if (body.error) {
132-
throw ethErrors.rpc.internal({
133+
throw rpcErrors.internal({
133134
data: body.error,
134135
});
135136
}
@@ -165,7 +166,7 @@ export function createFetchConfigFromReq({
165166

166167
// prepare payload
167168
// copy only canonical json rpc properties
168-
const payload: JsonRpcRequest<unknown> = {
169+
const payload: JsonRpcRequest = {
169170
id: req.id,
170171
jsonrpc: req.jsonrpc,
171172
method: req.method,
@@ -215,12 +216,12 @@ function normalizeUrlFromParsed(parsedUrl: URL): string {
215216
return result;
216217
}
217218

218-
function createRatelimitError(): EthereumRpcError<unknown> {
219-
return ethErrors.rpc.internal({ message: `Request is being rate limited.` });
219+
function createRatelimitError(): JsonRpcError<DataWithOptionalCause> {
220+
return rpcErrors.internal({ message: `Request is being rate limited.` });
220221
}
221222

222-
function createTimeoutError(): EthereumRpcError<unknown> {
223+
function createTimeoutError(): JsonRpcError<DataWithOptionalCause> {
223224
let msg = `Gateway timeout. The request took too long to process. `;
224225
msg += `This can happen when querying logs over too wide a block range.`;
225-
return ethErrors.rpc.internal({ message: msg });
226+
return rpcErrors.internal({ message: msg });
226227
}

src/inflight-cache.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { JsonRpcEngine } from 'json-rpc-engine';
1+
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
22
import pify from 'pify';
33

44
import { createInflightCacheMiddleware } from '.';

0 commit comments

Comments
 (0)