From 82b9958304eabcc203e73ff07baa2ed97838649e Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Wed, 25 Mar 2026 13:22:32 +0100 Subject: [PATCH 1/3] Export messenger type from all controllers/services --- packages/snaps-controllers/src/cronjob/index.ts | 1 + packages/snaps-controllers/src/interface/index.ts | 2 +- packages/snaps-controllers/src/multichain/index.ts | 1 + packages/snaps-controllers/src/snaps/index.ts | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/snaps-controllers/src/cronjob/index.ts b/packages/snaps-controllers/src/cronjob/index.ts index ad8d078a66..019d1e0d44 100644 --- a/packages/snaps-controllers/src/cronjob/index.ts +++ b/packages/snaps-controllers/src/cronjob/index.ts @@ -1,5 +1,6 @@ export type { CronjobControllerGetStateAction, + CronjobControllerMessenger, CronjobControllerState, CronjobControllerStateChangeEvent, CronjobControllerStateManager, diff --git a/packages/snaps-controllers/src/interface/index.ts b/packages/snaps-controllers/src/interface/index.ts index 3abc18faf2..5ecfe2c91a 100644 --- a/packages/snaps-controllers/src/interface/index.ts +++ b/packages/snaps-controllers/src/interface/index.ts @@ -1,7 +1,7 @@ export type { SnapInterfaceControllerActions, - SnapInterfaceControllerAllowedActions, SnapInterfaceControllerGetStateAction, + SnapInterfaceControllerMessenger, SnapInterfaceControllerState, SnapInterfaceControllerStateChangeEvent, StoredInterface, diff --git a/packages/snaps-controllers/src/multichain/index.ts b/packages/snaps-controllers/src/multichain/index.ts index 7a1ce9328d..faf03496e8 100644 --- a/packages/snaps-controllers/src/multichain/index.ts +++ b/packages/snaps-controllers/src/multichain/index.ts @@ -1,3 +1,4 @@ +export type { MultichainRoutingServiceMessenger } from './MultichainRoutingService'; export { MultichainRoutingService } from './MultichainRoutingService'; export type { MultichainRoutingServiceGetSupportedAccountsAction, diff --git a/packages/snaps-controllers/src/snaps/index.ts b/packages/snaps-controllers/src/snaps/index.ts index d744095d96..25a9e83bd6 100644 --- a/packages/snaps-controllers/src/snaps/index.ts +++ b/packages/snaps-controllers/src/snaps/index.ts @@ -2,6 +2,7 @@ export * from './constants'; export * from './location'; export type { SnapControllerGetStateAction, + SnapControllerMessenger, SnapControllerSnapBlockedEvent, SnapControllerSnapDisabledEvent, SnapControllerSnapEnabledEvent, From e36d3b215b1016e128dffec6b3836b0effe4737a Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Wed, 25 Mar 2026 13:33:24 +0100 Subject: [PATCH 2/3] Fix simulation types --- packages/snaps-simulation/src/controllers.ts | 55 +++++++++++--------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/snaps-simulation/src/controllers.ts b/packages/snaps-simulation/src/controllers.ts index 4710aa642c..1b9fd8eb4f 100644 --- a/packages/snaps-simulation/src/controllers.ts +++ b/packages/snaps-simulation/src/controllers.ts @@ -2,25 +2,29 @@ import { caip25CaveatBuilder, Caip25CaveatType, } from '@metamask/chain-agnostic-permission'; +import type { + MessengerActions, + MessengerEvents, + MockAnyNamespace, +} from '@metamask/messenger'; import { Messenger } from '@metamask/messenger'; import type { CaveatSpecificationConstraint, + PermissionControllerMessenger, PermissionSpecificationConstraint, - PermissionControllerActions, - SubjectMetadataControllerActions, } from '@metamask/permission-controller'; import { PermissionController, SubjectMetadataController, SubjectType, } from '@metamask/permission-controller'; -import { SnapInterfaceController } from '@metamask/snaps-controllers'; import type { - ExecutionServiceActions, - SnapInterfaceControllerStateChangeEvent, - SnapInterfaceControllerActions, - SnapInterfaceControllerAllowedActions, + ExecutionServiceMessenger, + SnapControllerMessenger, + SnapInterfaceControllerMessenger, + SnapRegistryControllerMessenger, } from '@metamask/snaps-controllers'; +import { SnapInterfaceController } from '@metamask/snaps-controllers'; import { caveatSpecifications as snapsCaveatsSpecifications, endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications, @@ -37,20 +41,22 @@ import type { SimulationOptions } from './options'; import type { RestrictedMiddlewareHooks } from './simulation'; import type { RunSagaFunction } from './store'; -export type RootControllerAllowedActions = - | SnapInterfaceControllerActions - | SnapInterfaceControllerAllowedActions - | PermissionControllerActions - | ExecutionServiceActions - | SubjectMetadataControllerActions; - -export type RootControllerAllowedEvents = - SnapInterfaceControllerStateChangeEvent; - export type RootControllerMessenger = Messenger< - any, - RootControllerAllowedActions, - RootControllerAllowedEvents + MockAnyNamespace, + MessengerActions< + | ExecutionServiceMessenger + | PermissionControllerMessenger + | SnapControllerMessenger + | SnapInterfaceControllerMessenger + | SnapRegistryControllerMessenger + >, + MessengerEvents< + | ExecutionServiceMessenger + | PermissionControllerMessenger + | SnapControllerMessenger + | SnapInterfaceControllerMessenger + | SnapRegistryControllerMessenger + > >; export type GetControllersOptions = { @@ -85,10 +91,11 @@ export function getControllers(options: GetControllersOptions): Controllers { subjectCacheLimit: 100, }); - const interfaceControllerMessenger = new Messenger({ - namespace: 'SnapInterfaceController', - parent: controllerMessenger, - }); + const interfaceControllerMessenger: SnapInterfaceControllerMessenger = + new Messenger({ + namespace: 'SnapInterfaceController', + parent: controllerMessenger, + }); controllerMessenger.delegate({ messenger: interfaceControllerMessenger, From e1c676d5cd53702ae26932df271772949cf39809 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Wed, 25 Mar 2026 14:12:08 +0100 Subject: [PATCH 3/3] Fix more types --- packages/snaps-controllers/src/cronjob/index.ts | 3 +++ .../src/insights/SnapInsightsController.ts | 8 ++++---- packages/snaps-controllers/src/insights/index.ts | 3 +++ .../src/interface/SnapInterfaceController.ts | 11 ++++++----- .../snaps-controllers/src/interface/index.ts | 2 ++ .../src/multichain/MultichainRoutingService.ts | 4 ++-- .../snaps-controllers/src/multichain/index.ts | 6 +++++- packages/snaps-controllers/src/services/index.ts | 1 + .../src/snaps/SnapController.ts | 6 +++--- packages/snaps-controllers/src/snaps/index.ts | 3 +++ .../src/test-utils/controller.ts | 16 ++++------------ 11 files changed, 36 insertions(+), 27 deletions(-) diff --git a/packages/snaps-controllers/src/cronjob/index.ts b/packages/snaps-controllers/src/cronjob/index.ts index 019d1e0d44..c87ea0c970 100644 --- a/packages/snaps-controllers/src/cronjob/index.ts +++ b/packages/snaps-controllers/src/cronjob/index.ts @@ -1,4 +1,7 @@ export type { + CronjobControllerActions, + CronjobControllerArgs, + CronjobControllerEvents, CronjobControllerGetStateAction, CronjobControllerMessenger, CronjobControllerState, diff --git a/packages/snaps-controllers/src/insights/SnapInsightsController.ts b/packages/snaps-controllers/src/insights/SnapInsightsController.ts index 9517252bda..1c19431e6d 100644 --- a/packages/snaps-controllers/src/insights/SnapInsightsController.ts +++ b/packages/snaps-controllers/src/insights/SnapInsightsController.ts @@ -34,7 +34,7 @@ import type { const controllerName = 'SnapInsightsController'; -export type SnapInsightsControllerAllowedActions = +type AllowedActions = | GetPermissions | SnapControllerGetRunnableSnapsAction | SnapControllerHandleRequestAction @@ -55,15 +55,15 @@ export type SnapInsightControllerStateChangeEvent = ControllerStateChangeEvent< export type SnapInsightControllerEvents = SnapInsightControllerStateChangeEvent; -export type SnapInsightsControllerAllowedEvents = +type AllowedEvents = | TransactionControllerUnapprovedTransactionAddedEvent | TransactionControllerTransactionStatusUpdatedEvent | SignatureControllerStateChangeEvent; export type SnapInsightsControllerMessenger = Messenger< typeof controllerName, - SnapInsightsControllerActions | SnapInsightsControllerAllowedActions, - SnapInsightControllerEvents | SnapInsightsControllerAllowedEvents + SnapInsightsControllerActions | AllowedActions, + SnapInsightControllerEvents | AllowedEvents >; export type SnapInsight = { diff --git a/packages/snaps-controllers/src/insights/index.ts b/packages/snaps-controllers/src/insights/index.ts index d0d0fa10c5..50f42ec0aa 100644 --- a/packages/snaps-controllers/src/insights/index.ts +++ b/packages/snaps-controllers/src/insights/index.ts @@ -1,5 +1,8 @@ export type { SnapInsight, + SnapInsightsControllerActions, + SnapInsightsControllerArgs, + SnapInsightControllerEvents, SnapInsightsControllerMessenger, SnapInsightsControllerState, } from './SnapInsightsController'; diff --git a/packages/snaps-controllers/src/interface/SnapInterfaceController.ts b/packages/snaps-controllers/src/interface/SnapInterfaceController.ts index d992660767..5b47cfe547 100644 --- a/packages/snaps-controllers/src/interface/SnapInterfaceController.ts +++ b/packages/snaps-controllers/src/interface/SnapInterfaceController.ts @@ -93,7 +93,7 @@ type PhishingControllerTestOrigin = { handler: (origin: string) => { result: boolean; type: string }; }; -export type SnapInterfaceControllerAllowedActions = +type AllowedActions = | PhishingControllerTestOrigin | ApprovalControllerHasRequestAction | ApprovalControllerAcceptRequestAction @@ -143,14 +143,15 @@ type NotificationListUpdatedEvent = { payload: [Notification[]]; }; +type AllowedEvents = NotificationListUpdatedEvent; + export type SnapInterfaceControllerEvents = - | SnapInterfaceControllerStateChangeEvent - | NotificationListUpdatedEvent; + SnapInterfaceControllerStateChangeEvent; export type SnapInterfaceControllerMessenger = Messenger< typeof controllerName, - SnapInterfaceControllerActions | SnapInterfaceControllerAllowedActions, - SnapInterfaceControllerEvents + SnapInterfaceControllerActions | AllowedActions, + SnapInterfaceControllerEvents | AllowedEvents >; export type StoredInterface = { diff --git a/packages/snaps-controllers/src/interface/index.ts b/packages/snaps-controllers/src/interface/index.ts index 5ecfe2c91a..6a41e11678 100644 --- a/packages/snaps-controllers/src/interface/index.ts +++ b/packages/snaps-controllers/src/interface/index.ts @@ -1,5 +1,7 @@ export type { SnapInterfaceControllerActions, + SnapInterfaceControllerArgs, + SnapInterfaceControllerEvents, SnapInterfaceControllerGetStateAction, SnapInterfaceControllerMessenger, SnapInterfaceControllerState, diff --git a/packages/snaps-controllers/src/multichain/MultichainRoutingService.ts b/packages/snaps-controllers/src/multichain/MultichainRoutingService.ts index 1f5fc7a983..2e8cd7e77d 100644 --- a/packages/snaps-controllers/src/multichain/MultichainRoutingService.ts +++ b/packages/snaps-controllers/src/multichain/MultichainRoutingService.ts @@ -51,7 +51,7 @@ export type AccountsControllerListMultichainAccountsAction = { export type MultichainRoutingServiceActions = MultichainRoutingServiceMethodActions; -export type MultichainRoutingServiceAllowedActions = +type AllowedActions = | SnapControllerGetRunnableSnapsAction | SnapControllerHandleRequestAction | GetPermissions @@ -61,7 +61,7 @@ export type MultichainRoutingServiceEvents = never; export type MultichainRoutingServiceMessenger = Messenger< typeof name, - MultichainRoutingServiceActions | MultichainRoutingServiceAllowedActions + MultichainRoutingServiceActions | AllowedActions >; export type MultichainRoutingServiceArgs = { diff --git a/packages/snaps-controllers/src/multichain/index.ts b/packages/snaps-controllers/src/multichain/index.ts index faf03496e8..42ebffe200 100644 --- a/packages/snaps-controllers/src/multichain/index.ts +++ b/packages/snaps-controllers/src/multichain/index.ts @@ -1,4 +1,8 @@ -export type { MultichainRoutingServiceMessenger } from './MultichainRoutingService'; +export type { + MultichainRoutingServiceActions, + MultichainRoutingServiceEvents, + MultichainRoutingServiceMessenger, +} from './MultichainRoutingService'; export { MultichainRoutingService } from './MultichainRoutingService'; export type { MultichainRoutingServiceGetSupportedAccountsAction, diff --git a/packages/snaps-controllers/src/services/index.ts b/packages/snaps-controllers/src/services/index.ts index 5447d7e102..34e9a13543 100644 --- a/packages/snaps-controllers/src/services/index.ts +++ b/packages/snaps-controllers/src/services/index.ts @@ -1,5 +1,6 @@ export type { ExecutionServiceActions, + ExecutionServiceArgs, ExecutionServiceEvents, ExecutionServiceMessenger, ExecutionServiceOutboundRequestEvent, diff --git a/packages/snaps-controllers/src/snaps/SnapController.ts b/packages/snaps-controllers/src/snaps/SnapController.ts index 7baf94c8e4..cbfbc9d3bb 100644 --- a/packages/snaps-controllers/src/snaps/SnapController.ts +++ b/packages/snaps-controllers/src/snaps/SnapController.ts @@ -512,7 +512,7 @@ export type SnapControllerEvents = | SnapControllerSnapDisabledEvent | SnapControllerStateChangeEvent; -export type AllowedActions = +type AllowedActions = | GetEndowments | GetPermissions | GetSubjects @@ -542,7 +542,7 @@ export type AllowedActions = | StorageServiceRemoveItemAction | StorageServiceClearAction; -export type AllowedEvents = +type AllowedEvents = | ExecutionServiceEvents | SnapControllerSnapInstalledEvent | SnapControllerSnapUpdatedEvent @@ -580,7 +580,7 @@ type DynamicFeatureFlags = { disableSnaps?: boolean; }; -type SnapControllerArgs = { +export type SnapControllerArgs = { /** * A list of permissions that are allowed to be dynamic, meaning they can be revoked from the snap whenever. */ diff --git a/packages/snaps-controllers/src/snaps/index.ts b/packages/snaps-controllers/src/snaps/index.ts index 25a9e83bd6..d8fe12b1dd 100644 --- a/packages/snaps-controllers/src/snaps/index.ts +++ b/packages/snaps-controllers/src/snaps/index.ts @@ -1,6 +1,9 @@ export * from './constants'; export * from './location'; export type { + SnapControllerActions, + SnapControllerArgs, + SnapControllerEvents, SnapControllerGetStateAction, SnapControllerMessenger, SnapControllerSnapBlockedEvent, diff --git a/packages/snaps-simulation/src/test-utils/controller.ts b/packages/snaps-simulation/src/test-utils/controller.ts index b926709522..73b3a52fc2 100644 --- a/packages/snaps-simulation/src/test-utils/controller.ts +++ b/packages/snaps-simulation/src/test-utils/controller.ts @@ -1,14 +1,11 @@ import { Messenger } from '@metamask/messenger'; -import type { SnapInterfaceControllerAllowedActions } from '@metamask/snaps-controllers'; +import type { SnapInterfaceControllerMessenger } from '@metamask/snaps-controllers'; import { MockControllerMessenger } from '@metamask/snaps-utils/test-utils'; -import type { RootControllerAllowedActions } from '../controllers'; +import type { RootControllerMessenger } from '../controllers'; export const getRootControllerMessenger = (mocked = true) => { - const messenger = new MockControllerMessenger< - RootControllerAllowedActions, - any - >(); + const messenger: RootControllerMessenger = new MockControllerMessenger(); if (mocked) { messenger.registerActionHandler('PhishingController:testOrigin', () => ({ @@ -42,12 +39,7 @@ export const getRestrictedSnapInterfaceControllerMessenger = ( typeof getRootControllerMessenger > = getRootControllerMessenger(), ) => { - const controllerMessenger = new Messenger< - 'SnapInterfaceController', - SnapInterfaceControllerAllowedActions, - never, - any - >({ + const controllerMessenger: SnapInterfaceControllerMessenger = new Messenger({ namespace: 'SnapInterfaceController', parent: messenger, });