Skip to content

Commit 0550c87

Browse files
committed
Merge branch 'main' into swaps3560-submitTx-handlers
2 parents 675dcfd + ff8a3e0 commit 0550c87

59 files changed

Lines changed: 2611 additions & 878 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
## Ramp Team
4646
/packages/ramps-controller @MetaMask/ramp
4747

48+
## Networks Team
49+
/packages/config-registry-controller @MetaMask/networks
50+
4851
## Notifications Team
4952
/packages/notification-services-controller @MetaMask/notifications
5053

@@ -77,7 +80,6 @@
7780
/packages/build-utils @MetaMask/core-platform
7881
/packages/composable-controller @MetaMask/core-platform
7982
/packages/connectivity-controller @MetaMask/core-platform
80-
/packages/config-registry-controller @MetaMask/core-platform
8183
/packages/geolocation-controller @MetaMask/core-platform
8284
/packages/controller-utils @MetaMask/core-platform
8385
/packages/error-reporting-service @MetaMask/core-platform
@@ -135,6 +137,8 @@
135137
/packages/assets-controller/CHANGELOG.md @MetaMask/metamask-assets @MetaMask/core-platform
136138
/packages/chain-agnostic-permission/package.json @MetaMask/wallet-integrations @MetaMask/core-platform
137139
/packages/chain-agnostic-permission/CHANGELOG.md @MetaMask/wallet-integrations @MetaMask/core-platform
140+
/packages/config-registry-controller/CHANGELOG.md @MetaMask/networks @MetaMask/core-platform
141+
/packages/config-registry-controller/package.json @MetaMask/networks @MetaMask/core-platform
138142
/packages/delegation-controller/package.json @MetaMask/delegation @MetaMask/core-platform
139143
/packages/delegation-controller/CHANGELOG.md @MetaMask/delegation @MetaMask/core-platform
140144
/packages/earn-controller/package.json @MetaMask/metamask-earn @MetaMask/core-platform
@@ -214,4 +218,4 @@
214218
/packages/ai-controllers/package.json @MetaMask/social-ai @MetaMask/core-platform
215219
/packages/ai-controllers/CHANGELOG.md @MetaMask/social-ai @MetaMask/core-platform
216220
/packages/client-controller/package.json @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform
217-
/packages/client-controller/CHANGELOG.md @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform
221+
/packages/client-controller/CHANGELOG.md @MetaMask/core-platform @MetaMask/extension-platform @MetaMask/mobile-platform

eslint-suppressions.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,11 +585,16 @@
585585
"count": 2
586586
}
587587
},
588-
"packages/bridge-status-controller/src/utils/snaps.ts": {
589-
"@typescript-eslint/explicit-function-return-type": {
588+
"packages/bridge-status-controller/src/bridge-status-controller.test.ts": {
589+
"no-new": {
590590
"count": 1
591591
}
592592
},
593+
"packages/bridge-status-controller/src/utils/gas.ts": {
594+
"@typescript-eslint/explicit-function-return-type": {
595+
"count": 4
596+
}
597+
},
593598
"packages/bridge-status-controller/src/utils/swap-received-amount.ts": {
594599
"@typescript-eslint/explicit-function-return-type": {
595600
"count": 3

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/core-monorepo",
3-
"version": "869.0.0",
3+
"version": "870.0.0",
44
"private": true,
55
"description": "Monorepo for packages shared between MetaMask clients",
66
"repository": {

packages/accounts-controller/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Add `:accounts{Added,Removed}` batch events ([#8151](https://github.com/MetaMask/core/pull/8151))
1313
- Those new events can be used instead of single `:accountAdded` and `:accountRemoved` events to reduce the number of events emitted during batch operations (e.g. `KeyringController` state re-synchronization).
1414

15+
### Fixed
16+
17+
- Prevent `getSelectedAccount` and `getSelectedMultichainAccount` from throwing when `selectedAccount` is `undefined` ([#8231](https://github.com/MetaMask/core/pull/8231))
18+
1519
## [37.0.0]
1620

1721
### Added

packages/accounts-controller/src/AccountsController.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ export class AccountsController extends BaseController<
442442

443443
// Edge case where the extension is setup but the srp is not yet created
444444
// certain ui elements will query the selected address before any accounts are created.
445-
if (selectedAccount === '') {
445+
if (!selectedAccount) {
446446
return EMPTY_ACCOUNT;
447447
}
448448

@@ -481,7 +481,7 @@ export class AccountsController extends BaseController<
481481

482482
// Edge case where the extension is setup but the srp is not yet created
483483
// certain ui elements will query the selected address before any accounts are created.
484-
if (selectedAccount === '') {
484+
if (!selectedAccount) {
485485
return EMPTY_ACCOUNT;
486486
}
487487

packages/assets-controller/CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [3.0.0]
11+
12+
### Added
13+
14+
- Per-data-source latency inside parallel middlewares: `durationByDataSource` now includes entries such as `ParallelMiddleware.TokenDataSource`, `ParallelMiddleware.PriceDataSource`, and `ParallelBalanceMiddleware.<SourceName>` (ms), so traces can see which internal sources contributed to `ParallelMiddleware` and `ParallelBalanceMiddleware` timings. ([#8147](https://github.com/MetaMask/core/pull/8147))
15+
16+
### Changed
17+
18+
- **BREAKING:** First-init-fetch measurement moved from MetaMetrics to Sentry. Option `trackMetaMetricsEvent` is replaced by `trace: TraceCallback`. Type `AssetsControllerFirstInitFetchMetaMetricsPayload` is removed; trace request data is not typed in this package. ([#8147](https://github.com/MetaMask/core/pull/8147))
19+
- `TokenDataSource` now always includes native token asset IDs (from `NetworkEnablementController.nativeAssetIdentifiers`) in metadata fetch calls, ensuring native tokens always have up-to-date metadata ([#8227](https://github.com/MetaMask/core/pull/8227))
20+
- `TokenDataSource` now filters out non-native tokens with fewer than 3 occurrences from metadata responses, and also removes their balances and detected asset entries, to prevent spam tokens from being stored in state ([#8227](https://github.com/MetaMask/core/pull/8227))
21+
- `TokenDataSource` now requests `includeOccurrences` when fetching v3 asset metadata ([#8227](https://github.com/MetaMask/core/pull/8227))
22+
- Bump `@metamask/assets-controllers` from `^101.0.0` to `^101.0.1` ([#8232](https://github.com/MetaMask/core/pull/8232))
23+
- Bump `@metamask/core-backend` from `^6.1.1` to `^6.2.0` ([#8232](https://github.com/MetaMask/core/pull/8232))
24+
1025
## [2.4.0]
1126

1227
### Changed
@@ -175,7 +190,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
175190
- Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
176191
- Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
177192

178-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.4.0...HEAD
193+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@3.0.0...HEAD
194+
[3.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.4.0...@metamask/assets-controller@3.0.0
179195
[2.4.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.3.0...@metamask/assets-controller@2.4.0
180196
[2.3.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.2.0...@metamask/assets-controller@2.3.0
181197
[2.2.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.1.0...@metamask/assets-controller@2.2.0

packages/assets-controller/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/assets-controller",
3-
"version": "2.4.0",
3+
"version": "3.0.0",
44
"description": "Tracks assets balances/prices and handles token detection across all digital assets",
55
"keywords": [
66
"MetaMask",
@@ -52,11 +52,11 @@
5252
"@ethersproject/abi": "^5.7.0",
5353
"@ethersproject/providers": "^5.7.0",
5454
"@metamask/account-tree-controller": "^5.0.1",
55-
"@metamask/assets-controllers": "^101.0.0",
55+
"@metamask/assets-controllers": "^101.0.1",
5656
"@metamask/base-controller": "^9.0.0",
5757
"@metamask/client-controller": "^1.0.0",
5858
"@metamask/controller-utils": "^11.19.0",
59-
"@metamask/core-backend": "^6.1.1",
59+
"@metamask/core-backend": "^6.2.0",
6060
"@metamask/keyring-api": "^21.5.0",
6161
"@metamask/keyring-controller": "^25.1.0",
6262
"@metamask/keyring-internal-api": "^10.0.0",

packages/assets-controller/src/AssetsController.test.ts

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/* eslint-disable jest/unbound-method */
2+
import type { TraceCallback, TraceRequest } from '@metamask/controller-utils';
23
import type { ApiPlatformClient } from '@metamask/core-backend';
34
import type { InternalAccount } from '@metamask/keyring-internal-api';
45
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
@@ -13,7 +14,6 @@ import {
1314
getDefaultAssetsControllerState,
1415
} from './AssetsController';
1516
import type {
16-
AssetsControllerFirstInitFetchMetaMetricsPayload,
1717
AssetsControllerMessenger,
1818
AssetsControllerState,
1919
} from './AssetsController';
@@ -79,14 +79,12 @@ type WithControllerOptions = {
7979
isBasicFunctionality?: () => boolean;
8080
/**
8181
* When set, registers ClientController:getState so the controller sees this UI state.
82-
* Required for tests that rely on asset tracking running (e.g. trackMetaMetricsEvent on unlock).
82+
* Required for tests that rely on asset tracking running (e.g. trace on unlock).
8383
*/
8484
clientControllerState?: { isUiOpen: boolean };
85-
/** Extra options passed to AssetsController constructor (e.g. trackMetaMetricsEvent). */
85+
/** Extra options passed to AssetsController constructor (e.g. trace). */
8686
controllerOptions?: Partial<{
87-
trackMetaMetricsEvent: (
88-
payload: AssetsControllerFirstInitFetchMetaMetricsPayload,
89-
) => void;
87+
trace: TraceCallback;
9088
priceDataSourceConfig: PriceDataSourceConfig;
9189
isEnabled: () => boolean;
9290
}>;
@@ -1198,13 +1196,19 @@ describe('AssetsController', () => {
11981196
});
11991197
});
12001198

1201-
it('invokes trackMetaMetricsEvent with first init fetch duration on unlock', async () => {
1202-
const trackMetaMetricsEvent = jest.fn();
1199+
it('invokes trace with first init fetch trace request on unlock', async () => {
1200+
const traceMock = jest
1201+
.fn()
1202+
.mockImplementation(
1203+
async (_request: TraceRequest, fn?: (context?: unknown) => unknown) =>
1204+
fn?.(),
1205+
);
1206+
const trace = traceMock as unknown as TraceCallback;
12031207

12041208
await withController(
12051209
{
12061210
clientControllerState: { isUiOpen: true },
1207-
controllerOptions: { trackMetaMetricsEvent },
1211+
controllerOptions: { trace },
12081212
},
12091213
async ({ messenger }) => {
12101214
// UI must be open and keyring unlocked for asset tracking to run
@@ -1218,30 +1222,41 @@ describe('AssetsController', () => {
12181222
// Allow #start() -> getAssets() to resolve so the callback runs
12191223
await new Promise((resolve) => setTimeout(resolve, 100));
12201224

1221-
expect(trackMetaMetricsEvent).toHaveBeenCalledTimes(1);
1222-
expect(trackMetaMetricsEvent).toHaveBeenCalledWith(
1223-
expect.objectContaining({
1224-
durationMs: expect.any(Number),
1225-
chainIds: expect.any(Array),
1226-
durationByDataSource: expect.any(Object),
1225+
expect(traceMock).toHaveBeenCalledTimes(1);
1226+
const [request] = traceMock.mock.calls[0];
1227+
expect(request).toMatchObject({
1228+
name: 'AssetsController First Init Fetch',
1229+
data: expect.objectContaining({
1230+
duration_ms: expect.any(Number),
1231+
chain_ids: expect.any(String),
12271232
}),
1228-
);
1229-
const payload = trackMetaMetricsEvent.mock
1230-
.calls[0][0] as AssetsControllerFirstInitFetchMetaMetricsPayload;
1231-
expect(payload.durationMs).toBeGreaterThanOrEqual(0);
1232-
expect(Array.isArray(payload.chainIds)).toBe(true);
1233-
expect(typeof payload.durationByDataSource).toBe('object');
1233+
tags: { controller: 'AssetsController' },
1234+
});
1235+
const {
1236+
duration_ms: durationMs,
1237+
chain_ids: chainIds,
1238+
...durationByDataSource
1239+
} = request.data ?? {};
1240+
expect(durationMs).toBeGreaterThanOrEqual(0);
1241+
expect(typeof chainIds).toBe('string');
1242+
expect(typeof durationByDataSource).toBe('object');
12341243
},
12351244
);
12361245
});
12371246

1238-
it('invokes trackMetaMetricsEvent only once per session until lock', async () => {
1239-
const trackMetaMetricsEvent = jest.fn();
1247+
it('invokes trace only once per session until lock', async () => {
1248+
const traceMock = jest
1249+
.fn()
1250+
.mockImplementation(
1251+
async (_request: TraceRequest, fn?: (context?: unknown) => unknown) =>
1252+
fn?.(),
1253+
);
1254+
const trace = traceMock as unknown as TraceCallback;
12401255

12411256
await withController(
12421257
{
12431258
clientControllerState: { isUiOpen: true },
1244-
controllerOptions: { trackMetaMetricsEvent },
1259+
controllerOptions: { trace },
12451260
},
12461261
async ({ messenger }) => {
12471262
// UI must be open and keyring unlocked for asset tracking to run
@@ -1256,7 +1271,7 @@ describe('AssetsController', () => {
12561271
messenger.publish('KeyringController:unlock');
12571272
await new Promise((resolve) => setTimeout(resolve, 100));
12581273

1259-
expect(trackMetaMetricsEvent).toHaveBeenCalledTimes(1);
1274+
expect(traceMock).toHaveBeenCalledTimes(1);
12601275
},
12611276
);
12621277
});

0 commit comments

Comments
 (0)