diff --git a/app/core/Engine.ts b/app/core/Engine.ts index 684f12c6164..92cf297aa11 100644 --- a/app/core/Engine.ts +++ b/app/core/Engine.ts @@ -1570,14 +1570,10 @@ class Engine { `${this.keyringController.name}:signMessage`, `${this.keyringController.name}:signTypedMessage`, `${loggingController.name}:add`, + `${networkController.name}:getNetworkClientById`, ], allowedEvents: [], }), - getAllState: () => store.getState(), - getCurrentChainId: () => - networkController.getNetworkClientById( - networkController?.state.selectedNetworkClientId, - ).configuration.chainId, // This casting expected due to mismatch of browser and react-native version of Sentry traceContext trace: trace as unknown as SignatureControllerOptions['trace'], }), diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index 04deabc6eb9..4f46dc579f3 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1294,13 +1294,17 @@ describe('getRpcMethodMiddleware', () => { ).toHaveBeenCalledTimes(1); expect( Engine.context.SignatureController.newUnsignedPersonalMessage, - ).toHaveBeenCalledWith({ - data: dataMock, - from: addressMock, - meta: expect.any(Object), - origin: hostMock, - requestId: 1, - }); + ).toHaveBeenCalledWith( + { + data: dataMock, + from: addressMock, + meta: expect.any(Object), + origin: hostMock, + requestId: 1, + }, + expect.any(Object), + expect.any(Object), + ); }); it('returns resolved value from message promise', async () => { @@ -1353,14 +1357,10 @@ describe('getRpcMethodMiddleware', () => { }, expect.any(Object), version, + { parseJsonData: false }, + expect.any(Object), ]; - if (version !== 'V1') { - expectedParams.push({ - parseJsonData: false, - }); - } - expect( Engine.context.SignatureController.newUnsignedTypedMessage, ).toHaveBeenCalledTimes(1); diff --git a/app/core/RPCMethods/RPCMethodMiddleware.ts b/app/core/RPCMethods/RPCMethodMiddleware.ts index 0928bb73267..033b42c9158 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.ts @@ -40,6 +40,10 @@ import DevLogger from '../SDKConnect/utils/DevLogger'; import { addTransaction } from '../../util/transaction-controller'; import Routes from '../../constants/navigation/Routes'; import { endTrace, trace, TraceName } from '../../util/trace'; +import { + MessageParamsTyped, + SignatureController, +} from '@metamask/signature-controller'; // TODO: Replace "any" with type // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -234,7 +238,9 @@ const generateRawSignature = async ({ checkTabActive: any; }) => { endTrace({ name: TraceName.Middleware, id: req.id }); - const { SignatureController } = Engine.context; + + const signatureController = Engine.context + .SignatureController as SignatureController; const pageMeta = { meta: { @@ -258,7 +264,7 @@ const generateRawSignature = async ({ isWalletConnect, }); - const rawSig = await SignatureController.newUnsignedTypedMessage( + const rawSig = await signatureController.newUnsignedTypedMessage( { data: req.params[1], from: req.params[0], @@ -267,13 +273,15 @@ const generateRawSignature = async ({ channelId, origin: hostname, securityAlertResponse: req.securityAlertResponse, - }, + } as MessageParamsTyped, req, version, { parseJsonData: false, }, + { traceContext: req.traceContext }, ); + endTrace({ name: TraceName.Signature, id: req.id }); return rawSig; @@ -536,7 +544,6 @@ export const getRpcMethodMiddleware = ({ }, personal_sign: async () => { - const { SignatureController } = Engine.context; const firstParam = req.params[0]; const secondParam = req.params[1]; const params = { @@ -563,6 +570,9 @@ export const getRpcMethodMiddleware = ({ }, }; + const signatureController = Engine.context + .SignatureController as SignatureController; + checkTabActive(); await checkActiveAccountAndChainId({ hostname, @@ -578,11 +588,16 @@ export const getRpcMethodMiddleware = ({ () => PPOMUtil.validateRequest(req), ); - const rawSig = await SignatureController.newUnsignedPersonalMessage({ - ...params, - ...pageMeta, - origin: hostname, - }); + const rawSig = await signatureController.newUnsignedPersonalMessage( + { + ...params, + ...pageMeta, + origin: hostname, + }, + req, + { traceContext: req.traceContext }, + ); + endTrace({ name: TraceName.Signature, id: req.id }); res.result = rawSig; @@ -605,7 +620,7 @@ export const getRpcMethodMiddleware = ({ eth_signTypedData: async () => { endTrace({ name: TraceName.Middleware, id: req.id }); - const { SignatureController } = Engine.context; + const pageMeta = { meta: { url: url.current, @@ -619,6 +634,9 @@ export const getRpcMethodMiddleware = ({ }, }; + const signatureController = Engine.context + .SignatureController as SignatureController; + checkTabActive(); await checkActiveAccountAndChainId({ hostname, @@ -632,7 +650,7 @@ export const getRpcMethodMiddleware = ({ () => PPOMUtil.validateRequest(req), ); - const rawSig = await SignatureController.newUnsignedTypedMessage( + const rawSig = await signatureController.newUnsignedTypedMessage( { data: req.params[0], from: req.params[1], @@ -642,7 +660,10 @@ export const getRpcMethodMiddleware = ({ }, req, 'V1', + { parseJsonData: false }, + { traceContext: req.traceContext }, ); + endTrace({ name: TraceName.Signature, id: req.id }); res.result = rawSig; diff --git a/package.json b/package.json index 194d60f6083..5638affe3aa 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,7 @@ "@metamask/scure-bip39": "^2.1.0", "@metamask/sdk-communication-layer": "0.29.0-wallet", "@metamask/selected-network-controller": "^15.0.2", - "@metamask/signature-controller": "^20.1.0", + "@metamask/signature-controller": "npm:@metamask-previews/signature-controller@20.1.0-preview-c77aebdb", "@metamask/slip44": "3.1.0", "@metamask/smart-transactions-controller": "^13.0.0", "@metamask/snaps-controllers": "^9.8.0", diff --git a/yarn.lock b/yarn.lock index 170808a4521..c593fe82400 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5348,10 +5348,10 @@ "@metamask/swappable-obj-proxy" "^2.2.0" "@metamask/utils" "^8.3.0" -"@metamask/signature-controller@^20.1.0": - version "20.1.0" - resolved "https://registry.yarnpkg.com/@metamask/signature-controller/-/signature-controller-20.1.0.tgz#b2ab41ec6eb191f9b21a74bf636d2b8e34d590e0" - integrity sha512-29pYdr9Q5YB5tGrYLEkpCh3l41W5Otg87cQ+cRf7Je0xGo34VdrIHNv6MJQcEgng5qTmR0tG3Hq23nPyZo8rSw== +"@metamask/signature-controller@npm:@metamask-previews/signature-controller@20.1.0-preview-c77aebdb": + version "20.1.0-preview-c77aebdb" + resolved "https://registry.yarnpkg.com/@metamask-previews/signature-controller/-/signature-controller-20.1.0-preview-c77aebdb.tgz#57f8551914d268391120b2d0ed7dd04441e393ca" + integrity sha512-LMTPLMxfWpWJ4DHlTxbVpa9pBDNaWmM3yP13P34QNJMTolqifXuXf7PXfyPh43Kgrw6bK1W377BSmYNGrLI1Pg== dependencies: "@metamask/base-controller" "^7.0.1" "@metamask/controller-utils" "^11.3.0"