From 1def1dde408dc885d9a5a0265172b89c6c00f5f9 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Tue, 6 Dec 2022 13:33:11 +0100 Subject: [PATCH 1/2] Revert snap permission processing change --- .../src/snaps/SnapController.test.ts | 30 +++++++++++++++++++ .../src/snaps/SnapController.ts | 12 ++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/packages/snaps-controllers/src/snaps/SnapController.test.ts b/packages/snaps-controllers/src/snaps/SnapController.test.ts index 76edaeccfc..393272bea9 100644 --- a/packages/snaps-controllers/src/snaps/SnapController.test.ts +++ b/packages/snaps-controllers/src/snaps/SnapController.test.ts @@ -619,6 +619,36 @@ describe('SnapController', () => { await eventSubscriptionPromise; }); + it('supports non-snap permissions', async () => { + const messenger = getSnapControllerMessenger(); + const initialPermissions = { + // eslint-disable-next-line @typescript-eslint/naming-convention + eth_accounts: { + requiredMethods: [], + }, + } as any; + const snapController = getSnapController( + getSnapControllerOptions({ + messenger, + detectSnapLocation: loopbackDetect({ + manifest: getSnapManifest({ + initialPermissions, + }), + }), + }), + ); + + const expectedSnapObject = getTruncatedSnap({ initialPermissions }); + + expect( + await snapController.installSnaps(MOCK_ORIGIN, { + [MOCK_SNAP_ID]: {}, + }), + ).toStrictEqual({ + [MOCK_SNAP_ID]: expectedSnapObject, + }); + }); + it('throws an error on invalid semver range during installSnaps', async () => { const controller = getSnapController(); diff --git a/packages/snaps-controllers/src/snaps/SnapController.ts b/packages/snaps-controllers/src/snaps/SnapController.ts index 1f44aec48f..bdc0be9add 100644 --- a/packages/snaps-controllers/src/snaps/SnapController.ts +++ b/packages/snaps-controllers/src/snaps/SnapController.ts @@ -2088,10 +2088,7 @@ export class SnapController extends BaseController< */ #processSnapPermissions( initialPermissions: SnapPermissions, - ): Record< - string, - Pick | Record - > { + ): Record> { return fromEntries( Object.entries(initialPermissions).map(([initialPermission, value]) => { if (hasProperty(caveatMappers, initialPermission)) { @@ -2103,8 +2100,11 @@ export class SnapController extends BaseController< ]; } - assert(Object.keys(value).length === 0); - return [initialPermission, {}]; + // If we have no mapping, this may be a non-snap permission, return as-is + return [ + initialPermission, + value as Pick, + ]; }), ); } From ac83214d3c33367077571a217ee73bc4089fa255 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Tue, 6 Dec 2022 13:45:31 +0100 Subject: [PATCH 2/2] Use ts-expect-error --- packages/snaps-controllers/src/snaps/SnapController.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/snaps-controllers/src/snaps/SnapController.test.ts b/packages/snaps-controllers/src/snaps/SnapController.test.ts index 393272bea9..0d3e1a4f32 100644 --- a/packages/snaps-controllers/src/snaps/SnapController.test.ts +++ b/packages/snaps-controllers/src/snaps/SnapController.test.ts @@ -12,6 +12,7 @@ import { SemVerRange, SemVerVersion, SnapCaveatType, + SnapPermissions, SnapStatus, VirtualFile, } from '@metamask/snaps-utils'; @@ -621,12 +622,13 @@ describe('SnapController', () => { it('supports non-snap permissions', async () => { const messenger = getSnapControllerMessenger(); - const initialPermissions = { + const initialPermissions: SnapPermissions = { + // @ts-expect-error Current type only expects snap permissions // eslint-disable-next-line @typescript-eslint/naming-convention eth_accounts: { requiredMethods: [], }, - } as any; + }; const snapController = getSnapController( getSnapControllerOptions({ messenger,