diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index d3224b6369b..955cc64db1f 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1,9 +1,12 @@ -import { - JsonRpcEngine, - JsonRpcMiddleware, -} from '@metamask/json-rpc-engine'; -import type { Json, JsonRpcFailure, JsonRpcParams, JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess, } from '@metamask/utils'; -import type { Transaction } from '@metamask/transaction-controller'; +import { JsonRpcEngine, JsonRpcMiddleware } from '@metamask/json-rpc-engine'; +import type { + Json, + JsonRpcFailure, + JsonRpcParams, + JsonRpcRequest, + JsonRpcResponse, + JsonRpcSuccess, +} from '@metamask/utils'; import type { ProviderConfig } from '@metamask/network-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import Engine from '../Engine'; @@ -827,7 +830,7 @@ describe('getRpcMethodMiddleware', () => { it('returns a JSON-RPC error if an error is thrown when adding this transaction', async () => { // Omit `from` and `chainId` here to skip validation for simplicity // Downcast needed here because `from` is required by this type - const mockTransactionParameters = {} as JsonRpcParams + const mockTransactionParameters = {} as JsonRpcParams; // Transaction fails before returning a result mockAddTransaction.mockImplementation(async () => { throw new Error('Failed to add transaction'); @@ -840,7 +843,7 @@ describe('getRpcMethodMiddleware', () => { jsonrpc, id: 1, method: 'eth_sendTransaction', - params: [mockTransactionParameters] + params: [mockTransactionParameters], }; const expectedError = rpcErrors.internal('Failed to add transaction'); @@ -857,7 +860,7 @@ describe('getRpcMethodMiddleware', () => { it('returns a JSON-RPC error if an error is thrown after approval', async () => { // Omit `from` and `chainId` here to skip validation for simplicity // Downcast needed here because `from` is required by this type - const mockTransactionParameters = {} as JsonRpcParams + const mockTransactionParameters = {} as JsonRpcParams; setupGlobalState({ addTransactionResult: Promise.reject( new Error('Failed to process transaction'), diff --git a/app/core/RPCMethods/eth_sendTransaction.test.ts b/app/core/RPCMethods/eth_sendTransaction.test.ts index 02cfc7eb692..10f1275b211 100644 --- a/app/core/RPCMethods/eth_sendTransaction.test.ts +++ b/app/core/RPCMethods/eth_sendTransaction.test.ts @@ -1,6 +1,11 @@ // eslint-disable-next-line import/no-nodejs-modules import { inspect } from 'util'; -import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils'; +import type { + Json, + JsonRpcParams, + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/utils'; import type { Transaction, TransactionController, @@ -40,8 +45,8 @@ jest.mock('../../util/transaction-controller', () => ({ * @returns The JSON-RPC request. */ function constructSendTransactionRequest( - params: unknown, -): JsonRpcRequest & { method: 'eth_sendTransaction' } { + params: JsonRpcParams, +): JsonRpcRequest & { method: 'eth_sendTransaction' } { return { jsonrpc: '2.0', id: 1, @@ -55,7 +60,7 @@ function constructSendTransactionRequest( * * @returns A pending JSON-RPC response. */ -function constructPendingJsonRpcResponse(): PendingJsonRpcResponse { +function constructPendingJsonRpcResponse(): PendingJsonRpcResponse { return { jsonrpc: '2.0', id: 1, @@ -136,13 +141,17 @@ function getMockAddTransaction({ describe('eth_sendTransaction', () => { it('sends the transaction and returns the resulting hash', async () => { const mockAddress = '0x0000000000000000000000000000000000000001'; - const mockTransactionParameters = { from: mockAddress }; + const mockTransactionParameters = { + from: mockAddress, + } as Transaction; const expectedResult = 'fake-hash'; const pendingResult = constructPendingJsonRpcResponse(); await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest([mockTransactionParameters]), + req: constructSendTransactionRequest([ + mockTransactionParameters as unknown as JsonRpcParams, + ]), res: pendingResult, sendTransaction: getMockAddTransaction({ expectedTransaction: mockTransactionParameters, diff --git a/app/core/RPCMethods/eth_sendTransaction.ts b/app/core/RPCMethods/eth_sendTransaction.ts index b015254a253..6e5f2450ace 100644 --- a/app/core/RPCMethods/eth_sendTransaction.ts +++ b/app/core/RPCMethods/eth_sendTransaction.ts @@ -1,6 +1,13 @@ -import type { Json, JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils'; +import type { + Hex, + Json, + JsonRpcParams, + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/utils'; import { TransactionController, + Transaction, WalletDevice, } from '@metamask/transaction-controller'; import { rpcErrors } from '@metamask/rpc-errors'; @@ -46,10 +53,10 @@ const hasProperty = < ): objectToCheck is ObjectToCheck & Record => Object.hasOwnProperty.call(objectToCheck, name); -type SendArgs = { +interface SendArgs { from: string; - chainId?: number; -}; + chainId?: Hex; +} /** * Handle a `eth_sendTransaction` request. @@ -71,7 +78,9 @@ async function eth_sendTransaction({ validateAccountAndChainId, }: { hostname: string; - req: JsonRpcRequest & { method: 'eth_sendTransaction' }; + req: JsonRpcRequest<[Transaction & JsonRpcParams]> & { + method: 'eth_sendTransaction'; + }; res: PendingJsonRpcResponse; sendTransaction: TransactionController['addTransaction']; validateAccountAndChainId: (args: SendArgs) => Promise; diff --git a/app/core/RPCMethods/wallet_watchAsset.ts b/app/core/RPCMethods/wallet_watchAsset.ts index 05ed911ccd7..3a78dd9c024 100644 --- a/app/core/RPCMethods/wallet_watchAsset.ts +++ b/app/core/RPCMethods/wallet_watchAsset.ts @@ -11,7 +11,10 @@ import { } from '../../constants/error'; import { selectChainId } from '../../selectors/networkController'; import { isValidAddress } from 'ethereumjs-util'; -import { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/json-rpc-engine'; +import { + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/json-rpc-engine'; const wallet_watchAsset = async ({ req, diff --git a/app/core/SanitizationMiddleware.ts b/app/core/SanitizationMiddleware.ts index 02ded3ed0ba..d49e6b39107 100644 --- a/app/core/SanitizationMiddleware.ts +++ b/app/core/SanitizationMiddleware.ts @@ -40,7 +40,9 @@ export const permittedKeys = [ * @param parameter - The parameter to sanitize. * @returns The given parameter containing just permitted keys. */ -function sanitizeRpcParameter(parameter: Record): Record { +function sanitizeRpcParameter( + parameter: Record, +): Record { return permittedKeys.reduce>((copy, permitted) => { if (permitted in parameter) { const value = parameter[permitted];