Skip to content

Commit 172f1e5

Browse files
committed
feat: Add providerAsMiddlewareV2
1 parent 57fcfd7 commit 172f1e5

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

eslint-warning-thresholds.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
"jsdoc/match-description": 4
181181
},
182182
"packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.ts": {
183-
"jsdoc/require-jsdoc": 1
183+
"jsdoc/require-jsdoc": 2
184184
},
185185
"packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.ts": {
186186
"jsdoc/require-jsdoc": 1

packages/eth-json-rpc-middleware/src/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe('index module', () => {
1313
"createRetryOnEmptyMiddleware": [Function],
1414
"createWalletMiddleware": [Function],
1515
"providerAsMiddleware": [Function],
16+
"providerAsMiddlewareV2": [Function],
1617
}
1718
`);
1819
});
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
2+
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
3+
import { JsonRpcEngineV2 } from '@metamask/json-rpc-engine/v2';
4+
import { assertIsJsonRpcSuccess, Json } from '@metamask/utils';
5+
6+
import { providerAsMiddleware, providerAsMiddlewareV2 } from './providerAsMiddleware';
7+
import { createRequest } from '../test/util/helpers';
8+
9+
const createMockProvider = (result: Json): SafeEventEmitterProvider =>
10+
({
11+
request: jest.fn().mockResolvedValue(result),
12+
} as unknown as SafeEventEmitterProvider);
13+
14+
describe('providerAsMiddleware', () => {
15+
it('forwards requests to the provider and returns the result', async () => {
16+
const mockResult = 42;
17+
const mockProvider = createMockProvider(mockResult);
18+
19+
const engine = new JsonRpcEngine();
20+
engine.push(providerAsMiddleware(mockProvider));
21+
22+
const request = createRequest({
23+
method: 'eth_chainId',
24+
params: [],
25+
});
26+
27+
await new Promise<void>((resolve) => {
28+
engine.handle(request, (error, response) => {
29+
expect(error).toBeNull();
30+
expect(response).toBeDefined();
31+
assertIsJsonRpcSuccess(response);
32+
expect(response.result).toEqual(mockResult);
33+
expect(mockProvider.request).toHaveBeenCalledWith(request);
34+
resolve();
35+
});
36+
});
37+
});
38+
});
39+
40+
describe('providerAsMiddlewareV2', () => {
41+
it('forwards requests to the provider and returns the result', async () => {
42+
const mockResult = 123;
43+
const mockProvider = createMockProvider(mockResult);
44+
45+
const engine = JsonRpcEngineV2.create({
46+
middleware: [providerAsMiddlewareV2(mockProvider)],
47+
});
48+
49+
const request = createRequest({
50+
method: 'eth_chainId',
51+
params: [],
52+
});
53+
54+
const result = await engine.handle(request);
55+
56+
expect(result).toEqual(mockResult);
57+
expect(mockProvider.request).toHaveBeenCalledWith(request);
58+
});
59+
});
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
22
import {
33
createAsyncMiddleware,
4-
type JsonRpcMiddleware,
4+
type JsonRpcMiddleware as LegacyJsonRpcMiddleware,
55
} from '@metamask/json-rpc-engine';
6-
import type { Json, JsonRpcParams } from '@metamask/utils';
6+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
7+
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
78

89
export function providerAsMiddleware(
910
provider: InternalProvider,
10-
): JsonRpcMiddleware<JsonRpcParams, Json> {
11+
): LegacyJsonRpcMiddleware<JsonRpcParams, Json> {
1112
return createAsyncMiddleware(async (req, res) => {
1213
res.result = await provider.request(req);
1314
});
1415
}
16+
17+
export function providerAsMiddlewareV2(
18+
provider: InternalProvider,
19+
): JsonRpcMiddleware<JsonRpcRequest, Json> {
20+
return async ({ request }) => provider.request(request);
21+
}

0 commit comments

Comments
 (0)