Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align NetworkController provider type w/ eth-query #2028

Merged
merged 2 commits into from
Nov 14, 2023

Conversation

mcmire
Copy link
Contributor

@mcmire mcmire commented Nov 13, 2023

Explanation

Recent changes in @metamask/utils caused SafeEventEmitterProvider, the type of the provider that NetworkController exposes, to no longer align with the provider that @metamask/eth-query expects. We temporarily worked around this with the use of // @ts-expect-error, but this merely hid the problem. A fix was made in @metamask/eth-query, so this commit bumps that package and removes the associated // @ts-expect-error lines.

References

Fixes #1823.

Also see: MetaMask/eth-query#21

Changelog

(See updates to changelogs in this PR.)

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've highlighted breaking changes using the "BREAKING" category above as appropriate

Recent changes in `@metamask/utils` caused SafeEventEmitterProvider, the
type of the provider that NetworkController exposes, to no longer align
with the provider that `@metamask/eth-query` expects. We temporarily
worked around this with the use of `// @ts-expect-error`, but this
merely hid the problem. A fix was made in `@metamask/eth-query`, so this
commit bumps that package and removes the associated
`// @ts-expect-error` lines.
@mcmire mcmire requested a review from a team as a code owner November 13, 2023 17:13
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Changed
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm experimenting with adding changelogs directly to PRs. One thing I noticed is that in order to know which PR number to put here, I had to first push up this PR, then add these entries, so we'll have to note that if/when we decide to stick with this process.

Copy link
Contributor

@MajorLift MajorLift left a comment

Choose a reason for hiding this comment

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

LGTM as follow-up from MetaMask/eth-query#21!

@MajorLift
Copy link
Contributor

I've made progress with removing // @ts-expect-error Mock eth query does not fulfill type requirements annotations in test files by building on this. I'll open a separate PR to address that.

@mcmire mcmire merged commit da59bf9 into main Nov 14, 2023
128 checks passed
@mcmire mcmire deleted the fix-provider-type-alignment-issues branch November 14, 2023 06:15
MajorLift added a commit that referenced this pull request Nov 15, 2023
## Explanation

Fixes `// @ts-expect-error Mock eth query does not fulfill type
requirements` annotations throughout core repo.

## References

- Builds upon
  - MetaMask/eth-query#21
  - #2028
- Related #1823
- Closes #2036

## Changelog

N/A

## Checklist

- [x] I've updated the test suite for new or updated code as appropriate
- [x] I've updated documentation (JSDoc, Markdown, etc.) for new or
updated code as appropriate
- [x] I've highlighted breaking changes using the "BREAKING" category
above as appropriate
MajorLift added a commit to MetaMask/ppom-validator that referenced this pull request Feb 15, 2024
## Explanation

Reduces repo-wide `any` count to 1 (excluding test files).

- Types `provider` variables using the `Provider` type from `@metamask/network-controller`.
  - The `Provider` type is now safe to use, with its recent alignment issues resolved as of MetaMask/eth-query#21.
  - See also MetaMask/core#2028).
- Fixes JSON-RPC typing for provider requests.
  - Installs `@metamask/utils` as a dependency.
- Types `PPOM` variables with provisional skeleton type. 
- Fixes for controller-messenger typing.
- Fixes for misc. `any` usage

## References

- Closes #144

## Changelog

### Changed
- Add `@metamask/utils` ^8.3.0 as a dependency. ([#89](#89))

### Removed
- **BREAKING:** `NetworkControllerStateChangeEvent` is removed from the `PPOMControllerEvents` union type. ([#89](#89))

### Fixed
- **BREAKING**: `PPOMController` class constructor option types are narrowed from `any`. ([#89](#89))
  - The constructor expects `provider` to be the `Provider` type from `@metamask/network-controller` (equivalent to `SafeEventEmitterProvider` from `@metamask/eth-json-rpc-provider`).
  - The constructor expects `onPreferencesChange` to be `(callback: (preferencesState: { securityAlertsEnabled: boolean } & Record<string, Json>) => void) => void`.
- **BREAKING:** The `UsePPOM` type replaces `any` with the `PPOM` type in its definition. ([#89](#89))
- **BREAKING:** When a `PPOM` class instance makes JSON-RPC requests to the provider, the `params` type is now widened from `Record<string, unknown>` to `JsonRpcParams`, and the response type is narrowed from `any` to `JsonRpcSuccess<Json>`. ([#89](#89))

## Commits

* Linter fixes

* Install `@metamask/utils` as dependency

* Add entries to depcheck ignore to fix yarn depcheck error

* Fix JSON RPC types for provider requests

* Fix controller-messenger typing

* Explicitly enumerate package-level exports from `ppom-controller`

* Type `provider` variables with `SafeEventEmitterProvider` from network-controller

* Type `ppom` variables with provisional skeleton type

* Fix various `any` usage and typos

* Add TODO for fixing `any`

* Improve error response typing for `#jsonRpcRequest`

* Replace null check for `oldestChainId` with non-null assertion

* Replace null check for `this.#ppom` with non-null assertion

* Replace unnecessary null fallback with non-null assertion

* Linter fix

* Record CHANGELOG

* Remove changelog entries
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fix provider type errors in NetworkController and its downstream packages
2 participants