{"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,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","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,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}