From e7f0ee9f5781682dfa5ff8615252282afef92701 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 4 May 2026 11:19:43 +0200 Subject: [PATCH 1/3] Bump permission-controller --- packages/snaps-controllers/package.json | 2 +- packages/snaps-rpc-methods/package.json | 2 +- .../src/permitted/cancelBackgroundEvent.ts | 2 +- .../src/permitted/clearState.ts | 2 +- .../src/permitted/closeWebSocket.ts | 2 +- .../src/permitted/createInterface.ts | 2 +- .../src/permitted/endTrace.ts | 2 +- .../src/permitted/getAllSnaps.ts | 2 +- .../src/permitted/getBackgroundEvents.ts | 2 +- .../src/permitted/getClientStatus.ts | 2 +- .../src/permitted/getFile.ts | 2 +- .../src/permitted/getInterfaceContext.ts | 2 +- .../src/permitted/getInterfaceState.ts | 2 +- .../src/permitted/getSnaps.ts | 2 +- .../src/permitted/getState.ts | 2 +- .../src/permitted/getWebSockets.ts | 2 +- .../src/permitted/invokeKeyring.ts | 2 +- .../src/permitted/invokeSnapSugar.ts | 3 +- .../src/permitted/listEntropySources.ts | 2 +- .../src/permitted/openWebSocket.ts | 2 +- .../src/permitted/resolveInterface.ts | 2 +- .../src/permitted/scheduleBackgroundEvent.ts | 2 +- .../src/permitted/sendWebSocketMessage.ts | 2 +- .../src/permitted/setState.ts | 2 +- .../src/permitted/startTrace.ts | 2 +- .../src/permitted/trackError.ts | 2 +- .../src/permitted/trackEvent.ts | 2 +- .../src/permitted/updateInterface.ts | 2 +- packages/snaps-rpc-methods/src/types.ts | 50 +++++++++++++++++++ packages/snaps-simulation/package.json | 2 +- packages/snaps-utils/package.json | 2 +- yarn.lock | 31 +++++++++--- 32 files changed, 106 insertions(+), 36 deletions(-) create mode 100644 packages/snaps-rpc-methods/src/types.ts diff --git a/packages/snaps-controllers/package.json b/packages/snaps-controllers/package.json index 7b66aeba22..e20b290a34 100644 --- a/packages/snaps-controllers/package.json +++ b/packages/snaps-controllers/package.json @@ -88,7 +88,7 @@ "@metamask/key-tree": "^10.1.1", "@metamask/messenger": "^1.2.0", "@metamask/object-multiplex": "^2.1.0", - "@metamask/permission-controller": "^12.3.0", + "@metamask/permission-controller": "^13.0.0", "@metamask/post-message-stream": "^10.0.0", "@metamask/rpc-errors": "^7.0.3", "@metamask/snaps-registry": "^4.0.0", diff --git a/packages/snaps-rpc-methods/package.json b/packages/snaps-rpc-methods/package.json index c14437df15..123f1bf993 100644 --- a/packages/snaps-rpc-methods/package.json +++ b/packages/snaps-rpc-methods/package.json @@ -58,7 +58,7 @@ }, "dependencies": { "@metamask/key-tree": "^10.1.1", - "@metamask/permission-controller": "^12.3.0", + "@metamask/permission-controller": "^13.0.0", "@metamask/rpc-errors": "^7.0.3", "@metamask/snaps-sdk": "workspace:^", "@metamask/snaps-utils": "workspace:^", diff --git a/packages/snaps-rpc-methods/src/permitted/cancelBackgroundEvent.ts b/packages/snaps-rpc-methods/src/permitted/cancelBackgroundEvent.ts index af3104d08e..a6b4c69f58 100644 --- a/packages/snaps-rpc-methods/src/permitted/cancelBackgroundEvent.ts +++ b/packages/snaps-rpc-methods/src/permitted/cancelBackgroundEvent.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -11,6 +10,7 @@ import { StructError, create, object, string } from '@metamask/superstruct'; import { type PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_cancelBackgroundEvent'; diff --git a/packages/snaps-rpc-methods/src/permitted/clearState.ts b/packages/snaps-rpc-methods/src/permitted/clearState.ts index 0cf12d74bb..07790af8d7 100644 --- a/packages/snaps-rpc-methods/src/permitted/clearState.ts +++ b/packages/snaps-rpc-methods/src/permitted/clearState.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { ClearStateParams, ClearStateResult } from '@metamask/snaps-sdk'; import { type InferMatching } from '@metamask/snaps-utils'; @@ -13,6 +12,7 @@ import { import type { PendingJsonRpcResponse, JsonRpcRequest } from '@metamask/utils'; import { manageStateBuilder } from '../restricted/manageState'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_clearState'; diff --git a/packages/snaps-rpc-methods/src/permitted/closeWebSocket.ts b/packages/snaps-rpc-methods/src/permitted/closeWebSocket.ts index 7d175d6909..b412dfba2c 100644 --- a/packages/snaps-rpc-methods/src/permitted/closeWebSocket.ts +++ b/packages/snaps-rpc-methods/src/permitted/closeWebSocket.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -11,6 +10,7 @@ import { create, object, string, StructError } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_closeWebSocket'; diff --git a/packages/snaps-rpc-methods/src/permitted/createInterface.ts b/packages/snaps-rpc-methods/src/permitted/createInterface.ts index 08d8481e1e..83654c05d9 100644 --- a/packages/snaps-rpc-methods/src/permitted/createInterface.ts +++ b/packages/snaps-rpc-methods/src/permitted/createInterface.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { CreateInterfaceParams, @@ -17,6 +16,7 @@ import { type InferMatching } from '@metamask/snaps-utils'; import { StructError, create, object, optional } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { UI_PERMISSIONS } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/endTrace.ts b/packages/snaps-rpc-methods/src/permitted/endTrace.ts index f49aa55576..5f50a8ee4c 100644 --- a/packages/snaps-rpc-methods/src/permitted/endTrace.ts +++ b/packages/snaps-rpc-methods/src/permitted/endTrace.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -18,6 +17,7 @@ import { } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_endTrace'; diff --git a/packages/snaps-rpc-methods/src/permitted/getAllSnaps.ts b/packages/snaps-rpc-methods/src/permitted/getAllSnaps.ts index 81214adecc..c802cf07ce 100644 --- a/packages/snaps-rpc-methods/src/permitted/getAllSnaps.ts +++ b/packages/snaps-rpc-methods/src/permitted/getAllSnaps.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { GetSnapsResult } from '@metamask/snaps-sdk'; import type { @@ -8,6 +7,7 @@ import type { PendingJsonRpcResponse, } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'wallet_getAllSnaps'; diff --git a/packages/snaps-rpc-methods/src/permitted/getBackgroundEvents.ts b/packages/snaps-rpc-methods/src/permitted/getBackgroundEvents.ts index 3836157894..fd5a49cef8 100644 --- a/packages/snaps-rpc-methods/src/permitted/getBackgroundEvents.ts +++ b/packages/snaps-rpc-methods/src/permitted/getBackgroundEvents.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors } from '@metamask/rpc-errors'; import type { BackgroundEvent, @@ -10,6 +9,7 @@ import type { import { type PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_getBackgroundEvents'; diff --git a/packages/snaps-rpc-methods/src/permitted/getClientStatus.ts b/packages/snaps-rpc-methods/src/permitted/getClientStatus.ts index ee18a89944..20654c057a 100644 --- a/packages/snaps-rpc-methods/src/permitted/getClientStatus.ts +++ b/packages/snaps-rpc-methods/src/permitted/getClientStatus.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import type { GetClientStatusResult } from '@metamask/snaps-sdk'; import { getPlatformVersion } from '@metamask/snaps-utils'; import type { @@ -8,6 +7,7 @@ import type { PendingJsonRpcResponse, } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_getClientStatus'; diff --git a/packages/snaps-rpc-methods/src/permitted/getFile.ts b/packages/snaps-rpc-methods/src/permitted/getFile.ts index 3bee7487cc..6aba711082 100644 --- a/packages/snaps-rpc-methods/src/permitted/getFile.ts +++ b/packages/snaps-rpc-methods/src/permitted/getFile.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { GetFileParams, GetFileResult } from '@metamask/snaps-sdk'; import { AuxiliaryFileEncoding, enumValue } from '@metamask/snaps-sdk'; @@ -8,6 +7,7 @@ import { object, optional, string, union } from '@metamask/superstruct'; import type { PendingJsonRpcResponse, JsonRpcRequest } from '@metamask/utils'; import { assertStruct } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; export const GetFileArgsStruct = object({ diff --git a/packages/snaps-rpc-methods/src/permitted/getInterfaceContext.ts b/packages/snaps-rpc-methods/src/permitted/getInterfaceContext.ts index ed08dbf917..fad694cd6c 100644 --- a/packages/snaps-rpc-methods/src/permitted/getInterfaceContext.ts +++ b/packages/snaps-rpc-methods/src/permitted/getInterfaceContext.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { GetInterfaceContextParams, @@ -11,6 +10,7 @@ import { type InferMatching } from '@metamask/snaps-utils'; import { StructError, create, object, string } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { UI_PERMISSIONS } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/getInterfaceState.ts b/packages/snaps-rpc-methods/src/permitted/getInterfaceState.ts index 4863dbda92..d07b484f94 100644 --- a/packages/snaps-rpc-methods/src/permitted/getInterfaceState.ts +++ b/packages/snaps-rpc-methods/src/permitted/getInterfaceState.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { GetInterfaceStateParams, @@ -11,6 +10,7 @@ import { type InferMatching } from '@metamask/snaps-utils'; import { StructError, create, object, string } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { UI_PERMISSIONS } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/getSnaps.ts b/packages/snaps-rpc-methods/src/permitted/getSnaps.ts index a42a750d37..41252c2f2a 100644 --- a/packages/snaps-rpc-methods/src/permitted/getSnaps.ts +++ b/packages/snaps-rpc-methods/src/permitted/getSnaps.ts @@ -1,8 +1,8 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import type { GetSnapsResult } from '@metamask/snaps-sdk'; import type { JsonRpcParams, PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'wallet_getSnaps'; diff --git a/packages/snaps-rpc-methods/src/permitted/getState.ts b/packages/snaps-rpc-methods/src/permitted/getState.ts index c42c8e5b4e..aa9ac80b47 100644 --- a/packages/snaps-rpc-methods/src/permitted/getState.ts +++ b/packages/snaps-rpc-methods/src/permitted/getState.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { GetStateParams, GetStateResult } from '@metamask/snaps-sdk'; import { type InferMatching } from '@metamask/snaps-utils'; @@ -18,6 +17,7 @@ import type { import { hasProperty, isObject } from '@metamask/utils'; import { manageStateBuilder } from '../restricted/manageState'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { FORBIDDEN_KEYS, StateKeyStruct } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/getWebSockets.ts b/packages/snaps-rpc-methods/src/permitted/getWebSockets.ts index c3f46d9c86..5c840bdf9b 100644 --- a/packages/snaps-rpc-methods/src/permitted/getWebSockets.ts +++ b/packages/snaps-rpc-methods/src/permitted/getWebSockets.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors } from '@metamask/rpc-errors'; import type { GetWebSocketsParams, @@ -9,6 +8,7 @@ import type { import type { PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_getWebSockets'; diff --git a/packages/snaps-rpc-methods/src/permitted/invokeKeyring.ts b/packages/snaps-rpc-methods/src/permitted/invokeKeyring.ts index d5144bee7e..4c2dbca4e6 100644 --- a/packages/snaps-rpc-methods/src/permitted/invokeKeyring.ts +++ b/packages/snaps-rpc-methods/src/permitted/invokeKeyring.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { InvokeKeyringParams, @@ -16,6 +15,7 @@ import type { import { hasProperty } from '@metamask/utils'; import { getValidatedParams } from './invokeSnapSugar'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'wallet_invokeKeyring'; diff --git a/packages/snaps-rpc-methods/src/permitted/invokeSnapSugar.ts b/packages/snaps-rpc-methods/src/permitted/invokeSnapSugar.ts index eeab21b1ef..79dd2614bf 100644 --- a/packages/snaps-rpc-methods/src/permitted/invokeSnapSugar.ts +++ b/packages/snaps-rpc-methods/src/permitted/invokeSnapSugar.ts @@ -2,12 +2,13 @@ import type { JsonRpcEngineEndCallback, JsonRpcEngineNextCallback, } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { InvokeSnapParams, InvokeSnapResult } from '@metamask/snaps-sdk'; import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils'; import { isObject } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; + const methodName = 'wallet_invokeSnap'; /** diff --git a/packages/snaps-rpc-methods/src/permitted/listEntropySources.ts b/packages/snaps-rpc-methods/src/permitted/listEntropySources.ts index 1032017447..66c5f80645 100644 --- a/packages/snaps-rpc-methods/src/permitted/listEntropySources.ts +++ b/packages/snaps-rpc-methods/src/permitted/listEntropySources.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors } from '@metamask/rpc-errors'; import type { EntropySource, @@ -13,6 +12,7 @@ import { getBip32EntropyBuilder } from '../restricted/getBip32Entropy'; import { getBip32PublicKeyBuilder } from '../restricted/getBip32PublicKey'; import { getBip44EntropyBuilder } from '../restricted/getBip44Entropy'; import { getEntropyBuilder } from '../restricted/getEntropy'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; /** diff --git a/packages/snaps-rpc-methods/src/permitted/openWebSocket.ts b/packages/snaps-rpc-methods/src/permitted/openWebSocket.ts index 40edf2e89c..81b8b15cff 100644 --- a/packages/snaps-rpc-methods/src/permitted/openWebSocket.ts +++ b/packages/snaps-rpc-methods/src/permitted/openWebSocket.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import { literal, @@ -20,6 +19,7 @@ import { import type { PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_openWebSocket'; diff --git a/packages/snaps-rpc-methods/src/permitted/resolveInterface.ts b/packages/snaps-rpc-methods/src/permitted/resolveInterface.ts index cd69b9c2f3..8d789c3201 100644 --- a/packages/snaps-rpc-methods/src/permitted/resolveInterface.ts +++ b/packages/snaps-rpc-methods/src/permitted/resolveInterface.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -11,6 +10,7 @@ import { StructError, create, object, string } from '@metamask/superstruct'; import type { Json, PendingJsonRpcResponse } from '@metamask/utils'; import { JsonStruct } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { UI_PERMISSIONS } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/scheduleBackgroundEvent.ts b/packages/snaps-rpc-methods/src/permitted/scheduleBackgroundEvent.ts index e849e9f127..970c60b63a 100644 --- a/packages/snaps-rpc-methods/src/permitted/scheduleBackgroundEvent.ts +++ b/packages/snaps-rpc-methods/src/permitted/scheduleBackgroundEvent.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import { selectiveUnion, @@ -17,6 +16,7 @@ import { StructError, create, object } from '@metamask/superstruct'; import { hasProperty, type PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_scheduleBackgroundEvent'; diff --git a/packages/snaps-rpc-methods/src/permitted/sendWebSocketMessage.ts b/packages/snaps-rpc-methods/src/permitted/sendWebSocketMessage.ts index 4480b890e9..77fea18b03 100644 --- a/packages/snaps-rpc-methods/src/permitted/sendWebSocketMessage.ts +++ b/packages/snaps-rpc-methods/src/permitted/sendWebSocketMessage.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -19,6 +18,7 @@ import { import type { PendingJsonRpcResponse } from '@metamask/utils'; import { SnapEndowments } from '../endowments'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_sendWebSocketMessage'; diff --git a/packages/snaps-rpc-methods/src/permitted/setState.ts b/packages/snaps-rpc-methods/src/permitted/setState.ts index c041eaa8cd..5c21ada95f 100644 --- a/packages/snaps-rpc-methods/src/permitted/setState.ts +++ b/packages/snaps-rpc-methods/src/permitted/setState.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { SetStateParams, @@ -31,6 +30,7 @@ import { manageStateBuilder, STORAGE_SIZE_LIMIT, } from '../restricted/manageState'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { FORBIDDEN_KEYS, StateKeyStruct } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/permitted/startTrace.ts b/packages/snaps-rpc-methods/src/permitted/startTrace.ts index 1d12f2e99b..5bc1aa98c7 100644 --- a/packages/snaps-rpc-methods/src/permitted/startTrace.ts +++ b/packages/snaps-rpc-methods/src/permitted/startTrace.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -23,6 +22,7 @@ import { import type { PendingJsonRpcResponse } from '@metamask/utils'; import { JsonStruct } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_startTrace'; diff --git a/packages/snaps-rpc-methods/src/permitted/trackError.ts b/packages/snaps-rpc-methods/src/permitted/trackError.ts index 3e6f111f1c..a96f65d557 100644 --- a/packages/snaps-rpc-methods/src/permitted/trackError.ts +++ b/packages/snaps-rpc-methods/src/permitted/trackError.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -12,6 +11,7 @@ import { TrackableErrorStruct } from '@metamask/snaps-utils'; import { create, object, StructError } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_trackError'; diff --git a/packages/snaps-rpc-methods/src/permitted/trackEvent.ts b/packages/snaps-rpc-methods/src/permitted/trackEvent.ts index e9fce3b001..0ab344f04d 100644 --- a/packages/snaps-rpc-methods/src/permitted/trackEvent.ts +++ b/packages/snaps-rpc-methods/src/permitted/trackEvent.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { JsonRpcRequest, @@ -19,6 +18,7 @@ import { import type { Json, PendingJsonRpcResponse } from '@metamask/utils'; import { JsonStruct } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'snap_trackEvent'; diff --git a/packages/snaps-rpc-methods/src/permitted/updateInterface.ts b/packages/snaps-rpc-methods/src/permitted/updateInterface.ts index 63525edaf1..03710a36c2 100644 --- a/packages/snaps-rpc-methods/src/permitted/updateInterface.ts +++ b/packages/snaps-rpc-methods/src/permitted/updateInterface.ts @@ -1,5 +1,4 @@ import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine'; -import type { PermittedHandlerExport } from '@metamask/permission-controller'; import { providerErrors, rpcErrors } from '@metamask/rpc-errors'; import type { UpdateInterfaceParams, @@ -22,6 +21,7 @@ import { } from '@metamask/superstruct'; import type { PendingJsonRpcResponse } from '@metamask/utils'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; import { UI_PERMISSIONS } from '../utils'; diff --git a/packages/snaps-rpc-methods/src/types.ts b/packages/snaps-rpc-methods/src/types.ts new file mode 100644 index 0000000000..7e99e5b4d3 --- /dev/null +++ b/packages/snaps-rpc-methods/src/types.ts @@ -0,0 +1,50 @@ +import type { + JsonRpcEngineEndCallback, + JsonRpcEngineNextCallback, +} from '@metamask/json-rpc-engine'; +import type { + Json, + JsonRpcParams, + JsonRpcRequest, + PendingJsonRpcResponse, +} from '@metamask/utils'; + +// The types below are temporarily copied to this repo until we can migrate away from `PermittedHandlerExport`. + +/** + * A middleware function for handling a permitted method. + */ +type HandlerMiddlewareFunction< + Hooks, + Params extends JsonRpcParams, + Result extends Json, +> = ( + req: JsonRpcRequest, + res: PendingJsonRpcResponse, + next: JsonRpcEngineNextCallback, + end: JsonRpcEngineEndCallback, + hooks: Hooks, +) => void | Promise; + +/** + * We use a mapped object type in order to create a type that requires the + * presence of the names of all hooks for the given handler. + * This can then be used to select only the necessary hooks whenever a method + * is called for purposes of POLA. + */ +type HookNames = { + [Property in keyof HookMap]: true; +}; + +/** + * A handler for a permitted method. + */ +export type PermittedHandlerExport< + Hooks, + Params extends JsonRpcParams, + Result extends Json, +> = { + implementation: HandlerMiddlewareFunction; + hookNames: HookNames; + methodNames: string[]; +}; diff --git a/packages/snaps-simulation/package.json b/packages/snaps-simulation/package.json index 99d29c5116..d8e797391a 100644 --- a/packages/snaps-simulation/package.json +++ b/packages/snaps-simulation/package.json @@ -60,7 +60,7 @@ "@metamask/json-rpc-middleware-stream": "^8.0.8", "@metamask/key-tree": "^10.1.1", "@metamask/messenger": "^1.2.0", - "@metamask/permission-controller": "^12.3.0", + "@metamask/permission-controller": "^13.0.0", "@metamask/rpc-errors": "^7.0.3", "@metamask/snaps-controllers": "workspace:^", "@metamask/snaps-execution-environments": "workspace:^", diff --git a/packages/snaps-utils/package.json b/packages/snaps-utils/package.json index 904bf2317c..623a9852fc 100644 --- a/packages/snaps-utils/package.json +++ b/packages/snaps-utils/package.json @@ -82,7 +82,7 @@ "@babel/types": "^7.23.0", "@metamask/key-tree": "^10.1.1", "@metamask/messenger": "^1.2.0", - "@metamask/permission-controller": "^12.3.0", + "@metamask/permission-controller": "^13.0.0", "@metamask/rpc-errors": "^7.0.3", "@metamask/slip44": "^4.4.0", "@metamask/snaps-registry": "^4.0.0", diff --git a/yarn.lock b/yarn.lock index 5f065d6da9..87709e2b05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3038,7 +3038,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/controller-utils@npm:^11.19.0": +"@metamask/controller-utils@npm:^11.19.0, @metamask/controller-utils@npm:^11.20.0": version: 11.20.0 resolution: "@metamask/controller-utils@npm:11.20.0" dependencies: @@ -3920,7 +3920,7 @@ __metadata: languageName: node linkType: hard -"@metamask/permission-controller@npm:^12.2.1, @metamask/permission-controller@npm:^12.3.0": +"@metamask/permission-controller@npm:^12.2.1": version: 12.3.0 resolution: "@metamask/permission-controller@npm:12.3.0" dependencies: @@ -3939,6 +3939,25 @@ __metadata: languageName: node linkType: hard +"@metamask/permission-controller@npm:^13.0.0": + version: 13.0.0 + resolution: "@metamask/permission-controller@npm:13.0.0" + dependencies: + "@metamask/approval-controller": "npm:^9.0.1" + "@metamask/base-controller": "npm:^9.1.0" + "@metamask/controller-utils": "npm:^11.20.0" + "@metamask/json-rpc-engine": "npm:^10.3.0" + "@metamask/messenger": "npm:^1.2.0" + "@metamask/rpc-errors": "npm:^7.0.2" + "@metamask/utils": "npm:^11.9.0" + "@types/deep-freeze-strict": "npm:^1.1.0" + deep-freeze-strict: "npm:^1.1.1" + immer: "npm:^9.0.6" + nanoid: "npm:^3.3.8" + checksum: 10/e4062076f7dd7da7acf890f66ee7df1a0309bbb9d9adb221f28eefb203318c2675707754b884a0d4f49892608a8771443a97e743c2c68f7c75f123ec7fafbf49 + languageName: node + linkType: hard + "@metamask/post-message-stream@npm:^10.0.0": version: 10.0.0 resolution: "@metamask/post-message-stream@npm:10.0.0" @@ -4249,7 +4268,7 @@ __metadata: "@metamask/messenger": "npm:^1.2.0" "@metamask/messenger-cli": "npm:^0.2.0" "@metamask/object-multiplex": "npm:^2.1.0" - "@metamask/permission-controller": "npm:^12.3.0" + "@metamask/permission-controller": "npm:^13.0.0" "@metamask/post-message-stream": "npm:^10.0.0" "@metamask/rpc-errors": "npm:^7.0.3" "@metamask/snaps-registry": "npm:^4.0.0" @@ -4506,7 +4525,7 @@ __metadata: "@metamask/json-rpc-engine": "npm:^10.3.0" "@metamask/key-tree": "npm:^10.1.1" "@metamask/messenger": "npm:^1.2.0" - "@metamask/permission-controller": "npm:^12.3.0" + "@metamask/permission-controller": "npm:^13.0.0" "@metamask/rpc-errors": "npm:^7.0.3" "@metamask/snaps-sdk": "workspace:^" "@metamask/snaps-utils": "workspace:^" @@ -4606,7 +4625,7 @@ __metadata: "@metamask/json-rpc-middleware-stream": "npm:^8.0.8" "@metamask/key-tree": "npm:^10.1.1" "@metamask/messenger": "npm:^1.2.0" - "@metamask/permission-controller": "npm:^12.3.0" + "@metamask/permission-controller": "npm:^13.0.0" "@metamask/rpc-errors": "npm:^7.0.3" "@metamask/snaps-controllers": "workspace:^" "@metamask/snaps-execution-environments": "workspace:^" @@ -4650,7 +4669,7 @@ __metadata: "@metamask/auto-changelog": "npm:^6.1.0" "@metamask/key-tree": "npm:^10.1.1" "@metamask/messenger": "npm:^1.2.0" - "@metamask/permission-controller": "npm:^12.3.0" + "@metamask/permission-controller": "npm:^13.0.0" "@metamask/post-message-stream": "npm:^10.0.0" "@metamask/rpc-errors": "npm:^7.0.3" "@metamask/slip44": "npm:^4.4.0" From 71046c0027ca64a5ce748c05c85a077baa413e59 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 4 May 2026 11:24:47 +0200 Subject: [PATCH 2/3] Fix a couple more breaking changes --- packages/snaps-rpc-methods/src/permitted/requestSnaps.ts | 2 +- packages/snaps-simulation/src/simulation.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/snaps-rpc-methods/src/permitted/requestSnaps.ts b/packages/snaps-rpc-methods/src/permitted/requestSnaps.ts index 84a78abcb4..232ee39d6d 100644 --- a/packages/snaps-rpc-methods/src/permitted/requestSnaps.ts +++ b/packages/snaps-rpc-methods/src/permitted/requestSnaps.ts @@ -3,7 +3,6 @@ import type { PermissionConstraint, RequestedPermissions, Caveat, - PermittedHandlerExport, } from '@metamask/permission-controller'; import { rpcErrors } from '@metamask/rpc-errors'; import type { @@ -24,6 +23,7 @@ import { hasProperty, isObject } from '@metamask/utils'; import { Mutex } from 'async-mutex'; import { WALLET_SNAP_PERMISSION_KEY } from '../restricted/invokeSnap'; +import type { PermittedHandlerExport } from '../types'; import type { MethodHooksObject } from '../utils'; const methodName = 'wallet_requestSnaps'; diff --git a/packages/snaps-simulation/src/simulation.ts b/packages/snaps-simulation/src/simulation.ts index 23d955d171..eb32289ebf 100644 --- a/packages/snaps-simulation/src/simulation.ts +++ b/packages/snaps-simulation/src/simulation.ts @@ -11,6 +11,7 @@ import { PermissionDoesNotExistError, type Caveat, type RequestedPermissions, + createPermissionMiddleware, } from '@metamask/permission-controller'; import type { ExecutionService } from '@metamask/snaps-controllers'; import { @@ -454,8 +455,9 @@ export async function installSnap< options, }); - const permissionMiddleware = permissionController.createPermissionMiddleware({ + const permissionMiddleware = createPermissionMiddleware({ origin: snapId, + messenger: controllerMessenger, }); const engine = createJsonRpcEngine({ From 1775e8b8fa859cbbbe8159ee8e2a07c6bacc063e Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 4 May 2026 11:31:12 +0200 Subject: [PATCH 3/3] Add return type --- packages/snaps-simulation/src/methods/specifications.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/snaps-simulation/src/methods/specifications.ts b/packages/snaps-simulation/src/methods/specifications.ts index 406fbefe56..706962932e 100644 --- a/packages/snaps-simulation/src/methods/specifications.ts +++ b/packages/snaps-simulation/src/methods/specifications.ts @@ -1,5 +1,9 @@ import { caip25EndowmentBuilder } from '@metamask/chain-agnostic-permission'; -import type { GenericPermissionController } from '@metamask/permission-controller'; +import type { + GenericPermissionController, + PermissionSpecificationConstraint, + PermissionSpecificationMap, +} from '@metamask/permission-controller'; import { endowmentPermissionBuilders, buildSnapEndowmentSpecifications, @@ -81,7 +85,7 @@ export function getPermissionSpecifications({ hooks, runSaga, options, -}: GetPermissionSpecificationsOptions) { +}: GetPermissionSpecificationsOptions): PermissionSpecificationMap { return { [caip25EndowmentBuilder.targetName]: caip25EndowmentBuilder.specificationBuilder({}),