{"id":18318,"library":"eth-json-rpc-filters","title":"@metamask/eth-json-rpc-filters","description":"Implementation of Ethereum JSON-RPC filter methods (eth_newFilter, eth_newBlockFilter, eth_newPendingTransactionFilter, eth_uninstallFilter, eth_getFilterChanges, eth_getFilterLogs) as middleware for json-rpc-engine. Current stable version: 9.0.0. Uses eth-block-tracker for block polling and requires an EIP-1193 provider. Key differentiator: specifically designed for MetaMask's architecture, wrapping web3 providers into filter middleware. Supports Node.js >=14.0.0. v7.0.0 renamed from eth-json-rpc-filters to @metamask/eth-json-rpc-filters and dropped Node.js <16.","status":"active","version":"6.0.1","language":"javascript","source_language":"en","source_url":"https://github.com/MetaMask/eth-json-rpc-filters","tags":["javascript"],"install":[{"cmd":"npm install eth-json-rpc-filters","lang":"bash","label":"npm"},{"cmd":"yarn add eth-json-rpc-filters","lang":"bash","label":"yarn"},{"cmd":"pnpm add eth-json-rpc-filters","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for middleware interface","package":"@metamask/json-rpc-engine","optional":false},{"reason":"Powers block tracking for filters","package":"@metamask/eth-block-tracker","optional":false},{"reason":"Provider communication","package":"@metamask/eth-query","optional":false}],"imports":[{"note":"ESM-only since v7; also exported as default.","wrong":"const createFilterMiddleware = require('@metamask/eth-json-rpc-filters')","symbol":"createFilterMiddleware","correct":"import { createFilterMiddleware } from '@metamask/eth-json-rpc-filters'"},{"note":"Default export is same as named. Package renamed from eth-json-rpc-filters to @metamask/eth-json-rpc-filters in v7.","wrong":"const createFilterMiddleware = require('eth-json-rpc-filters')","symbol":"default","correct":"import createFilterMiddleware from '@metamask/eth-json-rpc-filters'"},{"note":"destroy is a method on returned middleware, not a separate import.","wrong":"","symbol":"destroy","correct":"const middleware = createFilterMiddleware({...}); middleware.destroy()"}],"quickstart":{"code":"import { createFilterMiddleware } from '@metamask/eth-json-rpc-filters';\nimport { JsonRpcEngine } from '@metamask/json-rpc-engine';\nimport EthQuery from '@metamask/eth-query';\nimport PollingBlockTracker from '@metamask/eth-block-tracker';\n\nconst provider = { // Example EIP-1193 provider\n  request: async ({ method, params }) => {\n    // In real usage, connect to Ethereum node\n    return {};\n  }\n};\nconst blockTracker = new PollingBlockTracker({ provider });\nconst engine = new JsonRpcEngine();\n\nconst filterMiddleware = createFilterMiddleware({ blockTracker, provider });\nengine.push(filterMiddleware);\n\n// Use engine.handle to process filter RPC requests\n// When done:\nfilterMiddleware.destroy(); // Clean up block tracker listener","lang":"typescript","description":"Create filter middleware, attach to json-rpc-engine, and destroy when done."},"warnings":[{"fix":"Update imports to use @metamask/eth-json-rpc-filters.","message":"Package renamed from eth-json-rpc-filters to @metamask/eth-json-rpc-filters in v7.0.0. Old import paths break.","severity":"breaking","affected_versions":"<7.0.0"},{"fix":"Use Node.js >=14.0.0 (v6+) or >=16.0.0 (v7) or >=18.0.0 (v8+).","message":"Minimum Node.js version raised to v14 in v5.0.0, then to v16 in v7.0.0, and dropped v16/v21 in v8.0.0.","severity":"breaking","affected_versions":"<5.0.0 || <7.0.0 || <8.0.0"},{"fix":"Ensure provider object has a 'request' method instead of 'sendAsync'.","message":"In v9.0.0, provider interface changed: 'sendAsync' is replaced with 'request' method per EIP-1193.","severity":"breaking","affected_versions":">=9.0.0"},{"fix":"Handle missing blocks gracefully; downstream code relying on errors will break.","message":"In v6.0.0, block filter middleware no longer throws an error if a block is not found.","severity":"breaking","affected_versions":">=6.0.0"}],"env_vars":null,"search_vec":"'-1193':45 '14.0.0':63 '16':77 '9.0.0':32 'architectur':54 'block':36,39 'current':29 'design':50 'differenti':48 'drop':75 'eip':44 'engin':28 'eth':10,12,14,16,18,20,35,68 'eth-block-track':34 'eth-json-rpc-filt':67 'ethereum':4 'filter':8,59,71 'getfilterchang':19 'getfilterlog':21 'implement':2 'javascript':78 'json':6,26,69 'json-rpc':5 'json-rpc-engin':25 'key':47 'metamask':52 'metamask/eth-json-rpc-filters':1,73 'method':9 'middlewar':23,60 'newblockfilt':13 'newfilt':11 'newpendingtransactionfilt':15 'node.js':62,76 'poll':40 'provid':46,57 'renam':65 'requir':42 'rpc':7,27,70 'specif':49 'stabl':30 'support':61 'tracker':37 'uninstallfilt':17 'use':33 'v7.0.0':64 'version':31 'web3':56 'wrap':55","created_at":"2026-04-25T07:37:37.254092+00:00","updated_at":"2026-04-25T07:37:37.254092+00:00","problems":[{"fix":"npm install @metamask/eth-json-rpc-filters and update imports.","cause":"Package renamed to @metamask/eth-json-rpc-filters in v7.","error":"Cannot find module 'eth-json-rpc-filters'"},{"fix":"Use a provider with a request method, e.g., window.ethereum.request.","cause":"v9+ expects EIP-1193 request method, not sendAsync.","error":"TypeError: provider.sendAsync is not a function"},{"fix":"Upgrade to v6+ where missing blocks are handled gracefully.","cause":"Using v5.x where missing blocks cause errors.","error":"Error: Block not found"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/MetaMask/eth-json-rpc-filters","docs":null,"changelog":null,"pypi":null,"npm":"https://www.npmjs.com/package/eth-json-rpc-filters","openapi_spec":null,"status_page":null,"smithery":null,"categories":["http-networking","serialization"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-17","next_check":"2026-07-24","install_tag":null}}