mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Adding middleware to filter out duplicate requests from DAPP (#16730)
This commit is contained in:
parent
31bd70de62
commit
a5e70cbd71
23
app/scripts/lib/createDupeReqFilterMiddleware.js
Normal file
23
app/scripts/lib/createDupeReqFilterMiddleware.js
Normal file
@ -0,0 +1,23 @@
|
||||
import log from 'loglevel';
|
||||
|
||||
/**
|
||||
* Returns a middleware that filters out requests already seen
|
||||
*
|
||||
* @returns {Function}
|
||||
*/
|
||||
export default function createDupeReqFilterMiddleware() {
|
||||
const processedRequestId = [];
|
||||
return function filterDuplicateRequestMiddleware(
|
||||
/** @type {any} */ req,
|
||||
/** @type {any} */ _res,
|
||||
/** @type {Function} */ next,
|
||||
/** @type {Function} */ end,
|
||||
) {
|
||||
if (processedRequestId.indexOf(req.id) >= 0) {
|
||||
log.info(`RPC request with id ${req.id} already seen.`);
|
||||
return end();
|
||||
}
|
||||
processedRequestId.push(req.id);
|
||||
return next();
|
||||
};
|
||||
}
|
30
app/scripts/lib/createDupeReqFilterMiddleware.test.js
Normal file
30
app/scripts/lib/createDupeReqFilterMiddleware.test.js
Normal file
@ -0,0 +1,30 @@
|
||||
import createDupeReqFilterMiddleware from './createDupeReqFilterMiddleware';
|
||||
|
||||
describe('createDupeReqFilterMiddleware', () => {
|
||||
it('call function next if request is seen first time', () => {
|
||||
const filterFn = createDupeReqFilterMiddleware();
|
||||
const request = { id: 1 };
|
||||
const nextMock = jest.fn();
|
||||
const endMock = jest.fn();
|
||||
|
||||
filterFn(request, undefined, nextMock, endMock);
|
||||
|
||||
expect(nextMock).toBeCalledTimes(1);
|
||||
expect(endMock).not.toBeCalled();
|
||||
});
|
||||
|
||||
it('call function end if request is seen second time', () => {
|
||||
const filterFn = createDupeReqFilterMiddleware();
|
||||
const request = { id: 1 };
|
||||
const nextMock = jest.fn();
|
||||
const endMock = jest.fn();
|
||||
|
||||
filterFn(request, undefined, nextMock, endMock);
|
||||
expect(nextMock).toBeCalledTimes(1);
|
||||
expect(endMock).not.toBeCalled();
|
||||
|
||||
filterFn(request, undefined, nextMock, endMock);
|
||||
expect(nextMock).toBeCalledTimes(1);
|
||||
expect(endMock).toBeCalledTimes(1);
|
||||
});
|
||||
});
|
@ -113,6 +113,7 @@ import {
|
||||
} from './detect-multiple-instances';
|
||||
import ComposableObservableStore from './lib/ComposableObservableStore';
|
||||
import AccountTracker from './lib/account-tracker';
|
||||
import createDupeReqFilterMiddleware from './lib/createDupeReqFilterMiddleware';
|
||||
import createLoggerMiddleware from './lib/createLoggerMiddleware';
|
||||
import {
|
||||
createMethodMiddleware,
|
||||
@ -3730,6 +3731,10 @@ export default class MetamaskController extends EventEmitter {
|
||||
engine.emit('notification', message),
|
||||
);
|
||||
|
||||
if (isManifestV3) {
|
||||
engine.push(createDupeReqFilterMiddleware());
|
||||
}
|
||||
|
||||
// append origin to each request
|
||||
engine.push(createOriginMiddleware({ origin }));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user