@@ -18,7 +18,7 @@ import {
1818 handlerEndowments ,
1919 SnapEndowments ,
2020} from '@metamask/snaps-rpc-methods' ;
21- import type { SnapId } from '@metamask/snaps-sdk' ;
21+ import type { Snap , SnapId } from '@metamask/snaps-sdk' ;
2222import { AuxiliaryFileEncoding , text } from '@metamask/snaps-sdk' ;
2323import { Text } from '@metamask/snaps-sdk/jsx' ;
2424import type { SnapPermissions , RpcOrigins } from '@metamask/snaps-utils' ;
@@ -1011,6 +1011,42 @@ describe('SnapController', () => {
10111011 snapController . destroy ( ) ;
10121012 } ) ;
10131013
1014+ it ( 'filters out removed permissions' , async ( ) => {
1015+ const messenger = getSnapControllerMessenger ( ) ;
1016+ const initialPermissions : SnapPermissions = {
1017+ [ handlerEndowments . onRpcRequest as string ] : { snaps : false , dapps : true } ,
1018+ // eslint-disable-next-line @typescript-eslint/naming-convention
1019+ snap_manageAccounts : { } ,
1020+ } ;
1021+
1022+ const { manifest } = await getMockSnapFilesWithUpdatedChecksum ( {
1023+ manifest : getSnapManifest ( {
1024+ initialPermissions,
1025+ } ) ,
1026+ } ) ;
1027+
1028+ const snapController = getSnapController (
1029+ getSnapControllerOptions ( {
1030+ messenger,
1031+ detectSnapLocation : loopbackDetect ( {
1032+ manifest : manifest . result ,
1033+ } ) ,
1034+ } ) ,
1035+ ) ;
1036+
1037+ const snap = await snapController . installSnaps ( MOCK_ORIGIN , {
1038+ [ MOCK_SNAP_ID ] : { } ,
1039+ } ) ;
1040+
1041+ const permissions = ( snap [ MOCK_SNAP_ID ] as Snap ) . initialPermissions ;
1042+
1043+ expect ( permissions ) . toStrictEqual ( {
1044+ [ handlerEndowments . onRpcRequest as string ] : { snaps : false , dapps : true } ,
1045+ } ) ;
1046+
1047+ snapController . destroy ( ) ;
1048+ } ) ;
1049+
10141050 it ( 'throws an error if the installation is disabled during installSnaps' , async ( ) => {
10151051 const controller = getSnapController (
10161052 getSnapControllerOptions ( {
0 commit comments