From 205db8f46127f8d307b7a97632fa2eb7ce7c2b0c Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Mon, 10 Jun 2024 21:28:17 +0300 Subject: [PATCH 01/25] feat: use metamask ethJsonRpcMiddleware --- app/core/BackgroundBridge/BackgroundBridge.js | 2 +- package.json | 4 +- yarn.lock | 95 ++++++------------- 3 files changed, 32 insertions(+), 69 deletions(-) diff --git a/app/core/BackgroundBridge/BackgroundBridge.js b/app/core/BackgroundBridge/BackgroundBridge.js index e500c7e73b45..204af7b47f23 100644 --- a/app/core/BackgroundBridge/BackgroundBridge.js +++ b/app/core/BackgroundBridge/BackgroundBridge.js @@ -22,6 +22,7 @@ import { selectProviderConfig, } from '../../selectors/networkController'; import { store } from '../../store'; +import { providerAsMiddleware } from '@metamask/eth-json-rpc-middleware'; ///: BEGIN:ONLY_INCLUDE_IF(snaps) import snapMethodMiddlewareBuilder from '../Snaps/SnapsMethodMiddleware'; import { SubjectType } from '@metamask/permission-controller'; @@ -29,7 +30,6 @@ import { SubjectType } from '@metamask/permission-controller'; const createFilterMiddleware = require('eth-json-rpc-filters'); const createSubscriptionManager = require('eth-json-rpc-filters/subscriptionManager'); -const providerAsMiddleware = require('eth-json-rpc-middleware/providerAsMiddleware'); const pump = require('pump'); // eslint-disable-next-line import/no-nodejs-modules const EventEmitter = require('events').EventEmitter; diff --git a/package.json b/package.json index 4142ee305c00..7bc22f3e136e 100644 --- a/package.json +++ b/package.json @@ -145,15 +145,16 @@ "@metamask/contract-metadata": "^2.1.0", "@metamask/controller-utils": "^8.0.4", "@metamask/design-tokens": "^2.0.0", + "@metamask/eth-json-rpc-middleware": ">=12.0.0", "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", "@metamask/gas-fee-controller": "^13.0.0", "@metamask/key-tree": "^9.0.0", "@metamask/keyring-api": "^4.0.0", "@metamask/keyring-controller": "^13.0.0", - "@metamask/network-controller": "^18.1.0", "@metamask/logging-controller": "^3.0.0", "@metamask/message-signing-snap": "^0.3.3", + "@metamask/network-controller": "^18.1.0", "@metamask/permission-controller": "^9.0.0", "@metamask/phishing-controller": "^9.0.0", "@metamask/post-message-stream": "8.0.0", @@ -224,7 +225,6 @@ "eth-block-tracker": "^7.0.1", "eth-ens-namehash": "2.0.8", "eth-json-rpc-filters": "4.2.2", - "eth-json-rpc-middleware": "4.3.0", "eth-url-parser": "1.0.4", "ethereumjs-abi": "0.6.6", "ethereumjs-util": "6.1.0", diff --git a/yarn.lock b/yarn.lock index 7d779883eb65..516c862ba8a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3874,6 +3874,17 @@ resolved "https://registry.yarnpkg.com/@metamask/eslint-config/-/eslint-config-9.0.0.tgz#22d4911b705f7e4e566efbdda0e37912da33e30f" integrity sha512-mWlLGQKjXXFOj9EtDClKSoTLeQuPW2kM1w3EpUMf4goYAQ+kLXCCa8pEff6h8ApWAnjhYmXydA1znQ2J4XvD+A== +"@metamask/eth-block-tracker@^9.0.2": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@metamask/eth-block-tracker/-/eth-block-tracker-9.0.3.tgz#ceebe9bc720a54c3a4749fc09c8f8bb9fe206255" + integrity sha512-I29IwdhnSJtk/A05vFsiOV92ADXXtBymXfC0naSvHP9TYNNOryG9y2l0jmnSzBsP3+wefCkHJWEzEwF4YSKogw== + dependencies: + "@metamask/eth-json-rpc-provider" "^3.0.2" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.1.0" + json-rpc-random-id "^1.0.1" + pify "^5.0.0" + "@metamask/eth-hd-keyring@^7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-hd-keyring/-/eth-hd-keyring-7.0.1.tgz#799006d8fd57c5580dc5843f74a7343eeb2985f3" @@ -3917,6 +3928,21 @@ "@metamask/utils" "^8.1.0" node-fetch "^2.7.0" +"@metamask/eth-json-rpc-middleware@>=12.0.0": + version "12.1.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.1.tgz#5b6a19386f420211cb554c637f0927b76dc3167a" + integrity sha512-6N5y5CIo3mjJlD3oUaCPsAR5KGkxzt2pL+nQaRKwZ0Z0HtXIu0dIKf4awtfzJDNNQGhlPG5Im+kG1oxkh0FkSQ== + dependencies: + "@metamask/eth-block-tracker" "^9.0.2" + "@metamask/eth-json-rpc-provider" "^2.1.0" + "@metamask/eth-sig-util" "^7.0.0" + "@metamask/json-rpc-engine" "^7.1.1" + "@metamask/rpc-errors" "^6.0.0" + "@metamask/utils" "^8.1.0" + klona "^2.0.6" + pify "^5.0.0" + safe-stable-stringify "^2.4.3" + "@metamask/eth-json-rpc-middleware@^11.0.2": version "11.0.2" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-11.0.2.tgz#85e6639f5d159a3277d13609dea9f12ebfb5b4e8" @@ -3965,7 +3991,7 @@ "@metamask/safe-event-emitter" "^3.0.0" "@metamask/utils" "^8.3.0" -"@metamask/eth-json-rpc-provider@^3.0.1": +"@metamask/eth-json-rpc-provider@^3.0.1", "@metamask/eth-json-rpc-provider@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-3.0.2.tgz#42e544d227285fe56336e2301961a6283dcfadad" integrity sha512-ma5bYjKa71bSw5+iibEnIiY25s8wkDnTljrqOnGw5MkTEU4PQDiKnK9YjxfUZSasx2BPEsp1OW2NS+pnrRMO4Q== @@ -15930,13 +15956,6 @@ eth-hd-keyring@^3.6.0: ethereumjs-util "^7.0.9" ethereumjs-wallet "^1.0.1" -eth-json-rpc-errors@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" - integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== - dependencies: - fast-safe-stringify "^2.0.6" - eth-json-rpc-filters@4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" @@ -15971,26 +15990,6 @@ eth-json-rpc-infura@^5.1.0: json-rpc-engine "^5.3.0" node-fetch "^2.6.0" -eth-json-rpc-middleware@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.3.0.tgz#d3e72efb60b6f601f022ce01384481eaed552b6b" - integrity sha512-Acr+FaIHB0oIV0nWrCvepQghgA3FzYFvnMDXdTUeHQvAX/G6ioMbw1exGJs+6HirRjJ+MmkZqaArphx+PTrRNQ== - dependencies: - btoa "^1.2.1" - clone "^2.1.1" - eth-json-rpc-errors "^1.0.1" - eth-query "^2.1.2" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.6.0" - ethereumjs-tx "^1.3.7" - ethereumjs-util "^5.1.2" - ethereumjs-vm "^2.6.0" - fetch-ponyfill "^4.0.0" - json-rpc-engine "^5.1.3" - json-stable-stringify "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - eth-json-rpc-middleware@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" @@ -16119,16 +16118,6 @@ eth-url-parser@1.0.4: bignumber.js "^7.2.1" qs "^6.5.2" -ethereum-common@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" - integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== - -ethereum-common@^0.0.18: - version "0.0.18" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== - ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -16189,17 +16178,6 @@ ethereumjs-account@^2.0.3: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-block@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" - integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== - dependencies: - async "^2.0.1" - ethereum-common "0.2.0" - ethereumjs-tx "^1.2.2" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" @@ -16216,14 +16194,6 @@ ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== -ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" - integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== - dependencies: - ethereum-common "^0.0.18" - ethereumjs-util "^5.0.0" - ethereumjs-tx@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" @@ -17011,13 +16981,6 @@ fecha@^4.2.0: resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== -fetch-ponyfill@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= - dependencies: - node-fetch "~1.7.1" - figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -19997,7 +19960,7 @@ json-parse-even-better-errors@^3.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== -json-rpc-engine@^5.1.3, json-rpc-engine@^5.3.0: +json-rpc-engine@^5.3.0: version "5.4.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== @@ -22086,7 +22049,7 @@ node-fetch-native@^1.4.0, node-fetch-native@^1.4.1: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.1.tgz#f95c74917d3cebc794cdae0cd2a9c7594aad0cb4" integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== -node-fetch@2.6.7, node-fetch@^2.0.0, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0, node-fetch@~1.7.1: +node-fetch@2.6.7, node-fetch@^2.0.0, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== From d927d340a6ff93031b3f2faef6787869adb68f32 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 16 Apr 2024 11:18:54 +0000 Subject: [PATCH 02/25] fix(deps): eth-json-rpc-filters@4.2.2 -> @metamask/eth-json-rpc-filters@^7.0.0 --- app/core/BackgroundBridge/BackgroundBridge.js | 4 +- app/core/Snaps/SnapBridge.ts | 4 +- package.json | 2 +- yarn.lock | 44 ++++++------------- 4 files changed, 18 insertions(+), 36 deletions(-) diff --git a/app/core/BackgroundBridge/BackgroundBridge.js b/app/core/BackgroundBridge/BackgroundBridge.js index e500c7e73b45..f20bff6b1485 100644 --- a/app/core/BackgroundBridge/BackgroundBridge.js +++ b/app/core/BackgroundBridge/BackgroundBridge.js @@ -27,8 +27,8 @@ import snapMethodMiddlewareBuilder from '../Snaps/SnapsMethodMiddleware'; import { SubjectType } from '@metamask/permission-controller'; ///: END:ONLY_INCLUDE_IF -const createFilterMiddleware = require('eth-json-rpc-filters'); -const createSubscriptionManager = require('eth-json-rpc-filters/subscriptionManager'); +const createFilterMiddleware = require('@metamask/eth-json-rpc-filters'); +const createSubscriptionManager = require('@metamask/eth-json-rpc-filters/subscriptionManager'); const providerAsMiddleware = require('eth-json-rpc-middleware/providerAsMiddleware'); const pump = require('pump'); // eslint-disable-next-line import/no-nodejs-modules diff --git a/app/core/Snaps/SnapBridge.ts b/app/core/Snaps/SnapBridge.ts index 9a24ef650625..15f6a56a2ba8 100644 --- a/app/core/Snaps/SnapBridge.ts +++ b/app/core/Snaps/SnapBridge.ts @@ -22,8 +22,8 @@ import snapMethodMiddlewareBuilder from './SnapsMethodMiddleware'; import { SubjectType } from '@metamask/permission-controller'; const ObjectMultiplex = require('@metamask/object-multiplex'); -const createFilterMiddleware = require('eth-json-rpc-filters'); -const createSubscriptionManager = require('eth-json-rpc-filters/subscriptionManager'); +const createFilterMiddleware = require('@metamask/eth-json-rpc-filters'); +const createSubscriptionManager = require('@metamask/eth-json-rpc-filters/subscriptionManager'); const providerAsMiddleware = require('eth-json-rpc-middleware/providerAsMiddleware'); const pump = require('pump'); diff --git a/package.json b/package.json index 1d108aacd361..221bf5e3f025 100644 --- a/package.json +++ b/package.json @@ -144,6 +144,7 @@ "@metamask/contract-metadata": "^2.1.0", "@metamask/controller-utils": "^8.0.4", "@metamask/design-tokens": "^2.0.0", + "@metamask/eth-json-rpc-filters": "^7.0.0", "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", "@metamask/gas-fee-controller": "^15.1.2", @@ -222,7 +223,6 @@ "eciesjs": "^0.3.15", "eth-block-tracker": "^7.0.1", "eth-ens-namehash": "2.0.8", - "eth-json-rpc-filters": "4.2.2", "eth-json-rpc-middleware": "4.3.0", "eth-url-parser": "1.0.4", "ethereumjs-abi": "0.6.6", diff --git a/yarn.lock b/yarn.lock index bb9cf56fe586..1f095b8aecbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3803,6 +3803,17 @@ "@metamask/utils" "^8.1.0" ethereum-cryptography "^2.1.2" +"@metamask/eth-json-rpc-filters@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-filters/-/eth-json-rpc-filters-7.0.0.tgz#af0394838859ee9c673eb0cc01db785ec7161cd8" + integrity sha512-b4iJ44BFi6qeH/UPT8lUXpeYX6ydhx1j58vNQBNbpjMkK+r157Fp1lkXxWqx6xTz51Dz2sxc+I+jziuP+Wn8Wg== + dependencies: + "@metamask/eth-query" "^3.0.1" + "@metamask/json-rpc-engine" "^7.1.0" + "@metamask/safe-event-emitter" "^3.0.0" + async-mutex "^0.2.6" + pify "^5.0.0" + "@metamask/eth-json-rpc-infura@^8.1.1": version "8.1.1" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-infura/-/eth-json-rpc-infura-8.1.1.tgz#e877284634fb0727b347575115c74dc9ddd4400c" @@ -4056,7 +4067,7 @@ bn.js "^5.2.1" uuid "^8.3.2" -"@metamask/json-rpc-engine@^7.0.0", "@metamask/json-rpc-engine@^7.1.1", "@metamask/json-rpc-engine@^7.3.1", "@metamask/json-rpc-engine@^7.3.2", "@metamask/json-rpc-engine@^7.3.3": +"@metamask/json-rpc-engine@^7.0.0", "@metamask/json-rpc-engine@^7.1.0", "@metamask/json-rpc-engine@^7.1.1", "@metamask/json-rpc-engine@^7.3.1", "@metamask/json-rpc-engine@^7.3.2", "@metamask/json-rpc-engine@^7.3.3": version "7.3.3" resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz#f2b30a2164558014bfcca45db10f5af291d989af" integrity sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== @@ -15939,18 +15950,6 @@ eth-json-rpc-errors@^1.0.1: dependencies: fast-safe-stringify "^2.0.6" -eth-json-rpc-filters@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" - integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - async-mutex "^0.2.6" - eth-json-rpc-middleware "^6.0.0" - eth-query "^2.1.2" - json-rpc-engine "^6.1.0" - pify "^5.0.0" - eth-json-rpc-middleware@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.3.0.tgz#d3e72efb60b6f601f022ce01384481eaed552b6b" @@ -15971,23 +15970,6 @@ eth-json-rpc-middleware@4.3.0: pify "^3.0.0" safe-event-emitter "^1.0.1" -eth-json-rpc-middleware@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" - integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== - dependencies: - btoa "^1.2.1" - clone "^2.1.1" - eth-query "^2.1.2" - eth-rpc-errors "^3.0.0" - eth-sig-util "^1.4.2" - ethereumjs-util "^5.1.2" - json-rpc-engine "^5.3.0" - json-stable-stringify "^1.0.1" - node-fetch "^2.6.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - eth-method-registry@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eth-method-registry/-/eth-method-registry-1.1.0.tgz#3cc01bd23dcf513428d14a0bb19910652cc5cac0" @@ -19904,7 +19886,7 @@ json-parse-even-better-errors@^3.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== -json-rpc-engine@^5.1.3, json-rpc-engine@^5.3.0: +json-rpc-engine@^5.1.3: version "5.4.0" resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== From 4d2c65fd19dc3802891e8bd9543ae218530aa240 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Wed, 17 Apr 2024 04:04:48 +0000 Subject: [PATCH 03/25] deps: json-rpc-engine@^6.1.0 -> @metamask/json-rpc-engine@^7.1.0 --- app/core/BackgroundBridge/BackgroundBridge.js | 2 +- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 2 +- app/core/RPCMethods/RPCMethodMiddleware.ts | 2 +- app/core/RPCMethods/eth_sendTransaction.test.ts | 2 +- app/core/RPCMethods/eth_sendTransaction.ts | 2 +- app/core/RPCMethods/wallet_watchAsset.ts | 2 +- app/core/SanitizationMiddleware.ts | 2 +- app/core/Snaps/SnapBridge.ts | 2 +- app/core/WalletConnect/extractApprovedAccounts.ts | 2 +- package.json | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/core/BackgroundBridge/BackgroundBridge.js b/app/core/BackgroundBridge/BackgroundBridge.js index f20bff6b1485..9e807d599598 100644 --- a/app/core/BackgroundBridge/BackgroundBridge.js +++ b/app/core/BackgroundBridge/BackgroundBridge.js @@ -1,7 +1,7 @@ /* eslint-disable import/no-commonjs */ import URL from 'url-parse'; import { ChainId } from '@metamask/controller-utils'; -import { JsonRpcEngine } from 'json-rpc-engine'; +import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import MobilePortStream from '../MobilePortStream'; import { setupMultiplex } from '../../util/streams'; import { diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index d6c7aa5437c1..3dad5d26ab4f 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -5,7 +5,7 @@ import { JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess, -} from 'json-rpc-engine'; +} from '@metamask/json-rpc-engine'; import type { TransactionParams } from '@metamask/transaction-controller'; import type { ProviderConfig } from '@metamask/network-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; diff --git a/app/core/RPCMethods/RPCMethodMiddleware.ts b/app/core/RPCMethods/RPCMethodMiddleware.ts index 097321f19605..c165b85c0834 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.ts @@ -1,6 +1,6 @@ import { Alert } from 'react-native'; import { getVersion } from 'react-native-device-info'; -import { createAsyncMiddleware } from 'json-rpc-engine'; +import { createAsyncMiddleware } from '@metamask/json-rpc-engine'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import { EndFlowOptions, diff --git a/app/core/RPCMethods/eth_sendTransaction.test.ts b/app/core/RPCMethods/eth_sendTransaction.test.ts index c1f064ffdba5..4512c6456c20 100644 --- a/app/core/RPCMethods/eth_sendTransaction.test.ts +++ b/app/core/RPCMethods/eth_sendTransaction.test.ts @@ -1,6 +1,6 @@ // eslint-disable-next-line import/no-nodejs-modules import { inspect } from 'util'; -import type { JsonRpcRequest, PendingJsonRpcResponse } from 'json-rpc-engine'; +import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/json-rpc-engine'; import type { TransactionParams, TransactionController, diff --git a/app/core/RPCMethods/eth_sendTransaction.ts b/app/core/RPCMethods/eth_sendTransaction.ts index 5569709a1625..7b28d1e98d95 100644 --- a/app/core/RPCMethods/eth_sendTransaction.ts +++ b/app/core/RPCMethods/eth_sendTransaction.ts @@ -1,4 +1,4 @@ -import type { JsonRpcRequest, PendingJsonRpcResponse } from 'json-rpc-engine'; +import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/json-rpc-engine'; import { TransactionController, WalletDevice, diff --git a/app/core/RPCMethods/wallet_watchAsset.ts b/app/core/RPCMethods/wallet_watchAsset.ts index 37709ea15ff7..90b7dcee90b4 100644 --- a/app/core/RPCMethods/wallet_watchAsset.ts +++ b/app/core/RPCMethods/wallet_watchAsset.ts @@ -11,7 +11,7 @@ import { } from '../../constants/error'; import { selectChainId } from '../../selectors/networkController'; import { isValidAddress } from 'ethereumjs-util'; -import { JsonRpcRequest, PendingJsonRpcResponse } from '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 85cfba8f2cbe..e3b08c616851 100644 --- a/app/core/SanitizationMiddleware.ts +++ b/app/core/SanitizationMiddleware.ts @@ -1,4 +1,4 @@ -import { JsonRpcMiddleware, JsonRpcRequest } from 'json-rpc-engine'; +import { JsonRpcMiddleware, JsonRpcRequest } from '@metamask/json-rpc-engine'; import { addHexPrefix } from 'ethereumjs-util'; // We use this to clean any custom params from the txParams diff --git a/app/core/Snaps/SnapBridge.ts b/app/core/Snaps/SnapBridge.ts index 15f6a56a2ba8..2f328c1e402c 100644 --- a/app/core/Snaps/SnapBridge.ts +++ b/app/core/Snaps/SnapBridge.ts @@ -10,7 +10,7 @@ import { createSwappableProxy, createEventEmitterProxy, } from '@metamask/swappable-obj-proxy'; -import { JsonRpcEngine } from 'json-rpc-engine'; +import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import { createEngineStream } from 'json-rpc-middleware-stream'; import { NetworksChainId } from '@metamask/controller-utils'; diff --git a/app/core/WalletConnect/extractApprovedAccounts.ts b/app/core/WalletConnect/extractApprovedAccounts.ts index c9a08017ec3a..aefd2d99b594 100644 --- a/app/core/WalletConnect/extractApprovedAccounts.ts +++ b/app/core/WalletConnect/extractApprovedAccounts.ts @@ -1,5 +1,5 @@ import { Caveat, ValidPermission } from '@metamask/permission-controller'; -import { Json } from 'json-rpc-engine'; +import { Json } from '@metamask/json-rpc-engine'; export const extractApprovedAccounts = ( accountPermission: diff --git a/package.json b/package.json index 221bf5e3f025..6ea1e874879d 100644 --- a/package.json +++ b/package.json @@ -148,6 +148,7 @@ "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", "@metamask/gas-fee-controller": "^15.1.2", + "@metamask/json-rpc-engine": "^7.1.0", "@metamask/key-tree": "^9.0.0", "@metamask/keyring-api": "^4.0.0", "@metamask/keyring-controller": "^16.0.0", @@ -239,7 +240,6 @@ "human-standard-token-abi": "^2.0.0", "humanize-duration": "^3.27.2", "is-url": "^1.2.4", - "json-rpc-engine": "^6.1.0", "json-rpc-middleware-stream": "3.0.0", "lodash": "^4.17.21", "lottie-ios": "3.4.1", @@ -559,4 +559,4 @@ } }, "packageManager": "yarn@1.22.22" -} \ No newline at end of file +} From 63d560aa90cdd457277ad1cd65d5ccba0b2ee7a3 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Wed, 17 Apr 2024 06:31:12 +0000 Subject: [PATCH 04/25] Update JsonRpcRequest typings test: type adjustments --- .../RPCMethods/RPCMethodMiddleware.test.ts | 41 ++++++++++--------- .../RPCMethods/eth_sendTransaction.test.ts | 25 +++++++---- app/core/RPCMethods/eth_sendTransaction.ts | 25 +++++++---- app/core/RPCMethods/wallet_watchAsset.ts | 2 +- app/core/SanitizationMiddleware.ts | 21 ++++++---- .../WalletConnect/extractApprovedAccounts.ts | 2 +- 6 files changed, 72 insertions(+), 44 deletions(-) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index 3dad5d26ab4f..6aa62d282437 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1,14 +1,15 @@ -import { - JsonRpcEngine, +import { JsonRpcEngine, JsonRpcMiddleware } from '@metamask/json-rpc-engine'; +import type { ProviderConfig } from '@metamask/network-controller'; +import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; +import type { TransactionParams } from '@metamask/transaction-controller'; +import type { + Json, JsonRpcFailure, - JsonRpcMiddleware, + JsonRpcParams, JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess, -} from '@metamask/json-rpc-engine'; -import type { TransactionParams } from '@metamask/transaction-controller'; -import type { ProviderConfig } from '@metamask/network-controller'; -import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; +} from '@metamask/utils'; import Engine from '../Engine'; import { store } from '../../store'; import { getPermittedAccounts } from '../Permissions'; @@ -93,8 +94,8 @@ const jsonrpc = '2.0' as const; * @throws If the given value is not a valid {@link JsonRpcSuccess} object. */ function assertIsJsonRpcSuccess( - response: JsonRpcResponse, -): asserts response is JsonRpcSuccess { + response: JsonRpcResponse, +): asserts response is JsonRpcSuccess { if ('error' in response) { throw new Error(`Response failed with error '${JSON.stringify('error')}'`); } else if (!('result' in response)) { @@ -195,8 +196,8 @@ async function callMiddleware({ middleware, request, }: { - middleware: JsonRpcMiddleware; - request: JsonRpcRequest; + middleware: JsonRpcMiddleware; + request: JsonRpcRequest; }) { const engine = new JsonRpcEngine(); engine.push(middleware); @@ -372,7 +373,6 @@ describe('getRpcMethodMiddleware', () => { permissionController.createPermissionMiddleware({ origin: hostMock, }); - // @ts-expect-error JsonRpcId (number | string | void) doesn't match PS middleware's id, which is (string | number | null) engine.push(permissionMiddleware); const middleware = getRpcMethodMiddleware(getMinimalOptions()); engine.push(middleware); @@ -984,7 +984,8 @@ 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 TransactionParams; + const mockTransactionParameters = {} as (TransactionParams & + JsonRpcParams)[]; // Transaction fails before returning a result mockAddTransaction.mockImplementation(async () => { throw new Error('Failed to add transaction'); @@ -999,10 +1000,11 @@ describe('getRpcMethodMiddleware', () => { method: 'eth_sendTransaction', params: [mockTransactionParameters], }; - const expectedError = rpcErrors.internal('Failed to add transaction'); + const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); const response = await callMiddleware({ middleware, request }); + console.error((response as JsonRpcFailure).error); expect((response as JsonRpcFailure).error.code).toBe(expectedError.code); expect((response as JsonRpcFailure).error.message).toBe( expectedError.message, @@ -1012,7 +1014,8 @@ 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 TransactionParams; + const mockTransactionParameters = {} as (TransactionParams & + JsonRpcParams)[]; setupGlobalState({ addTransactionResult: Promise.reject( new Error('Failed to process transaction'), @@ -1028,7 +1031,7 @@ describe('getRpcMethodMiddleware', () => { method: 'eth_sendTransaction', params: [mockTransactionParameters], }; - const expectedError = rpcErrors.internal('Failed to process transaction'); + const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); const response = await callMiddleware({ middleware, request }); @@ -1101,7 +1104,7 @@ describe('getRpcMethodMiddleware', () => { method: 'personal_ecRecover', params: [helloWorldMessage], }; - const expectedError = rpcErrors.internal('Missing signature parameter'); + const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); const response = await callMiddleware({ middleware, request }); @@ -1120,9 +1123,9 @@ describe('getRpcMethodMiddleware', () => { jsonrpc, id: 1, method: 'personal_ecRecover', - params: [undefined, helloWorldSignature], + params: [undefined, helloWorldSignature] as JsonRpcParams, }; - const expectedError = rpcErrors.internal('Missing data parameter'); + const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); const response = await callMiddleware({ middleware, request }); diff --git a/app/core/RPCMethods/eth_sendTransaction.test.ts b/app/core/RPCMethods/eth_sendTransaction.test.ts index 4512c6456c20..8243d42d212a 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/json-rpc-engine'; +import type { + Json, + JsonRpcParams, + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/utils'; import type { TransactionParams, TransactionController, @@ -39,9 +44,11 @@ jest.mock('../../util/transaction-controller', () => ({ * @param params - The request parameters. * @returns The JSON-RPC request. */ -function constructSendTransactionRequest( - params: unknown, -): JsonRpcRequest & { method: 'eth_sendTransaction' } { +function constructSendTransactionRequest(params: Json[]): JsonRpcRequest< + [TransactionParams & JsonRpcParams] +> & { + method: 'eth_sendTransaction'; +} { return { jsonrpc: '2.0', id: 1, @@ -55,7 +62,7 @@ function constructSendTransactionRequest( * * @returns A pending JSON-RPC response. */ -function constructPendingJsonRpcResponse(): PendingJsonRpcResponse { +function constructPendingJsonRpcResponse(): PendingJsonRpcResponse { return { jsonrpc: '2.0', id: 1, @@ -136,13 +143,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 TransactionParams; 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 7b28d1e98d95..5832f13ce74c 100644 --- a/app/core/RPCMethods/eth_sendTransaction.ts +++ b/app/core/RPCMethods/eth_sendTransaction.ts @@ -1,6 +1,13 @@ -import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/json-rpc-engine'; +import type { + Hex, + Json, + JsonRpcParams, + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/utils'; import { TransactionController, + TransactionParams, WalletDevice, } from '@metamask/transaction-controller'; import { rpcErrors } from '@metamask/rpc-errors'; @@ -46,6 +53,11 @@ const hasProperty = < ): objectToCheck is ObjectToCheck & Record => Object.hasOwnProperty.call(objectToCheck, name); +interface SendArgs { + from: string; + chainId?: Hex; +} + /** * Handle a `eth_sendTransaction` request. * @@ -66,13 +78,12 @@ async function eth_sendTransaction({ validateAccountAndChainId, }: { hostname: string; - req: JsonRpcRequest & { method: 'eth_sendTransaction' }; - res: PendingJsonRpcResponse; + req: JsonRpcRequest<[TransactionParams & JsonRpcParams]> & { + method: 'eth_sendTransaction'; + }; + res: PendingJsonRpcResponse; sendTransaction: TransactionController['addTransaction']; - validateAccountAndChainId: (args: { - from: string; - chainId?: number; - }) => Promise; + validateAccountAndChainId: (args: SendArgs) => Promise; }) { if ( !Array.isArray(req.params) && diff --git a/app/core/RPCMethods/wallet_watchAsset.ts b/app/core/RPCMethods/wallet_watchAsset.ts index 90b7dcee90b4..35f916d6e588 100644 --- a/app/core/RPCMethods/wallet_watchAsset.ts +++ b/app/core/RPCMethods/wallet_watchAsset.ts @@ -11,7 +11,7 @@ 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/utils'; const wallet_watchAsset = async ({ req, diff --git a/app/core/SanitizationMiddleware.ts b/app/core/SanitizationMiddleware.ts index e3b08c616851..d49e6b39107b 100644 --- a/app/core/SanitizationMiddleware.ts +++ b/app/core/SanitizationMiddleware.ts @@ -1,4 +1,5 @@ -import { JsonRpcMiddleware, JsonRpcRequest } from '@metamask/json-rpc-engine'; +import { JsonRpcMiddleware } from '@metamask/json-rpc-engine'; +import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils'; import { addHexPrefix } from 'ethereumjs-util'; // We use this to clean any custom params from the txParams @@ -39,18 +40,20 @@ export const permittedKeys = [ * @param parameter - The parameter to sanitize. * @returns The given parameter containing just permitted keys. */ -function sanitizeRpcParameter(parameter: Record) { - return permittedKeys.reduce>((copy, permitted) => { +function sanitizeRpcParameter( + parameter: Record, +): Record { + return permittedKeys.reduce>((copy, permitted) => { if (permitted in parameter) { const value = parameter[permitted]; if (Array.isArray(value)) { - copy[permitted] = value.map(sanitize); + copy[permitted] = value.map(sanitize) as Json; } else { - copy[permitted] = sanitize(value); + copy[permitted] = sanitize(value) as Json; } } return copy; - }, {}); + }, {} as Record); } /** @@ -80,10 +83,10 @@ function sanitize(value: unknown) { * request along. */ export function createSanitizationMiddleware(): JsonRpcMiddleware< - unknown, - unknown + JsonRpcParams, + Json > { - return (req: JsonRpcRequest, _: any, next: () => any) => { + return (req: JsonRpcRequest, _: any, next: () => any) => { if (!Array.isArray(req.params)) { next(); return; diff --git a/app/core/WalletConnect/extractApprovedAccounts.ts b/app/core/WalletConnect/extractApprovedAccounts.ts index aefd2d99b594..c09b2c10ac1b 100644 --- a/app/core/WalletConnect/extractApprovedAccounts.ts +++ b/app/core/WalletConnect/extractApprovedAccounts.ts @@ -1,5 +1,5 @@ import { Caveat, ValidPermission } from '@metamask/permission-controller'; -import { Json } from '@metamask/json-rpc-engine'; +import { Json } from '@metamask/utils'; export const extractApprovedAccounts = ( accountPermission: From fbd85092107de05dc983ac64b54bda985596d57e Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Thu, 18 Apr 2024 21:42:00 +0000 Subject: [PATCH 05/25] chainId is now hex string, not number --- app/core/RPCMethods/RPCMethodMiddleware.ts | 7 ++++--- app/core/WalletConnect/WalletConnectV2.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.ts b/app/core/RPCMethods/RPCMethodMiddleware.ts index c165b85c0834..472b6a9fa6db 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.ts @@ -15,6 +15,7 @@ import { PermissionController, permissionRpcMethods, } from '@metamask/permission-controller'; +import type { Hex } from '@metamask/utils'; import Networks, { blockTagParamIndex, getAllNetworks, @@ -103,7 +104,7 @@ export const checkActiveAccountAndChainId = async ({ isWalletConnect, }: { address?: string; - chainId?: number; + chainId?: Hex; channelId?: string; hostname: string; isWalletConnect: boolean; @@ -208,7 +209,7 @@ const generateRawSignature = async ({ title: { current: string }; icon: { current: string | undefined }; analytics: { [key: string]: string | boolean }; - chainId: number; + chainId: Hex; isMMSDK: boolean; channelId?: string; getSource: () => string; @@ -507,7 +508,7 @@ export const getRpcMethodMiddleware = ({ chainId, }: { from?: string; - chainId?: number; + chainId?: Hex; }) => { await checkActiveAccountAndChainId({ hostname, diff --git a/app/core/WalletConnect/WalletConnectV2.ts b/app/core/WalletConnect/WalletConnectV2.ts index 78f3c4fa4977..e9ff57af3800 100644 --- a/app/core/WalletConnect/WalletConnectV2.ts +++ b/app/core/WalletConnect/WalletConnectV2.ts @@ -10,6 +10,7 @@ import Logger from '../../util/Logger'; import { WalletDevice } from '@metamask/transaction-controller'; import { PermissionController } from '@metamask/permission-controller'; +import { isStrictHexString, type Hex } from '@metamask/utils'; import { NavigationContainerRef } from '@react-navigation/native'; import { Core } from '@walletconnect/core'; import { ErrorResponse } from '@walletconnect/jsonrpc-types'; @@ -296,7 +297,7 @@ class WalletConnect2Session { chainId, accounts, }: { - chainId: number; + chainId: Hex; accounts?: string[]; }) => { try { @@ -333,12 +334,12 @@ class WalletConnect2Session { return; } } - if (chainId === 0) { + if (!isStrictHexString(chainId) || chainId.toLowerCase() === '0x0') { DevLogger.log( `WC2::updateSession invalid chainId --- skip ${typeof chainId} chainId=${chainId} accounts=${accounts})`, ); // overwrite chainId with actual value. - const selectedChainId = parseInt(selectChainId(store.getState())); + const selectedChainId = selectChainId(store.getState()); DevLogger.log( `WC2::updateSession overwrite invalid chain Id with selectedChainId=${selectedChainId}`, ); @@ -346,7 +347,7 @@ class WalletConnect2Session { } await this.web3Wallet.updateSession({ topic: this.session.topic, - chainId, + chainId: parseInt(chainId, 16), accounts, }); } catch (err) { @@ -565,13 +566,12 @@ export class WC2Manager { DevLogger.log(`WC2::init approvedAccounts`, approvedAccounts); } - const nChainId = parseInt(chainId, 16); DevLogger.log( - `WC2::init updateSession session=${sessionKey} chainId=${chainId} nChainId=${nChainId} selectedAddress=${selectedAddress}`, + `WC2::init updateSession session=${sessionKey} chainId=${chainId} selectedAddress=${selectedAddress}`, approvedAccounts, ); await this.sessions[sessionKey].updateSession({ - chainId: nChainId, + chainId, accounts: approvedAccounts, }); } catch (err) { From f1e0653efe799a5e23dd4022546907943425734e Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 20 May 2024 07:24:08 +0000 Subject: [PATCH 06/25] chore(test): eth_sendTransaction test type workarounds --- app/core/RPCMethods/eth_sendTransaction.test.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/core/RPCMethods/eth_sendTransaction.test.ts b/app/core/RPCMethods/eth_sendTransaction.test.ts index 8243d42d212a..91251d6acbbd 100644 --- a/app/core/RPCMethods/eth_sendTransaction.test.ts +++ b/app/core/RPCMethods/eth_sendTransaction.test.ts @@ -53,7 +53,7 @@ function constructSendTransactionRequest(params: Json[]): JsonRpcRequest< jsonrpc: '2.0', id: 1, method: 'eth_sendTransaction', - params, + params: params as any, }; } @@ -153,7 +153,7 @@ describe('eth_sendTransaction', () => { hostname: 'example.metamask.io', req: constructSendTransactionRequest([ mockTransactionParameters as unknown as JsonRpcParams, - ]), + ]) as any, res: pendingResult, sendTransaction: getMockAddTransaction({ expectedTransaction: mockTransactionParameters, @@ -175,7 +175,9 @@ describe('eth_sendTransaction', () => { async () => await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest(invalidParameter), + req: constructSendTransactionRequest( + invalidParameter as unknown as Json[], + ), res: constructPendingJsonRpcResponse(), sendTransaction: getMockAddTransaction({ returnValue: 'fake-hash', @@ -197,7 +199,9 @@ describe('eth_sendTransaction', () => { async () => await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest(invalidParameter), + req: constructSendTransactionRequest( + invalidParameter as unknown as Json[], + ), res: constructPendingJsonRpcResponse(), sendTransaction: getMockAddTransaction({ returnValue: 'fake-hash', From e4e7599b19fdb026bc4a06f01ba83a098fe861f5 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 20 May 2024 07:47:39 +0000 Subject: [PATCH 07/25] fixup: console.error in test --- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index 6aa62d282437..ad9eec3af971 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1004,7 +1004,6 @@ describe('getRpcMethodMiddleware', () => { const response = await callMiddleware({ middleware, request }); - console.error((response as JsonRpcFailure).error); expect((response as JsonRpcFailure).error.code).toBe(expectedError.code); expect((response as JsonRpcFailure).error.message).toBe( expectedError.message, From 4a914af768195407bdb400e39cfc3617af51c660 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Mon, 20 May 2024 07:49:04 +0000 Subject: [PATCH 08/25] fix(test): test for error cause message in RPCMethodMIddleware --- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index ad9eec3af971..0dedaadee8bb 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1001,6 +1001,7 @@ describe('getRpcMethodMiddleware', () => { params: [mockTransactionParameters], }; const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); + const expectedErrorCauseMessage = 'Failed to add transaction'; const response = await callMiddleware({ middleware, request }); @@ -1008,6 +1009,10 @@ describe('getRpcMethodMiddleware', () => { expect((response as JsonRpcFailure).error.message).toBe( expectedError.message, ); + // @ts-expect-error - TODO: This should type + expect((response as JsonRpcFailure).error.data.cause.message).toBe( + expectedErrorCauseMessage, + ); }); it('returns a JSON-RPC error if an error is thrown after approval', async () => { @@ -1031,6 +1036,7 @@ describe('getRpcMethodMiddleware', () => { params: [mockTransactionParameters], }; const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); + const expectedErrorCauseMessage = 'Failed to add transaction'; const response = await callMiddleware({ middleware, request }); @@ -1038,6 +1044,10 @@ describe('getRpcMethodMiddleware', () => { expect((response as JsonRpcFailure).error.message).toBe( expectedError.message, ); + // @ts-expect-error - TODO: This should type + expect((response as JsonRpcFailure).error.data.cause.message).toBe( + expectedErrorCauseMessage, + ); }); }); From e1d2a0434936b6af363d41d66395273a0fd94802 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 11 Jun 2024 03:33:49 +0000 Subject: [PATCH 09/25] chore: update test --- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index 0dedaadee8bb..a438eac2acf4 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -1036,7 +1036,7 @@ describe('getRpcMethodMiddleware', () => { params: [mockTransactionParameters], }; const expectedError = rpcErrors.internal('Internal JSON-RPC error.'); - const expectedErrorCauseMessage = 'Failed to add transaction'; + const expectedErrorCauseMessage = 'Failed to process transaction'; const response = await callMiddleware({ middleware, request }); From 0c1a8a1138643eefc33a101d638f93405efc9b55 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 11 Jun 2024 03:35:12 +0000 Subject: [PATCH 10/25] chore: wip: add @ts-expect-error directive --- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index a438eac2acf4..1a9d0f431a55 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -373,6 +373,7 @@ describe('getRpcMethodMiddleware', () => { permissionController.createPermissionMiddleware({ origin: hostMock, }); + // @ts-expect-error TODO engine.push(permissionMiddleware); const middleware = getRpcMethodMiddleware(getMinimalOptions()); engine.push(middleware); From e160aa512224e2b2ddeff2b1d21027e90a6d4cde Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Tue, 11 Jun 2024 04:33:05 +0000 Subject: [PATCH 11/25] chore: update .iyarc --- .iyarc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.iyarc b/.iyarc index 4f6253a520fc..a2ac5dc5d56c 100644 --- a/.iyarc +++ b/.iyarc @@ -1,7 +1,3 @@ -# ReDoS vulnerability, no impact to this application, and fix not backported yet to the versions we use - -GHSA-c2qf-rxjj-qqgw - # ip SSRF improper categorization in isPublic, since it only affect dev tools on, and the server is actually a local server, this advisory shouldn't apply to this use cases GHSA-2p57-rm9w-gvfp From 242934d10781bea117cb2f133f3f6d18fc7a4834 Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 11 Jun 2024 21:47:48 +0300 Subject: [PATCH 12/25] feat: downgrade from 12 to 11 --- package.json | 2 +- yarn.lock | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 382e6c6980fb..26e92c5323f6 100644 --- a/package.json +++ b/package.json @@ -145,7 +145,7 @@ "@metamask/controller-utils": "^8.0.4", "@metamask/design-tokens": "^2.0.0", "@metamask/eth-json-rpc-filters": "^7.0.0", - "@metamask/eth-json-rpc-middleware": ">=12.0.0", + "@metamask/eth-json-rpc-middleware": "^11.0.2", "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", "@metamask/gas-fee-controller": "^15.1.2", diff --git a/yarn.lock b/yarn.lock index 50b51b5e7144..5d53bc715b0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3836,21 +3836,6 @@ "@metamask/utils" "^8.1.0" node-fetch "^2.7.0" -"@metamask/eth-json-rpc-middleware@>=12.0.0", "@metamask/eth-json-rpc-middleware@^12.1.0", "@metamask/eth-json-rpc-middleware@^12.1.1": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.1.tgz#5b6a19386f420211cb554c637f0927b76dc3167a" - integrity sha512-6N5y5CIo3mjJlD3oUaCPsAR5KGkxzt2pL+nQaRKwZ0Z0HtXIu0dIKf4awtfzJDNNQGhlPG5Im+kG1oxkh0FkSQ== - dependencies: - "@metamask/eth-block-tracker" "^9.0.2" - "@metamask/eth-json-rpc-provider" "^2.1.0" - "@metamask/eth-sig-util" "^7.0.0" - "@metamask/json-rpc-engine" "^7.1.1" - "@metamask/rpc-errors" "^6.0.0" - "@metamask/utils" "^8.1.0" - klona "^2.0.6" - pify "^5.0.0" - safe-stable-stringify "^2.4.3" - "@metamask/eth-json-rpc-middleware@^11.0.2": version "11.0.2" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-11.0.2.tgz#85e6639f5d159a3277d13609dea9f12ebfb5b4e8" @@ -3866,6 +3851,21 @@ pify "^3.0.0" safe-stable-stringify "^2.3.2" +"@metamask/eth-json-rpc-middleware@^12.1.0", "@metamask/eth-json-rpc-middleware@^12.1.1": + version "12.1.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.1.tgz#5b6a19386f420211cb554c637f0927b76dc3167a" + integrity sha512-6N5y5CIo3mjJlD3oUaCPsAR5KGkxzt2pL+nQaRKwZ0Z0HtXIu0dIKf4awtfzJDNNQGhlPG5Im+kG1oxkh0FkSQ== + dependencies: + "@metamask/eth-block-tracker" "^9.0.2" + "@metamask/eth-json-rpc-provider" "^2.1.0" + "@metamask/eth-sig-util" "^7.0.0" + "@metamask/json-rpc-engine" "^7.1.1" + "@metamask/rpc-errors" "^6.0.0" + "@metamask/utils" "^8.1.0" + klona "^2.0.6" + pify "^5.0.0" + safe-stable-stringify "^2.4.3" + "@metamask/eth-json-rpc-provider@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz#3fd5316c767847f4ca107518b611b15396a5a32c" From 1342855c1f6f9a569961afc42ba5766771d69734 Mon Sep 17 00:00:00 2001 From: tommasini Date: Mon, 24 Jun 2024 20:29:42 +0100 Subject: [PATCH 13/25] middleware to latest version --- package.json | 2 +- yarn.lock | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9562b8566c6a..b378995ec7ea 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "@metamask/contract-metadata": "^2.1.0", "@metamask/controller-utils": "^8.0.4", "@metamask/eth-json-rpc-filters": "^7.0.0", - "@metamask/eth-json-rpc-middleware": "^11.0.2", + "@metamask/eth-json-rpc-middleware": "^12.1.2", "@metamask/design-tokens": "^4.0.0", "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 23157c025af8..234b6cbe6a1c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3781,7 +3781,7 @@ resolved "https://registry.yarnpkg.com/@metamask/eslint-plugin-design-tokens/-/eslint-plugin-design-tokens-1.1.0.tgz#c9d4471f04f62bfb307aa261d11b7a674eb27961" integrity sha512-33BJTEl96wXrkNdydNgTnfz3C0XP6/FdYbKzNnM8wT3XeVOkF/EOt8oiY8X4stXlNKDJtKyQchxENgZwS8sl9w== -"@metamask/eth-block-tracker@^9.0.2": +"@metamask/eth-block-tracker@^9.0.2", "@metamask/eth-block-tracker@^9.0.3": version "9.0.3" resolved "https://registry.yarnpkg.com/@metamask/eth-block-tracker/-/eth-block-tracker-9.0.3.tgz#ceebe9bc720a54c3a4749fc09c8f8bb9fe206255" integrity sha512-I29IwdhnSJtk/A05vFsiOV92ADXXtBymXfC0naSvHP9TYNNOryG9y2l0jmnSzBsP3+wefCkHJWEzEwF4YSKogw== @@ -3866,6 +3866,21 @@ pify "^5.0.0" safe-stable-stringify "^2.4.3" +"@metamask/eth-json-rpc-middleware@^12.1.2": + version "12.1.2" + resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.2.tgz#41b6cfe232cb4e5fdfed24031f606398b4387ce4" + integrity sha512-qhaUq0SenE8P916yuYDj5dbdGRvl/qJDsjPGSlSJOi0QBASFDbKpo5k1st+ban6duJfRUQhrwzERCVyNbtil7w== + dependencies: + "@metamask/eth-block-tracker" "^9.0.3" + "@metamask/eth-json-rpc-provider" "^3.0.2" + "@metamask/eth-sig-util" "^7.0.0" + "@metamask/json-rpc-engine" "^8.0.2" + "@metamask/rpc-errors" "^6.0.0" + "@metamask/utils" "^8.1.0" + klona "^2.0.6" + pify "^5.0.0" + safe-stable-stringify "^2.4.3" + "@metamask/eth-json-rpc-provider@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz#3fd5316c767847f4ca107518b611b15396a5a32c" From c6e47edecbb33ca933d7fa25965e7c8f81817f75 Mon Sep 17 00:00:00 2001 From: tommasini Date: Mon, 24 Jun 2024 22:05:42 +0100 Subject: [PATCH 14/25] background bridge cleanup fix, bump json rpc engine to latest version --- app/core/BackgroundBridge/BackgroundBridge.js | 6 +----- package.json | 6 +++--- yarn.lock | 9 +++++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/core/BackgroundBridge/BackgroundBridge.js b/app/core/BackgroundBridge/BackgroundBridge.js index b8b25504bedd..da91bfc12d00 100644 --- a/app/core/BackgroundBridge/BackgroundBridge.js +++ b/app/core/BackgroundBridge/BackgroundBridge.js @@ -350,11 +350,7 @@ export class BackgroundBridge extends EventEmitter { pump(outStream, providerStream, outStream, (err) => { // handle any middleware cleanup - this.engine._middleware.forEach((mid) => { - if (mid.destroy && typeof mid.destroy === 'function') { - mid.destroy(); - } - }); + this.engine.destroy(); if (err) Logger.log('Error with provider stream conn', err); }); } diff --git a/package.json b/package.json index 65f24c4110e0..a2187f5699d9 100644 --- a/package.json +++ b/package.json @@ -150,13 +150,13 @@ "@metamask/composable-controller": "^3.0.0", "@metamask/contract-metadata": "^2.1.0", "@metamask/controller-utils": "^10.0.0", + "@metamask/design-tokens": "^4.0.0", "@metamask/eth-json-rpc-filters": "^7.0.0", "@metamask/eth-json-rpc-middleware": "^12.1.2", - "@metamask/design-tokens": "^4.0.0", "@metamask/eth-sig-util": "^7.0.2", "@metamask/etherscan-link": "^2.0.0", "@metamask/gas-fee-controller": "^15.1.2", - "@metamask/json-rpc-engine": "^7.1.0", + "@metamask/json-rpc-engine": "^9.0.0", "@metamask/key-tree": "^9.0.0", "@metamask/keyring-api": "^6.0.0", "@metamask/keyring-controller": "^16.0.0", @@ -179,11 +179,11 @@ "@metamask/sdk-communication-layer": "^0.20.2", "@metamask/signature-controller": "^16.0.0", "@metamask/slip44": "3.1.0", + "@metamask/smart-transactions-controller": "10.1.1", "@metamask/snaps-controllers": "^8.3.1", "@metamask/snaps-rpc-methods": "^9.0.0", "@metamask/snaps-sdk": "^4.2.0", "@metamask/snaps-utils": "^7.4.0", - "@metamask/smart-transactions-controller": "10.1.1", "@metamask/swappable-obj-proxy": "^2.1.0", "@metamask/swaps-controller": "^9.0.0", "@metamask/transaction-controller": "^13.0.0", diff --git a/yarn.lock b/yarn.lock index a36a50c4d8c0..5f6f70c4b510 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4090,6 +4090,15 @@ "@metamask/safe-event-emitter" "^3.0.0" "@metamask/utils" "^8.3.0" +"@metamask/json-rpc-engine@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-9.0.0.tgz#41224ee7dae6b58befb883fb643fe56f47682fd4" + integrity sha512-/zVBHbDG2VsJMUxKIcNGwg/f9NbMcJxee1qWRtC5HHmyCv5uqfArxOK6yHpjW02d9ENtrj18uWUtP7/ofSoeoQ== + dependencies: + "@metamask/rpc-errors" "^6.2.1" + "@metamask/safe-event-emitter" "^3.0.0" + "@metamask/utils" "^8.3.0" + "@metamask/json-rpc-middleware-stream@^7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.1.tgz#3e10c93c88507b1a55eea5d125ebf87db0f8fead" From eb65e5c43783cba28be4a824063066e7ea061935 Mon Sep 17 00:00:00 2001 From: tommasini Date: Mon, 24 Jun 2024 22:55:15 +0100 Subject: [PATCH 15/25] fix depcheck issues --- app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts | 2 +- app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts | 3 ++- app/core/RPCMethods/utils.ts | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index c37ce9bff14b..7db114f47b9e 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -2,7 +2,7 @@ import { JsonRpcEngine, JsonRpcEngineEndCallback, JsonRpcEngineNextCallback, -} from 'json-rpc-engine'; +} from '@metamask/json-rpc-engine'; import { Json, JsonRpcParams, diff --git a/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts b/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts index 738f6f4c344b..cd6982384693 100644 --- a/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts +++ b/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts @@ -1,5 +1,6 @@ import { rpcErrors } from '@metamask/rpc-errors'; -import type { JsonRpcMiddleware } from 'json-rpc-engine'; +import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine'; + import { UNSUPPORTED_RPC_METHODS } from '../utils'; /** diff --git a/app/core/RPCMethods/utils.ts b/app/core/RPCMethods/utils.ts index 10f8240c1adc..f45b3b702969 100644 --- a/app/core/RPCMethods/utils.ts +++ b/app/core/RPCMethods/utils.ts @@ -2,7 +2,8 @@ import { query } from '@metamask/controller-utils'; import Engine from '../Engine'; import { selectHooks } from '@metamask/snaps-rpc-methods'; import { OptionalDataWithOptionalCause, rpcErrors } from '@metamask/rpc-errors'; -import { JsonRpcMiddleware } from 'json-rpc-engine'; +import { JsonRpcMiddleware } from '@metamask/json-rpc-engine'; + import { PermittedHandlerExport } from '@metamask/permission-controller'; import { Json, JsonRpcParams, hasProperty } from '@metamask/utils'; From ff9d9961b1c71337555aef5c11dfcf7e70a5315c Mon Sep 17 00:00:00 2001 From: tommasini Date: Mon, 24 Jun 2024 23:31:24 +0100 Subject: [PATCH 16/25] fix lint issues --- app/core/RPCMethods/RPCMethodMiddleware.test.ts | 1 - .../RPCMethods/createUnsupportedMethodMiddleware/index.ts | 5 +++-- app/core/RPCMethods/utils.ts | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/core/RPCMethods/RPCMethodMiddleware.test.ts b/app/core/RPCMethods/RPCMethodMiddleware.test.ts index 4347ef5a61e7..48e372167757 100644 --- a/app/core/RPCMethods/RPCMethodMiddleware.test.ts +++ b/app/core/RPCMethods/RPCMethodMiddleware.test.ts @@ -377,7 +377,6 @@ describe('getRpcMethodMiddleware', () => { permissionController.createPermissionMiddleware({ origin: hostMock, }); - // @ts-expect-error TODO engine.push(permissionMiddleware); const middleware = getRpcMethodMiddleware(getMinimalOptions()); engine.push(middleware); diff --git a/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts b/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts index cd6982384693..832ef3c74b06 100644 --- a/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts +++ b/app/core/RPCMethods/createUnsupportedMethodMiddleware/index.ts @@ -2,14 +2,15 @@ import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine'; import { UNSUPPORTED_RPC_METHODS } from '../utils'; +import { Json, JsonRpcParams } from '@metamask/utils'; /** * Creates a middleware that rejects explicitly unsupported RPC methods with the * appropriate error. */ const createUnsupportedMethodMiddleware = (): JsonRpcMiddleware< - unknown, - void + JsonRpcParams, + Json > => async function unsupportedMethodMiddleware(req, _res, next, end) { if ((UNSUPPORTED_RPC_METHODS as Set).has(req.method)) { diff --git a/app/core/RPCMethods/utils.ts b/app/core/RPCMethods/utils.ts index f45b3b702969..b6f78c4efe4c 100644 --- a/app/core/RPCMethods/utils.ts +++ b/app/core/RPCMethods/utils.ts @@ -76,7 +76,7 @@ export function makeMethodMiddlewareMaker( const makeMethodMiddleware = (hooks: Record) => { assertExpectedHook(hooks, expectedHookNames); - const methodMiddleware: JsonRpcMiddleware = async ( + const methodMiddleware: JsonRpcMiddleware = async ( req, res, next, @@ -88,7 +88,6 @@ export function makeMethodMiddlewareMaker( try { // Implementations may or may not be async, so we must await them. return await implementation( - // @ts-expect-error JsonRpcId (number | string | void) doesn't match the permission middleware's id, which is (string | number | null) req, res, next, From 60311653fe4bf99737e1291b7c78bbfb0121764a Mon Sep 17 00:00:00 2001 From: tommasini Date: Tue, 25 Jun 2024 00:32:39 +0100 Subject: [PATCH 17/25] fix lint and fix ts error --- .../RPCMethods/eth_sendTransaction.test.ts | 24 ++++++++----------- app/core/RPCMethods/utils.ts | 2 +- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/app/core/RPCMethods/eth_sendTransaction.test.ts b/app/core/RPCMethods/eth_sendTransaction.test.ts index 91251d6acbbd..b4d6ae302529 100644 --- a/app/core/RPCMethods/eth_sendTransaction.test.ts +++ b/app/core/RPCMethods/eth_sendTransaction.test.ts @@ -44,16 +44,16 @@ jest.mock('../../util/transaction-controller', () => ({ * @param params - The request parameters. * @returns The JSON-RPC request. */ -function constructSendTransactionRequest(params: Json[]): JsonRpcRequest< - [TransactionParams & JsonRpcParams] -> & { +function constructSendTransactionRequest( + params: [TransactionParams & JsonRpcParams], +): JsonRpcRequest<[TransactionParams & JsonRpcParams]> & { method: 'eth_sendTransaction'; } { return { jsonrpc: '2.0', id: 1, method: 'eth_sendTransaction', - params: params as any, + params, }; } @@ -145,15 +145,13 @@ describe('eth_sendTransaction', () => { const mockAddress = '0x0000000000000000000000000000000000000001'; const mockTransactionParameters = { from: mockAddress, - } as TransactionParams; + }; const expectedResult = 'fake-hash'; const pendingResult = constructPendingJsonRpcResponse(); await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest([ - mockTransactionParameters as unknown as JsonRpcParams, - ]) as any, + req: constructSendTransactionRequest([mockTransactionParameters]), res: pendingResult, sendTransaction: getMockAddTransaction({ expectedTransaction: mockTransactionParameters, @@ -175,9 +173,8 @@ describe('eth_sendTransaction', () => { async () => await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest( - invalidParameter as unknown as Json[], - ), + //@ts-expect-error - invalid parameters forced + req: constructSendTransactionRequest(invalidParameter), res: constructPendingJsonRpcResponse(), sendTransaction: getMockAddTransaction({ returnValue: 'fake-hash', @@ -199,9 +196,8 @@ describe('eth_sendTransaction', () => { async () => await eth_sendTransaction({ hostname: 'example.metamask.io', - req: constructSendTransactionRequest( - invalidParameter as unknown as Json[], - ), + //@ts-expect-error - invalid parameters forced + req: constructSendTransactionRequest(invalidParameter), res: constructPendingJsonRpcResponse(), sendTransaction: getMockAddTransaction({ returnValue: 'fake-hash', diff --git a/app/core/RPCMethods/utils.ts b/app/core/RPCMethods/utils.ts index b6f78c4efe4c..a150930722af 100644 --- a/app/core/RPCMethods/utils.ts +++ b/app/core/RPCMethods/utils.ts @@ -92,7 +92,7 @@ export function makeMethodMiddlewareMaker( res, next, end, - selectHooks(hooks, hookNames), + selectHooks(hooks, hookNames) as U, ); } catch (error) { if (process.env.METAMASK_DEBUG) { From 119c6627d99de5b382c5e7b01dee992c5dea4b94 Mon Sep 17 00:00:00 2001 From: tommasini Date: Tue, 25 Jun 2024 00:34:35 +0100 Subject: [PATCH 18/25] dedupe --- yarn.lock | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5f6f70c4b510..4331828385da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3841,22 +3841,7 @@ pify "^3.0.0" safe-stable-stringify "^2.3.2" -"@metamask/eth-json-rpc-middleware@^12.1.0", "@metamask/eth-json-rpc-middleware@^12.1.1": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.1.tgz#5b6a19386f420211cb554c637f0927b76dc3167a" - integrity sha512-6N5y5CIo3mjJlD3oUaCPsAR5KGkxzt2pL+nQaRKwZ0Z0HtXIu0dIKf4awtfzJDNNQGhlPG5Im+kG1oxkh0FkSQ== - dependencies: - "@metamask/eth-block-tracker" "^9.0.2" - "@metamask/eth-json-rpc-provider" "^2.1.0" - "@metamask/eth-sig-util" "^7.0.0" - "@metamask/json-rpc-engine" "^7.1.1" - "@metamask/rpc-errors" "^6.0.0" - "@metamask/utils" "^8.1.0" - klona "^2.0.6" - pify "^5.0.0" - safe-stable-stringify "^2.4.3" - -"@metamask/eth-json-rpc-middleware@^12.1.2": +"@metamask/eth-json-rpc-middleware@^12.1.0", "@metamask/eth-json-rpc-middleware@^12.1.1", "@metamask/eth-json-rpc-middleware@^12.1.2": version "12.1.2" resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-middleware/-/eth-json-rpc-middleware-12.1.2.tgz#41b6cfe232cb4e5fdfed24031f606398b4387ce4" integrity sha512-qhaUq0SenE8P916yuYDj5dbdGRvl/qJDsjPGSlSJOi0QBASFDbKpo5k1st+ban6duJfRUQhrwzERCVyNbtil7w== From ddfb55d9b187e74463d74ddabf94764944ce86c9 Mon Sep 17 00:00:00 2001 From: tommasini Date: Tue, 25 Jun 2024 00:59:28 +0100 Subject: [PATCH 19/25] received always the Internal JSON-RPC error. error message --- .../RPCMethods/createLegacyMethodMiddleware/index.test.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index 7db114f47b9e..34e6125406e8 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -55,6 +55,8 @@ jest.mock('./util', () => { }); describe('createLegacyMethodMiddleware', () => { + const INTERNAL_JSON_RPC_ERROR = 'Internal JSON-RPC error.'; + const method1 = 'method1'; const getDefaultHooks = () => ({ @@ -150,7 +152,7 @@ describe('createLegacyMethodMiddleware', () => { }); assertIsJsonRpcFailure(response); - expect(response.error.message).toBe('test error'); + expect(response.error.message).toBe(INTERNAL_JSON_RPC_ERROR); }); it('should handle errors thrown by the implementation', async () => { @@ -166,7 +168,7 @@ describe('createLegacyMethodMiddleware', () => { }); assertIsJsonRpcFailure(response); - expect(response.error.message).toBe('test error'); + expect(response.error.message).toBe(INTERNAL_JSON_RPC_ERROR); }); it('should handle non-errors thrown by the implementation', async () => { @@ -183,7 +185,7 @@ describe('createLegacyMethodMiddleware', () => { assertIsJsonRpcFailure(response); expect(response.error).toMatchObject({ - message: 'Internal JSON-RPC error.', + message: INTERNAL_JSON_RPC_ERROR, data: 'foo', }); }); From 306f90efd9935c59cb128fe6751a3408042fd974 Mon Sep 17 00:00:00 2001 From: tommasini Date: Tue, 25 Jun 2024 14:38:47 +0100 Subject: [PATCH 20/25] fix on snap bridge --- app/core/Snaps/SnapBridge.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/core/Snaps/SnapBridge.ts b/app/core/Snaps/SnapBridge.ts index 5f5ef371ee9f..0b87c0f30737 100644 --- a/app/core/Snaps/SnapBridge.ts +++ b/app/core/Snaps/SnapBridge.ts @@ -125,14 +125,7 @@ export default class SnapBridge { // TODO: Replace "any" with type // eslint-disable-next-line @typescript-eslint/no-explicit-any pump(outStream, providerStream, outStream, (err: any) => { - // handle any middleware cleanup - // TODO: Replace "any" with type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - engine._middleware.forEach((mid: any) => { - if (mid.destroy && typeof mid.destroy === 'function') { - mid.destroy(); - } - }); + engine.destroy(); if (err) Logger.log('Error with provider stream conn', err); }); }; From a98f7d38f54d991d36044a2fa588925a52a224be Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 25 Jun 2024 15:33:59 +0100 Subject: [PATCH 21/25] feat: update createLegacyMethodMiddleware tests --- .../createLegacyMethodMiddleware/index.test.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index 34e6125406e8..e7fbcb67d5d2 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -8,10 +8,12 @@ import { JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, + JsonRpcResponse, assertIsJsonRpcFailure, assertIsJsonRpcSuccess, } from '@metamask/utils'; import createLegacyMethodMiddleware from '.'; +import { JsonRpcError } from '@metamask/rpc-errors'; jest.mock('./util', () => { const getHandler = () => ({ @@ -144,7 +146,7 @@ describe('createLegacyMethodMiddleware', () => { const engine = new JsonRpcEngine(); engine.push(middleware); - const response = await engine.handle({ + const response: JsonRpcResponse = await engine.handle({ jsonrpc: '2.0', id: 1, method: method1, @@ -152,7 +154,11 @@ describe('createLegacyMethodMiddleware', () => { }); assertIsJsonRpcFailure(response); + // Type assertion for the error not having cause object + const errorData = response.error.data as { cause?: Error }; + expect(response.error.message).toBe(INTERNAL_JSON_RPC_ERROR); + expect(errorData.cause?.message).toBe('test error'); }); it('should handle errors thrown by the implementation', async () => { @@ -168,7 +174,11 @@ describe('createLegacyMethodMiddleware', () => { }); assertIsJsonRpcFailure(response); + // Type assertion for the error not having cause object + const errorData = response.error.data as { cause?: Error }; + expect(response.error.message).toBe(INTERNAL_JSON_RPC_ERROR); + expect(errorData.cause?.message).toBe('test error'); }); it('should handle non-errors thrown by the implementation', async () => { From b7b8f28bf0022cc94b4912dc191ae2d735ca0698 Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 25 Jun 2024 15:36:39 +0100 Subject: [PATCH 22/25] feat: remove type --- app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index e7fbcb67d5d2..41cb518e8a0a 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -146,7 +146,7 @@ describe('createLegacyMethodMiddleware', () => { const engine = new JsonRpcEngine(); engine.push(middleware); - const response: JsonRpcResponse = await engine.handle({ + const response = await engine.handle({ jsonrpc: '2.0', id: 1, method: method1, From def0c9d3f62931b662af338729bc4b894927f619 Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 25 Jun 2024 15:37:52 +0100 Subject: [PATCH 23/25] feat: removed unused imports --- .../createLegacyMethodMiddleware/index.test.ts | 2 -- ios/MetaMask.xcodeproj/project.pbxproj | 12 ++---------- ios/Podfile.lock | 2 +- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index 41cb518e8a0a..edb733c51bba 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -8,12 +8,10 @@ import { JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, - JsonRpcResponse, assertIsJsonRpcFailure, assertIsJsonRpcSuccess, } from '@metamask/utils'; import createLegacyMethodMiddleware from '.'; -import { JsonRpcError } from '@metamask/rpc-errors'; jest.mock('./util', () => { const getHandler = () => ({ diff --git a/ios/MetaMask.xcodeproj/project.pbxproj b/ios/MetaMask.xcodeproj/project.pbxproj index 1ba6e8c3555d..28abcea371a4 100644 --- a/ios/MetaMask.xcodeproj/project.pbxproj +++ b/ios/MetaMask.xcodeproj/project.pbxproj @@ -1487,11 +1487,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "$(inherited)", - "-Wl", - "-ld_classic", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; @@ -1533,11 +1529,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "$(inherited)", - "-Wl", - "-ld_classic", - ); + OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f3c1ddfaecb4..756bfe082364 100755 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1028,7 +1028,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Base64: cecfb41a004124895a7bcee567a89bae5a89d49b - boost: 7dcd2de282d72e344012f7d6564d024930a6a440 + boost: 57d2868c099736d80fcd648bf211b4431e51a558 Branch: 4ac024cb3c29b0ef628048694db3c4cfa679beb0 BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 From 21b26c3ca0b93674b72661eda2c2ccbdeb979cfc Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 25 Jun 2024 15:53:05 +0100 Subject: [PATCH 24/25] Revert "feat: removed unused imports" This reverts commit def0c9d3f62931b662af338729bc4b894927f619. --- .../createLegacyMethodMiddleware/index.test.ts | 2 ++ ios/MetaMask.xcodeproj/project.pbxproj | 12 ++++++++++-- ios/Podfile.lock | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index edb733c51bba..41cb518e8a0a 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -8,10 +8,12 @@ import { JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, + JsonRpcResponse, assertIsJsonRpcFailure, assertIsJsonRpcSuccess, } from '@metamask/utils'; import createLegacyMethodMiddleware from '.'; +import { JsonRpcError } from '@metamask/rpc-errors'; jest.mock('./util', () => { const getHandler = () => ({ diff --git a/ios/MetaMask.xcodeproj/project.pbxproj b/ios/MetaMask.xcodeproj/project.pbxproj index 28abcea371a4..1ba6e8c3555d 100644 --- a/ios/MetaMask.xcodeproj/project.pbxproj +++ b/ios/MetaMask.xcodeproj/project.pbxproj @@ -1487,7 +1487,11 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "$(inherited)"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; @@ -1529,7 +1533,11 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = "$(inherited)"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-Wl", + "-ld_classic", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 756bfe082364..f3c1ddfaecb4 100755 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1028,7 +1028,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Base64: cecfb41a004124895a7bcee567a89bae5a89d49b - boost: 57d2868c099736d80fcd648bf211b4431e51a558 + boost: 7dcd2de282d72e344012f7d6564d024930a6a440 Branch: 4ac024cb3c29b0ef628048694db3c4cfa679beb0 BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 From 6c6132152de8d5339bf687fb4d9569534783e0db Mon Sep 17 00:00:00 2001 From: Aslau Mario-Daniel Date: Tue, 25 Jun 2024 15:54:35 +0100 Subject: [PATCH 25/25] feat: removed unused imports --- app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts index 41cb518e8a0a..edb733c51bba 100644 --- a/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts +++ b/app/core/RPCMethods/createLegacyMethodMiddleware/index.test.ts @@ -8,12 +8,10 @@ import { JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse, - JsonRpcResponse, assertIsJsonRpcFailure, assertIsJsonRpcSuccess, } from '@metamask/utils'; import createLegacyMethodMiddleware from '.'; -import { JsonRpcError } from '@metamask/rpc-errors'; jest.mock('./util', () => { const getHandler = () => ({