Skip to content

Commit

Permalink
Disable origin throttling middleware if cause is reject all approvals
Browse files Browse the repository at this point in the history
  • Loading branch information
OGPoyraz committed Feb 18, 2025
1 parent 599a4b5 commit 3fc019a
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 12 deletions.
9 changes: 8 additions & 1 deletion app/scripts/lib/approval/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,14 @@ export function rejectAllApprovals({

default:
log('Rejecting pending approval', { id });
approvalController.reject(id, providerErrors.userRejectedRequest());
approvalController.reject(
id,
providerErrors.userRejectedRequest({
data: {
cause: 'rejectAllApprovals',
},
}),
);
break;
}
}
Expand Down
32 changes: 32 additions & 0 deletions app/scripts/lib/createOriginThrottlingMiddleware.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { errorCodes } from '@metamask/rpc-errors';

Check failure on line 1 in app/scripts/lib/createOriginThrottlingMiddleware.test.ts

View workflow job for this annotation

GitHub Actions / Test lint / Test lint

'/home/runner/work/metamask-extension/metamask-extension/node_modules/@metamask/rpc-errors/dist/index.d.cts' imported multiple times
import { JsonRpcResponse } from '@metamask/utils';
import type { Json } from '@metamask/utils';
import { providerErrors } from '@metamask/rpc-errors';

Check failure on line 4 in app/scripts/lib/createOriginThrottlingMiddleware.test.ts

View workflow job for this annotation

GitHub Actions / Test lint / Test lint

'/home/runner/work/metamask-extension/metamask-extension/node_modules/@metamask/rpc-errors/dist/index.d.cts' imported multiple times
import createOriginThrottlingMiddleware, {
SPAM_FILTER_ACTIVATED_ERROR,
ExtendedJSONRPCRequest,
Expand Down Expand Up @@ -118,4 +119,35 @@ describe('createOriginThrottlingMiddleware', () => {
});
expect(nextCallback).toHaveBeenCalled();
});

it('does not update throttling state if response has userRejected error and rejectAllApprovals is in the error data', async () => {
const req = {
method: 'eth_sendTransaction',
origin: 'testOrigin',
} as unknown as ExtendedJSONRPCRequest;
const nextCallback = jest.fn();
const next = jest
.fn()
.mockImplementation((callback) => callback(nextCallback));
const end = jest.fn();
const responseWithUserRejectedError = {
error: providerErrors.userRejectedRequest({
data: {
cause: 'rejectAllApprovals',
},
}),
id: 1,
jsonrpc: '2.0',
} as unknown as JsonRpcResponse<Json>;

mockGetThrottledOriginState.mockReturnValueOnce({
rejections: 0,
lastRejection: 0,
});

await middleware(req, responseWithUserRejectedError, next, end);

expect(mockUpdateThrottledOriginState).not.toHaveBeenCalled();
expect(nextCallback).toHaveBeenCalled();
});
});
6 changes: 6 additions & 0 deletions app/scripts/lib/createOriginThrottlingMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ export default function createOriginThrottlingMiddleware({

next((callback: () => void) => {

Check failure on line 84 in app/scripts/lib/createOriginThrottlingMiddleware.ts

View workflow job for this annotation

GitHub Actions / Test lint / Test lint

Expected to return a value at the end of arrow function
if ('error' in res && res.error && isUserRejectedError(res.error)) {
const extraData = res.error?.data as { cause?: string };
// Currently any rejection caused by rejectAll is not considered a spam
if (extraData?.cause === 'rejectAllApprovals') {
return callback();
}

// User rejected the request
const throttledOriginState = getThrottledOriginState(origin) || {
rejections: 0,
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,8 @@
"tslib@npm:^2.6.2": "~2.6.0",
"@metamask/providers@npm:^18.3.1": "patch:@metamask/providers@npm%3A19.0.0#~/.yarn/patches/@metamask-providers-npm-19.0.0-3d962c6f1a.patch",
"@ethersproject/signing-key/elliptic": "^6.6.1",
"gridplus-sdk/elliptic": "^6.6.1"
"gridplus-sdk/elliptic": "^6.6.1",
"@metamask/transaction-controller@npm:^45.0.0": "npm:@metamask-previews/[email protected]"
},
"dependencies": {
"@babel/runtime": "patch:@babel/runtime@npm%3A7.25.9#~/.yarn/patches/@babel-runtime-npm-7.25.9-fe8c62510a.patch",
Expand Down
51 changes: 41 additions & 10 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2307,7 +2307,7 @@ __metadata:
languageName: node
linkType: hard

"@ethereumjs/tx@npm:^5.2.1, @ethereumjs/tx@npm:^5.3.0":
"@ethereumjs/tx@npm:^5.2.1, @ethereumjs/tx@npm:^5.3.0, @ethereumjs/tx@npm:^5.4.0":
version: 5.4.0
resolution: "@ethereumjs/tx@npm:5.4.0"
dependencies:
Expand Down Expand Up @@ -6142,6 +6142,18 @@ __metadata:
languageName: node
linkType: hard

"@metamask/remote-feature-flag-controller@npm:^1.5.0":
version: 1.5.0
resolution: "@metamask/remote-feature-flag-controller@npm:1.5.0"
dependencies:
"@metamask/base-controller": "npm:^8.0.0"
"@metamask/controller-utils": "npm:^11.5.0"
"@metamask/utils": "npm:^11.2.0"
uuid: "npm:^8.3.2"
checksum: 10/2a921d706e655417de24582ebf11ac2153932b97f05a1d24e40d1142e9cd0a9cb9c138033a3bea1f4984aa25a6d65f7834a3c30532f94d2375b792b01c174588
languageName: node
linkType: hard

"@metamask/rpc-errors@npm:^7.0.0, @metamask/rpc-errors@npm:^7.0.1, @metamask/rpc-errors@npm:^7.0.2":
version: 7.0.2
resolution: "@metamask/rpc-errors@npm:7.0.2"
Expand Down Expand Up @@ -6423,23 +6435,24 @@ __metadata:
languageName: node
linkType: hard

"@metamask/transaction-controller@npm:^45.0.0":
version: 45.0.0
resolution: "@metamask/transaction-controller@npm:45.0.0"
"@metamask/transaction-controller@npm:@metamask-previews/transaction-controller@46.0.0-preview-7a21cbc":
version: 46.0.0-preview-7a21cbc
resolution: "@metamask-previews/transaction-controller@npm:46.0.0-preview-7a21cbc"
dependencies:
"@ethereumjs/common": "npm:^3.2.0"
"@ethereumjs/tx": "npm:^4.2.0"
"@ethereumjs/common": "npm:^4.4.0"
"@ethereumjs/tx": "npm:^5.4.0"
"@ethereumjs/util": "npm:^8.1.0"
"@ethersproject/abi": "npm:^5.7.0"
"@ethersproject/contracts": "npm:^5.7.0"
"@ethersproject/providers": "npm:^5.7.0"
"@metamask/base-controller": "npm:^7.1.1"
"@metamask/base-controller": "npm:^8.0.0"
"@metamask/controller-utils": "npm:^11.5.0"
"@metamask/eth-query": "npm:^4.0.0"
"@metamask/metamask-eth-abis": "npm:^3.1.1"
"@metamask/nonce-tracker": "npm:^6.0.0"
"@metamask/remote-feature-flag-controller": "npm:^1.5.0"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.1.0"
"@metamask/utils": "npm:^11.2.0"
async-mutex: "npm:^0.5.0"
bn.js: "npm:^5.2.1"
eth-method-registry: "npm:^4.0.0"
Expand All @@ -6448,12 +6461,13 @@ __metadata:
uuid: "npm:^8.3.2"
peerDependencies:
"@babel/runtime": ^7.0.0
"@metamask/accounts-controller": ^23.0.0
"@metamask/accounts-controller": ^24.0.0
"@metamask/approval-controller": ^7.0.0
"@metamask/eth-block-tracker": ">=9"
"@metamask/gas-fee-controller": ^22.0.0
"@metamask/network-controller": ^22.0.0
checksum: 10/42fc91e4ebb0ad83f8230c2060c392d0ba5fd555a2d3f407862c4574f195f1cb2b57ea025ea332e55a1196605602209219a828c565bd6a13d3135557d7427e24
"@metamask/remote-feature-flag-controller": ^1.3.0
checksum: 10/873330d99a832c89160b64291a15d41887528163bcba376bc9c602b8c5d55089646de811ceb2ee1606d088bf6e18f16858502c0b3f95bb2d1840dade386b7588
languageName: node
linkType: hard

Expand Down Expand Up @@ -6517,6 +6531,23 @@ __metadata:
languageName: node
linkType: hard

"@metamask/utils@npm:^11.2.0":
version: 11.2.0
resolution: "@metamask/utils@npm:11.2.0"
dependencies:
"@ethereumjs/tx": "npm:^4.2.0"
"@metamask/superstruct": "npm:^3.1.0"
"@noble/hashes": "npm:^1.3.1"
"@scure/base": "npm:^1.1.3"
"@types/debug": "npm:^4.1.7"
debug: "npm:^4.3.4"
pony-cause: "npm:^2.1.10"
semver: "npm:^7.5.4"
uuid: "npm:^9.0.1"
checksum: 10/9cc2cb6af4627085e72a310ba9b8921c69757d94e2992d4664627e5a0d99b1f2f7f8069c6f22262515135e1172bd66b82d00512d90ea2ec6da4e768f3d7d4ae2
languageName: node
linkType: hard

"@metamask/utils@npm:^8.2.0, @metamask/utils@npm:^8.3.0":
version: 8.5.0
resolution: "@metamask/utils@npm:8.5.0"
Expand Down

0 comments on commit 3fc019a

Please sign in to comment.