From 6bfe741c53a0491e71707ddecd838cbaadbe882f Mon Sep 17 00:00:00 2001 From: snowingfox <1503401882@qq.com> Date: Tue, 11 Aug 2026 21:28:39 +0000 Subject: [PATCH] fix(eth-block-tracker): promote @metamask/json-rpc-engine to a production dependency Fixes #6864 --- packages/eth-block-tracker/CHANGELOG.md | 1 + packages/eth-block-tracker/package.json | 2 +- .../src/dependencies.test.ts | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/eth-block-tracker/src/dependencies.test.ts diff --git a/packages/eth-block-tracker/CHANGELOG.md b/packages/eth-block-tracker/CHANGELOG.md index a3a78df6537..cf503622f28 100644 --- a/packages/eth-block-tracker/CHANGELOG.md +++ b/packages/eth-block-tracker/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Promote `@metamask/json-rpc-engine` from a dev dependency to a production dependency, so the `ContextConstraint` and `MiddlewareContext` types it contributes to `PollingBlockTracker`'s public declaration files resolve for downstream consumers ([#6864](https://github.com/MetaMask/core/issues/6864)) - Deduplicate concurrent `checkForLatestBlock()` calls so they share a single ongoing request and resolve to the same promise, instead of each issuing its own `eth_blockNumber` request ([#7905](https://github.com/MetaMask/core/pull/7905)) ## [15.0.1] diff --git a/packages/eth-block-tracker/package.json b/packages/eth-block-tracker/package.json index bf2d8c49b59..abceb926b24 100644 --- a/packages/eth-block-tracker/package.json +++ b/packages/eth-block-tracker/package.json @@ -56,13 +56,13 @@ }, "dependencies": { "@metamask/eth-json-rpc-provider": "^6.0.1", + "@metamask/json-rpc-engine": "^10.5.0", "@metamask/safe-event-emitter": "^3.0.0", "@metamask/utils": "^11.11.0", "json-rpc-random-id": "^1.0.1" }, "devDependencies": { "@metamask/auto-changelog": "^6.1.0", - "@metamask/json-rpc-engine": "^10.5.0", "@ts-bridge/cli": "^0.6.4", "@types/jest": "^30.0.0", "@types/json-rpc-random-id": "^1.0.1", diff --git a/packages/eth-block-tracker/src/dependencies.test.ts b/packages/eth-block-tracker/src/dependencies.test.ts new file mode 100644 index 00000000000..6897741127f --- /dev/null +++ b/packages/eth-block-tracker/src/dependencies.test.ts @@ -0,0 +1,22 @@ +import { readFileSync } from 'fs'; +import { resolve } from 'path'; + +describe('@metamask/eth-block-tracker package manifest', () => { + it('declares @metamask/json-rpc-engine as a production dependency', () => { + // `PollingBlockTracker.ts` imports the `ContextConstraint` and + // `MiddlewareContext` types from `@metamask/json-rpc-engine/v2` with a + // type-only import. Those types leak into the published declaration files + // through `PollingBlockTrackerOptions` and the `PollingBlockTracker` class + // generic, so consumers need `@metamask/json-rpc-engine` resolvable when + // type-checking against this package. It must therefore be a production + // dependency rather than only a devDependency. + // + // Regression test for https://github.com/MetaMask/core/issues/6864 + const packageJsonPath = resolve(__dirname, '..', 'package.json'); + const { dependencies } = JSON.parse( + readFileSync(packageJsonPath, 'utf8'), + ) as { dependencies: Record }; + + expect(dependencies['@metamask/json-rpc-engine']).toBeDefined(); + }); +});