@@ -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' ;
@@ -1010,6 +1010,42 @@ describe('SnapController', () => {
10101010 snapController . destroy ( ) ;
10111011 } ) ;
10121012
1013+ it ( 'filters out removed permissions' , async ( ) => {
1014+ const messenger = getSnapControllerMessenger ( ) ;
1015+ const initialPermissions : SnapPermissions = {
1016+ [ handlerEndowments . onRpcRequest as string ] : { snaps : false , dapps : true } ,
1017+ // eslint-disable-next-line @typescript-eslint/naming-convention
1018+ snap_manageAccounts : { } ,
1019+ } ;
1020+
1021+ const { manifest } = await getMockSnapFilesWithUpdatedChecksum ( {
1022+ manifest : getSnapManifest ( {
1023+ initialPermissions,
1024+ } ) ,
1025+ } ) ;
1026+
1027+ const snapController = getSnapController (
1028+ getSnapControllerOptions ( {
1029+ messenger,
1030+ detectSnapLocation : loopbackDetect ( {
1031+ manifest : manifest . result ,
1032+ } ) ,
1033+ } ) ,
1034+ ) ;
1035+
1036+ const snap = await snapController . installSnaps ( MOCK_ORIGIN , {
1037+ [ MOCK_SNAP_ID ] : { } ,
1038+ } ) ;
1039+
1040+ const permissions = ( snap [ MOCK_SNAP_ID ] as Snap ) . initialPermissions ;
1041+
1042+ expect ( permissions ) . toStrictEqual ( {
1043+ [ handlerEndowments . onRpcRequest as string ] : { snaps : false , dapps : true } ,
1044+ } ) ;
1045+
1046+ snapController . destroy ( ) ;
1047+ } ) ;
1048+
10131049 it ( 'throws an error if the installation is disabled during installSnaps' , async ( ) => {
10141050 const controller = getSnapController (
10151051 getSnapControllerOptions ( {
0 commit comments