chore: bump dependents to @metamask/utils@^12.0.0 - #10192
Merged
Merged
Conversation
2 of 4 tasks
cryptodev-2s
added this pull request to stack #10193
September 11, 2026 10:55
cryptodev-2s
force-pushed
the
chore/utils-bump-dependents
branch
from
September 11, 2026 11:03
f275644 to
a439c10
Compare
cryptodev-2s
marked this pull request as ready for review
September 11, 2026 11:04
cryptodev-2s
force-pushed
the
chore/utils-bump-dependents
branch
from
September 11, 2026 11:12
a439c10 to
4b34e4d
Compare
cryptodev-2s
force-pushed
the
chore/utils-bump-dependents
branch
from
September 11, 2026 11:20
4b34e4d to
9ecc84e
Compare
github-merge-queue
Bot
removed this pull request from the merge queue because a pull request earlier in the stack was removed
Sep 11, 2026
cryptodev-2s
force-pushed
the
chore/utils-bump-dependents
branch
from
September 11, 2026 13:53
0f22715 to
e2129eb
Compare
mcmire
approved these changes
Sep 11, 2026
cryptodev-2s
added a commit
to MetaMask/utils
that referenced
this pull request
Sep 11, 2026
Step D-3 of the [package migration process](https://github.com/MetaMask/core/blob/main/docs/processes/package-migration-process-guide.md). `@metamask/utils` now lives in the core monorepo ([MetaMask/core#10185](MetaMask/core#10185) moved it, [MetaMask/core#10192](MetaMask/core#10192) bumped the dependents), so this swaps the "migration in progress" notice for the archived one from the guide. Open issues have been transferred to core and the remaining open PRs are commented and locked. Archiving the repo is the next step. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Documentation-only README change with no runtime or dependency impact. > > **Overview** > Updates the **README** migration banner for package migration step D-3: it no longer warns that migration is in progress or asks contributors to reopen PRs in **core**, and instead states that **`@metamask/utils`** has moved to the [**MetaMask/core**](https://github.com/MetaMask/core) monorepo, **this repo is archived**, and all future work should happen in **core**. > > The notice is also reformatted from a single-line HTML table into a multi-line layout; installation and API content are unchanged. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 13e0cdd. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
pull Bot
pushed a commit
to Reality2byte/core
that referenced
this pull request
Sep 11, 2026
## Explanation Phase C of migrating `@metamask/utils`, following [the package migration process guide](https://github.com/MetaMask/core/blob/main/docs/processes/package-migration-process-guide.md). This moves the package from `merged-packages/` into `packages/` and wires it into the monorepo. - `merged-packages/utils` → `packages/utils`, registered as a workspace - Reference paths added to the root `tsconfig.json`, `tsconfig.build.json` and `tsconfig.lint.json` - The version bump for dependents is split into a follow up (MetaMask#10192) to keep this diff reviewable. This PR adds a temporary `@metamask/utils` entry to `ALLOWED_INCONSISTENT_DEPENDENCIES` in `yarn.config.cjs` so constraints pass while dependents are still on the published version; MetaMask#10192 removes it. The two are meant to land together. - Downstream tsconfig references added via `yarn lint:tsconfigs:fix:all` (174 files). Without them `yarn lint:tsc` reported 536 errors; it is now clean - `yarn constraints --fix` applied, which split the test scripts into `test:unit` and `test:types` - CODEOWNERS entry added through `codeowners.ts` and `teams.json`, assigning the package to `@MetaMask/core-platform` as with the other foundational packages - README package list and dependency graph regenerated with `yarn readme-content:update` ### Type tests moved from `tsd` to `tstyche` The package's type tests import from source (`./index.js`, `./misc.js`), so they never needed built declarations. `tsd` requires a typings file as a structural precondition regardless, which forced a build purely to satisfy the tool. `tstyche` type checks source directly and is already used by `@metamask/messenger`, so the four `*.test-d.ts` files are now `*.tst.ts`, with all 120 assertions preserved. That removed three workarounds: a `composite: false` override for `tsd`, a `--typings` flag, and the `*.test-d.ts` exclusion in `tsconfig.lint.json`. That last one existed because `tsd`'s own types pull in `lib="esnext"`, widening built in types like `ReadonlySet` past this package's target. With that gone the type tests are covered by `lint:tsc` rather than excluded from it, and `tsd` leaves the lockfile entirely. ### Root tooling now resolves the package from source Nine files at the repository root import `@metamask/utils`, which previously arrived prebuilt from npm. As a workspace its `dist` does not exist until something builds it, and the lint jobs do not build, so `constraints`, `lint:teams` and `lint:tsconfigs:all` all failed on a fresh checkout. Adding a `paths` entry to the root `tsconfig.json` fixes the scripts. `yarn.config.cjs` is the exception, since Yarn loads it as plain CommonJS where `paths` do not apply and a `.ts` file cannot be required. It only used `hasProperty`, whose runtime body is a single expression, so it now calls `Object.hasOwn` directly. That is available on every supported Node version. All of the following pass with no build artifacts present: `constraints`, `lint:teams`, `lint:tsconfigs:all`, `readme-content:check`, `codeowners:check`, `lint:tsc`, `lint:misc:check`, and the package's own tests. ### Inherited lint findings 86 pre-existing findings in the package, mostly `no-explicit-any` in tests, are recorded in `eslint-suppressions.json` rather than fixed here, matching how this repo tracks that debt. They came from rules the package's own ESLint config had disabled before the migration. ## References - Follows MetaMask#10175, MetaMask#10178, MetaMask#10179, MetaMask#10180, MetaMask#10181 and MetaMask#10182 - Migration process guide: `docs/processes/package-migration-process-guide.md` ## 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 - [ ] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md) - [ ] I've introduced [breaking changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md) in this PR and have prepared draft pull requests for clients and consumer packages to resolve them <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Wide monorepo integration touches build graphs and resolution for a foundational dependency; temporary dual resolution (workspace v12 vs published v11) must land with the follow-up bump to avoid inconsistent runtime/types. > > **Overview** > **`@metamask/utils` is now a workspace package at `packages/utils` (v12.0.0)** instead of living under `merged-packages/` or npm-only. Repo metadata, CODEOWNERS/`teams.json`, README list/graph, and root `tsconfig` project references are updated so the package builds and lints with the rest of core. > > **Monorepo wiring:** Jest and root/script `tsconfig` paths resolve `@metamask/utils` (and `/node`) to **TypeScript source** so tests and lint work without a prior build. Package `tsconfig` references to `../utils` were added across dependents. **`tsconfig.packages.json` still maps `@metamask/utils` to published v11 in `node_modules`** until a follow-up bumps dependents; `yarn.config.cjs` temporarily allows that version skew and drops the `@metamask/utils` import in favor of **`Object.hasOwn`**. > > **Package tooling:** Type tests move from **`tsd` (`*.test-d.ts`) to `tstyche` (`*.tst.ts`)**; build excludes `*.tst.ts`. Unused **`@metamask/utils` dependencies are removed** from a few packages (e.g. messenger, ai-controllers). Pre-existing ESLint issues in `packages/utils` are **recorded in `eslint-suppressions.json`**. Stale **`merged-packages/utils`** type-test and lint config files are removed. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit dd04556. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 of 4 tasks
Merged
3 of 4 tasks
pull Bot
pushed a commit
to Reality2byte/core
that referenced
this pull request
Sep 18, 2026
## Explanation Creates monorepo release 1265.0.0 with one package release: - `@metamask/analytics-controller` 3.1.0 This release ships independent marketing consent and purpose-aware event classification. It adds `optedInToMarketing`, `optInToMarketing` / `optOutOfMarketing` / `resetMarketingConsentDecision`, and a persisted `eventsConfig` whose unlisted events default to product-only. Named `track` and `view` payloads are delivered once with their allowed purposes in `context.consent.categoryPreferences` and their capture-time config version in `context.eventsConfigVersion`. Queues and fragments retain capture-time purpose classification so config changes cannot reclassify captured events. Mixed-purpose fragments classify each declared lifecycle event independently. Workspace dependents `@metamask/network-controller` and `@metamask/wallet-cli` are aligned to `@metamask/analytics-controller` `^3.1.0`. The release also includes pending dependency bumps for `uuid` (`^8.3.2` → `^11.1.1`) and `@metamask/utils` (`^11.12.0` → `^12.0.0`). ## References - MetaMask#10232 - MetaMask#10117 - MetaMask#10243 - MetaMask#10192 ## 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 communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md) - [ ] I've introduced [breaking changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md) in this PR and have prepared draft pull requests for clients and consumer packages to resolve them Made with [Cursor](https://cursor.com) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Merged
FrederikBolding
pushed a commit
that referenced
this pull request
Sep 28, 2026
## @metamask/base-data-service ## [2.1.0] ### Added - Add `executeMutation` protected method to `BaseDataService` to allow for making server-state-mutating requests ([#9324](#9324)) - These kinds of requests are never retried, unlike queries. - To use this, create a method in your data service class which takes whatever arguments you need, plus a optional final argument called `globalId`; then call `executeMutation` with a `mutationKey`, `globalId`, and `mutationFn`. See `ExampleDataService` in this package for an example. - A `MutationKey` type is also available. - Add protected `cancelQueries` so subclasses can abort in-flight reads before a forced refresh ([#10454](#10454)) ### Changed - The payload for `:cacheUpdated` and `:cacheUpdated:${hash}` events now includes an `objectType` property, which is either "query" or "mutation" ([#9324](#9324)) - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([#10192](#10192)) - Add `uuid` `^11.1.1` as a dependency ([#9324](#9324)) - Bump `@tanstack/query-core` from `^5.62.16` to `^5.89.0` ([#9324](#9324)) - Bump `cockatiel` from `^3.1.2` to `^3.2.1` ([#10436](#10436)) - Bump `lodash-es` from `^4.17.21` to `^4.18.1` ([#10447](#10447)) ## @metamask/money-account-api-data-service ## [2.0.0] ### Added - Add optional `fresh` option to `fetchPositions` that cancels in-flight reads, fetches with a zero stale time, invalidates the result for subsequent reads, and sends `Cache-Control: no-cache` so the Money API skips its Nest response cache when supported ([#10455](#10455)) - Accept optional additive `musd_balance_updated_at` on the positions `balance` summary ([#10455](#10455)) - Accept vault metadata on each position returned by `fetchPositions`: `chain_id`, `vault_key`, `name`, `asset_symbol`, and `asset_decimals` ([#10500](#10500)) - Accept multi-asset balance fields `by_asset` and `total_balance_usd` on the positions `balance` summary, and export `AssetBalance` ([#10500](#10500)) ### Changed - **BREAKING:** `effective_apy` on a vault position is now `string | null`. `null` means the position has been invested for fewer than 28 days, and is distinct from a rate of zero ([#10500](#10500)) - Bump `@metamask/base-data-service` from `^2.0.0` to `^2.1.0` - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([#10192](#10192)) - Bump `@tanstack/query-core` from `^5.62.16` to `^5.89.0` ([#9324](#9324)) ## @metamask/money-account-balance-service ## [3.1.0] ### Added - Surface Money API freshness on `fetchBalanceWithFallback` results (`asOfBlock`, `asOfTimestamp`, `dataFreshness`, `indexerLagSeconds`, `musdBalanceUpdatedAt`) when `source` is `api` ([#10455](#10455)) - Add optional `FetchBalanceWithFallbackOptions` (`minBlock`, `fresh`): when the API `as_of_block` is behind `minBlock`, throw `MoneyAccountBalanceStaleError` and fall back to RPC without reporting a defect; `minBlock` implies a fresh positions read, and explicit `fresh` is also forwarded to `fetchPositions` ([#10455](#10455)) - Export `MoneyAccountBalanceStaleError` ([#10455](#10455)) ### Changed - Bump `@metamask/money-account-api-data-service` from `^1.0.0` to `^2.0.0` - Bump `@metamask/base-data-service` from `^2.0.0` to `^2.1.0` - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([#10192](#10192)) - Bump `@ethersproject/providers` from `^5.7.0` to `^5.8.0` ([#10482](#10482)) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > The release bundles Money balance/positions API behavior changes including a breaking type change and post-tx staleness fallback logic, even though this PR only cuts versions and dependency ranges. > > **Overview** > **Monorepo release 1294.0.0** that cuts new package versions and aligns dependents—there are no application source edits in this diff, only `package.json`, changelog, and lockfile updates. > > **Version cuts:** `@metamask/base-data-service` **2.1.0**, `@metamask/money-account-api-data-service` **2.0.0**, and `@metamask/money-account-balance-service` **3.1.0**, with `[Unreleased]` notes moved into those release sections. The root monorepo version moves **1293.0.0 → 1294.0.0**. > > **Dependency propagation:** Every listed consumer bumps `@metamask/base-data-service` from `^2.0.0` to `^2.1.0`. `@metamask/money-account-balance-service` picks up `@metamask/money-account-api-data-service` **^2.0.0**; `@metamask/subscription-controller` also bumps `@metamask/money-account-balance-service` to **^3.1.0**. > > **What ships in those releases (via changelog, not new code here):** `BaseDataService` gains mutation/query-cancel plumbing and richer cache events; Money API positions support forced refresh, richer balance/position shapes, and a **breaking** `effective_apy: string | null`; balance fallback exposes API freshness metadata and optional `minBlock` / `fresh` behavior with `MoneyAccountBalanceStaleError`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit ee833b1. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
pull Bot
pushed a commit
to Reality2byte/core
that referenced
this pull request
Sep 28, 2026
## @metamask/base-data-service ## [2.1.0] ### Added - Add `executeMutation` protected method to `BaseDataService` to allow for making server-state-mutating requests ([MetaMask#9324](MetaMask#9324)) - These kinds of requests are never retried, unlike queries. - To use this, create a method in your data service class which takes whatever arguments you need, plus a optional final argument called `globalId`; then call `executeMutation` with a `mutationKey`, `globalId`, and `mutationFn`. See `ExampleDataService` in this package for an example. - A `MutationKey` type is also available. - Add protected `cancelQueries` so subclasses can abort in-flight reads before a forced refresh ([MetaMask#10454](MetaMask#10454)) ### Changed - The payload for `:cacheUpdated` and `:cacheUpdated:${hash}` events now includes an `objectType` property, which is either "query" or "mutation" ([MetaMask#9324](MetaMask#9324)) - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([MetaMask#10192](MetaMask#10192)) - Add `uuid` `^11.1.1` as a dependency ([MetaMask#9324](MetaMask#9324)) - Bump `@tanstack/query-core` from `^5.62.16` to `^5.89.0` ([MetaMask#9324](MetaMask#9324)) - Bump `cockatiel` from `^3.1.2` to `^3.2.1` ([MetaMask#10436](MetaMask#10436)) - Bump `lodash-es` from `^4.17.21` to `^4.18.1` ([MetaMask#10447](MetaMask#10447)) ## @metamask/money-account-api-data-service ## [2.0.0] ### Added - Add optional `fresh` option to `fetchPositions` that cancels in-flight reads, fetches with a zero stale time, invalidates the result for subsequent reads, and sends `Cache-Control: no-cache` so the Money API skips its Nest response cache when supported ([MetaMask#10455](MetaMask#10455)) - Accept optional additive `musd_balance_updated_at` on the positions `balance` summary ([MetaMask#10455](MetaMask#10455)) - Accept vault metadata on each position returned by `fetchPositions`: `chain_id`, `vault_key`, `name`, `asset_symbol`, and `asset_decimals` ([MetaMask#10500](MetaMask#10500)) - Accept multi-asset balance fields `by_asset` and `total_balance_usd` on the positions `balance` summary, and export `AssetBalance` ([MetaMask#10500](MetaMask#10500)) ### Changed - **BREAKING:** `effective_apy` on a vault position is now `string | null`. `null` means the position has been invested for fewer than 28 days, and is distinct from a rate of zero ([MetaMask#10500](MetaMask#10500)) - Bump `@metamask/base-data-service` from `^2.0.0` to `^2.1.0` - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([MetaMask#10192](MetaMask#10192)) - Bump `@tanstack/query-core` from `^5.62.16` to `^5.89.0` ([MetaMask#9324](MetaMask#9324)) ## @metamask/money-account-balance-service ## [3.1.0] ### Added - Surface Money API freshness on `fetchBalanceWithFallback` results (`asOfBlock`, `asOfTimestamp`, `dataFreshness`, `indexerLagSeconds`, `musdBalanceUpdatedAt`) when `source` is `api` ([MetaMask#10455](MetaMask#10455)) - Add optional `FetchBalanceWithFallbackOptions` (`minBlock`, `fresh`): when the API `as_of_block` is behind `minBlock`, throw `MoneyAccountBalanceStaleError` and fall back to RPC without reporting a defect; `minBlock` implies a fresh positions read, and explicit `fresh` is also forwarded to `fetchPositions` ([MetaMask#10455](MetaMask#10455)) - Export `MoneyAccountBalanceStaleError` ([MetaMask#10455](MetaMask#10455)) ### Changed - Bump `@metamask/money-account-api-data-service` from `^1.0.0` to `^2.0.0` - Bump `@metamask/base-data-service` from `^2.0.0` to `^2.1.0` - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([MetaMask#10192](MetaMask#10192)) - Bump `@ethersproject/providers` from `^5.7.0` to `^5.8.0` ([MetaMask#10482](MetaMask#10482)) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > The release bundles Money balance/positions API behavior changes including a breaking type change and post-tx staleness fallback logic, even though this PR only cuts versions and dependency ranges. > > **Overview** > **Monorepo release 1294.0.0** that cuts new package versions and aligns dependents—there are no application source edits in this diff, only `package.json`, changelog, and lockfile updates. > > **Version cuts:** `@metamask/base-data-service` **2.1.0**, `@metamask/money-account-api-data-service` **2.0.0**, and `@metamask/money-account-balance-service` **3.1.0**, with `[Unreleased]` notes moved into those release sections. The root monorepo version moves **1293.0.0 → 1294.0.0**. > > **Dependency propagation:** Every listed consumer bumps `@metamask/base-data-service` from `^2.0.0` to `^2.1.0`. `@metamask/money-account-balance-service` picks up `@metamask/money-account-api-data-service` **^2.0.0**; `@metamask/subscription-controller` also bumps `@metamask/money-account-balance-service` to **^3.1.0**. > > **What ships in those releases (via changelog, not new code here):** `BaseDataService` gains mutation/query-cancel plumbing and richer cache events; Money API positions support forced refresh, richer balance/position shapes, and a **breaking** `effective_apy: string | null`; balance fallback exposes API freshness metadata and optional `minBlock` / `fresh` behavior with `MoneyAccountBalanceStaleError`. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit ee833b1. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explanation
Follow up to #10185, which moved
@metamask/utilsintopackages/. This bumps its dependents to the local version.@metamask/utilsbumped from^11.12.0to^12.0.0in 79 packages and the root@metamask/utilsentry fromALLOWED_INCONSISTENT_DEPENDENCIESinyarn.config.cjs, which chore: integrate@metamask/utilsintopackages/#10185 added so that constraints would pass while the dependents were still on the published versionThese two PRs are meant to land together, so the intermediate state where dependents still resolve the published copy never reaches
main.Splitting it this way keeps #10185 reviewable: the move, the config rewiring and the type test change are separate from 79 mechanical version bumps.
References
@metamask/utilsintopackages/#10185Checklist
Note
Medium Risk
A major-version bump of a shared utility touches most packages; runtime risk is low if v12 is compatible, but consumers and lingering v11 transitive deps (keyring) can cause type or duplicate-package issues until fully aligned.
Overview
This PR aligns the monorepo with the in-repo
@metamask/utilsv12 after it was moved intopackages/(follow-up to #10185). 79 packages plus the root bump the dependency from^11.12.0to^12.0.0, with matching Unreleased changelog entries and an updated README dependency graph.Tooling is cleaned up so builds use the workspace package instead of the published copy:
tsconfig.packages.jsonnow maps@metamask/utilsto local source (the temporarynode_modulesoverride is removed), andyarn.config.cjsdrops theALLOWED_INCONSISTENT_DEPENDENCIESexception for@metamask/utils.There are small TypeScript follow-ups from the version split:
network-controllerremoves a stale@ts-expect-erroron Infura middleware now that types match v12, whilekeyring-controlleradds a documented@ts-expect-errorwhen casting legacy keyrings until@metamask/keyring-utilsalso depends on v12.Reviewed by Cursor Bugbot for commit 8bd8970. Bugbot is set up for automated code reviews on this repo. Configure here.