diff --git a/packages/assets-controller/CHANGELOG.md b/packages/assets-controller/CHANGELOG.md index c90b71f634..f3012d7243 100644 --- a/packages/assets-controller/CHANGELOG.md +++ b/packages/assets-controller/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- **BREAKING:** **SnapDataSource:** `SnapControllerSnapInstalledEvent` has been added to `SnapDataSourceAllowedEvents`. Hosts that restrict which events flow through the `AssetsController` messenger must now also delegate `SnapController:snapInstalled`; failing to do so will prevent snap chain re-discovery after install. Re-run keyring snap discovery when a new snap is installed so that snap-backed chains (Bitcoin, Solana, Tron, etc.) become available immediately after install ([#8862](https://github.com/MetaMask/core/pull/8862)) - Non-EVM assets with a `slip44` asset namespace (e.g. Bitcoin, Solana native, TRON) are now correctly typed as `native` instead of `erc20` in `assetsInfo` ([#8811](https://github.com/MetaMask/core/pull/8811)) - Solana SPL tokens (CAIP-19 `solana:.../token:
`) are now correctly typed as `spl` instead of `erc20` in `assetsInfo` ([#8811](https://github.com/MetaMask/core/pull/8811)) diff --git a/packages/assets-controller/src/data-sources/SnapDataSource.ts b/packages/assets-controller/src/data-sources/SnapDataSource.ts index 7ee04140d5..c1925e5355 100644 --- a/packages/assets-controller/src/data-sources/SnapDataSource.ts +++ b/packages/assets-controller/src/data-sources/SnapDataSource.ts @@ -10,6 +10,7 @@ import type { import type { SnapControllerGetRunnableSnapsAction, SnapControllerHandleRequestAction, + SnapControllerSnapInstalledEvent, } from '@metamask/snaps-controllers'; import type { Snap, SnapId } from '@metamask/snaps-sdk'; import { HandlerType, SnapCaveatType } from '@metamask/snaps-utils'; @@ -144,7 +145,8 @@ const defaultSnapState: SnapDataSourceState = { */ export type SnapDataSourceAllowedEvents = | AccountsControllerAccountBalancesUpdatedEvent - | PermissionControllerStateChange; + | PermissionControllerStateChange + | SnapControllerSnapInstalledEvent; export type SnapDataSourceAllowedActions = | SnapControllerGetRunnableSnapsAction @@ -254,6 +256,10 @@ export class SnapDataSource extends AbstractDataSource< 'PermissionController:stateChange', this.#handlePermissionStateChangeBound, ); + // Rediscover keyring snaps when any snap gets installed + messenger.subscribe('SnapController:snapInstalled', () => { + this.#discoverKeyringSnaps(); + }); } /**