Skip to content

Commit 928ada8

Browse files
committed
refactor: Migrate processTransaction
1 parent 97db3ae commit 928ada8

File tree

4 files changed

+31
-12
lines changed

4 files changed

+31
-12
lines changed

packages/eth-json-rpc-middleware/src/utils/validation.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
validateAndNormalizeKeyholder,
99
validateParams,
1010
} from './validation';
11+
import type { WalletMiddlewareKeyValues } from '../wallet';
1112

1213
jest.mock('@metamask/superstruct', () => ({
1314
...jest.requireActual('@metamask/superstruct'),
@@ -16,7 +17,7 @@ jest.mock('@metamask/superstruct', () => ({
1617

1718
const ADDRESS_MOCK = '0xABCDabcdABCDabcdABCDabcdABCDabcdABCDabcd';
1819
const createContext = () =>
19-
new MiddlewareContext<{ origin: string }>([['origin', 'test']]);
20+
new MiddlewareContext<WalletMiddlewareKeyValues>([['origin', 'test']]);
2021

2122
const STRUCT_ERROR_MOCK = {
2223
failures: () => [

packages/eth-json-rpc-middleware/src/utils/validation.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import type { MiddlewareContext } from '@metamask/json-rpc-engine/v2';
21
import { providerErrors, rpcErrors } from '@metamask/rpc-errors';
32
import type { Struct, StructError } from '@metamask/superstruct';
43
import { validate } from '@metamask/superstruct';
54
import type { Hex } from '@metamask/utils';
65

6+
import type { WalletMiddlewareContext } from '../wallet';
7+
78
/**
89
* Validates and normalizes a keyholder address for transaction- and
910
* signature-related operations.
@@ -17,7 +18,7 @@ import type { Hex } from '@metamask/utils';
1718
*/
1819
export async function validateAndNormalizeKeyholder(
1920
address: Hex,
20-
context: MiddlewareContext<{ origin: string }>,
21+
context: WalletMiddlewareContext,
2122
{ getAccounts }: { getAccounts: (origin: string) => Promise<string[]> },
2223
): Promise<Hex> {
2324
if (

packages/eth-json-rpc-middleware/src/wallet.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export type WalletMiddlewareOptions = {
5858
processTransaction?: (
5959
txParams: TransactionParams,
6060
req: JsonRpcRequest,
61+
context: WalletMiddlewareContext,
6162
) => Promise<string>;
6263
processSignTransaction?: (
6364
txParams: TransactionParams,
@@ -82,7 +83,16 @@ export type WalletMiddlewareOptions = {
8283
processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;
8384
};
8485

85-
export type WalletMiddlewareContext = MiddlewareContext<{ origin: string }>;
86+
export type WalletMiddlewareKeyValues = {
87+
networkClientId: string;
88+
origin: string;
89+
securityAlertResponse?: Record<string, Json>;
90+
traceContext?: unknown;
91+
};
92+
93+
export type WalletMiddlewareContext =
94+
MiddlewareContext<WalletMiddlewareKeyValues>;
95+
8696
export type WalletMiddlewareParams = MiddlewareParams<
8797
JsonRpcRequest,
8898
WalletMiddlewareContext
@@ -220,7 +230,7 @@ export function createWalletMiddleware({
220230
...params,
221231
from: await validateAndNormalizeKeyholder(params?.from || '', context),
222232
};
223-
return await processTransaction(txParams, request);
233+
return await processTransaction(txParams, request, context);
224234
}
225235

226236
/**

packages/eth-json-rpc-middleware/test/util/helpers.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
1010
import { klona } from 'klona/full';
1111
import { isDeepStrictEqual } from 'util';
1212

13+
import type { WalletMiddlewareKeyValues } from '../../src/wallet';
14+
1315
export const createRequest = <
1416
Input extends Partial<JsonRpcRequest<Json[]>>,
1517
Output extends Input & JsonRpcRequest<Json[]>,
@@ -24,20 +26,25 @@ export const createRequest = <
2426
} as Output;
2527
};
2628

27-
const createHandleOptions = () => ({
29+
const createHandleOptions = (
30+
keyValues: Partial<WalletMiddlewareKeyValues> = {},
31+
): { context: WalletMiddlewareKeyValues } => ({
2832
context: {
29-
origin: 'test',
33+
networkClientId: 'test-client-id',
34+
origin: 'test-origin',
35+
...keyValues,
3036
},
3137
});
3238

3339
export const createHandleParams = <
34-
Input extends Partial<JsonRpcRequest<Json[]>>,
35-
Output extends Input & JsonRpcRequest<Json[]>,
40+
InputReq extends Partial<JsonRpcRequest<Json[]>>,
41+
OutputReq extends InputReq & JsonRpcRequest<Json[]>,
3642
>(
37-
request: Input,
38-
): [Output, ReturnType<typeof createHandleOptions>] => [
43+
request: InputReq,
44+
keyValues: Partial<WalletMiddlewareKeyValues> = {},
45+
): [OutputReq, ReturnType<typeof createHandleOptions>] => [
3946
createRequest(request),
40-
createHandleOptions(),
47+
createHandleOptions(keyValues),
4148
];
4249

4350
/**

0 commit comments

Comments
 (0)