Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions jest.config.packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ module.exports = {
// Here we ensure that Jest resolves `@metamask/*` imports to the uncompiled source code for packages that live in this repo.
// NOTE: This must be synchronized with the `paths` option in `tsconfig.packages.json`.
moduleNameMapper: {
'^@metamask/json-rpc-engine/v2$': [
'<rootDir>/../json-rpc-engine/src/v2/index.ts',
],
'^@metamask/(.+)$': [
'<rootDir>/../$1/src',
// Some @metamask/* packages we are referencing aren't in this monorepo,
Expand Down
8 changes: 2 additions & 6 deletions packages/eth-block-tracker/tests/withBlockTracker.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import { providerFromEngine } from '@metamask/eth-json-rpc-provider';
import type {
// Eip1193Request,
InternalProvider,
} from '@metamask/eth-json-rpc-provider';
import { InternalProvider } from '@metamask/eth-json-rpc-provider';
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
import type { Json } from '@metamask/utils';
import util from 'util';
Expand Down Expand Up @@ -98,7 +94,7 @@ function getFakeProvider({
});
}

const provider = providerFromEngine(new JsonRpcEngine());
const provider = new InternalProvider({ engine: new JsonRpcEngine() });
jest
.spyOn(provider, 'request')
.mockImplementation(async (eip1193Request): Promise<Json> => {
Expand Down
4 changes: 4 additions & 0 deletions packages/eth-json-rpc-middleware/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- **BREAKING:** Use `InternalProvider` instead of `SafeEventEmitterProvider` ([#6796](https://github.com/MetaMask/core/pull/6796))
- Wherever a `SafeEventEmitterProvider` was expected, an `InternalProvider` is now expected instead.
- **BREAKING:** Stop retrying `undefined` results for methods that include a block tag parameter ([#7001](https://github.com/MetaMask/core/pull/7001))
- The `retryOnEmpty` middleware will now throw an error if it encounters an `undefined` result when dispatching
a request with a later block number than the originally requested block number.
- In practice, this should happen rarely if ever.
- Migrate all uses of `interface` to `type` ([#6885](https://github.com/MetaMask/core/pull/6885))

## [21.0.0]
Expand Down
6 changes: 1 addition & 5 deletions packages/eth-json-rpc-middleware/src/retryOnEmpty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,7 @@ import { timeout } from './utils/timeout';
const log = createModuleLogger(projectLogger, 'retry-on-empty');
// empty values used to determine if a request should be retried
// `<nil>` comes from https://github.com/ethereum/go-ethereum/issues/16925
const emptyValues: (string | null | undefined)[] = [
undefined,
null,
'\u003cnil\u003e',
];
const emptyValues = [null, '\u003cnil\u003e'];

/**
* Creates a middleware that retries requests with empty responses.
Expand Down
7 changes: 2 additions & 5 deletions packages/eth-json-rpc-middleware/test/util/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import { PollingBlockTracker } from '@metamask/eth-block-tracker';
import {
providerFromEngine,
type InternalProvider,
} from '@metamask/eth-json-rpc-provider';
import { InternalProvider } from '@metamask/eth-json-rpc-provider';
import {
JsonRpcEngine,
type JsonRpcMiddleware,
Expand Down Expand Up @@ -96,7 +93,7 @@ export function createFinalMiddlewareWithDefaultResult<
*/
export function createProviderAndBlockTracker() {
const engine = new JsonRpcEngine();
const provider = providerFromEngine(engine);
const provider = new InternalProvider({ engine });

const blockTracker = new PollingBlockTracker({
provider,
Expand Down
18 changes: 18 additions & 0 deletions packages/eth-json-rpc-provider/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Add `providerFromMiddlewareV2` ([#7001](https://github.com/MetaMask/core/pull/7001))
- This accepts the new middleware from `@metamask/json-rpc-engine/v2`.

### Changed

- **BREAKING:** Replace `SafeEventEmitterProvider` with `InternalProvider` ([#6796](https://github.com/MetaMask/core/pull/6796))
- The new class is behaviorally equivalent to the previous version except it does not extend `SafeEventEmitter`.
- `SafeEventEmitterProvider` is for now still exported as a deprecated alias of `InternalProvider` for backwards compatibility.
- **BREAKING:** Migrate from `JsonRpcEngine` to `JsonRpcEngineV2` ([#7001](https://github.com/MetaMask/core/pull/7001))
- Legacy `JsonRpcEngine` instances are wrapped in a `JsonRpcEngineV2` internally wherever they appear.
This change should mostly be unobservable. However, due to differences in error handling, this may be breaking for consumers.

### Deprecated

- Deprecate `providerFromMiddleware` ([#7001](https://github.com/MetaMask/core/pull/7001))
- Use `providerFromMiddlewareV2` instead, which supports the new middleware from `@metamask/json-rpc-engine/v2`.

### Removed

- **BREAKING:** Remove `providerFromEngine` ([#7001](https://github.com/MetaMask/core/pull/7001))
- Use `InternalProvider` directly instead.

## [5.0.1]

Expand Down
2 changes: 1 addition & 1 deletion packages/eth-json-rpc-provider/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"@metamask/json-rpc-engine": "^10.1.1",
"@metamask/rpc-errors": "^7.0.2",
"@metamask/utils": "^11.8.1",
"uuid": "^8.3.2"
"nanoid": "^3.3.8"
Copy link
Contributor

@mcmire mcmire Nov 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Admittedly when I added request to the provider I swapped out nanoid for uuid. My thinking was that uuid was more standard. I'm just curious, what are your thoughts on this? (I can be convinced the other way)

},
"devDependencies": {
"@ethersproject/providers": "^5.7.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/eth-json-rpc-provider/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import * as allExports from '.';

describe('Package exports', () => {
it('has expected exports', () => {
expect(Object.keys(allExports)).toMatchInlineSnapshot(`
expect(Object.keys(allExports).sort()).toMatchInlineSnapshot(`
Array [
"InternalProvider",
"SafeEventEmitterProvider",
"providerFromEngine",
"providerFromMiddleware",
"providerFromMiddlewareV2",
]
`);
});
Expand Down
1 change: 0 additions & 1 deletion packages/eth-json-rpc-provider/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { InternalProvider } from './internal-provider';

export * from './provider-from-engine';
export * from './provider-from-middleware';

/**
Expand Down
Loading
Loading