Skip to content

Commit

Permalink
Fix non-snap permission processing (#1044)
Browse files Browse the repository at this point in the history
* Revert snap permission processing change

* Use ts-expect-error
  • Loading branch information
FrederikBolding committed Dec 6, 2022
1 parent eea652c commit b95e6af
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 6 deletions.
32 changes: 32 additions & 0 deletions packages/snaps-controllers/src/snaps/SnapController.test.ts
Expand Up @@ -12,6 +12,7 @@ import {
SemVerRange,
SemVerVersion,
SnapCaveatType,
SnapPermissions,
SnapStatus,
VirtualFile,
} from '@metamask/snaps-utils';
Expand Down Expand Up @@ -619,6 +620,37 @@ describe('SnapController', () => {
await eventSubscriptionPromise;
});

it('supports non-snap permissions', async () => {
const messenger = getSnapControllerMessenger();
const initialPermissions: SnapPermissions = {
// @ts-expect-error Current type only expects snap permissions
// eslint-disable-next-line @typescript-eslint/naming-convention
eth_accounts: {
requiredMethods: [],
},
};
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();

Expand Down
12 changes: 6 additions & 6 deletions packages/snaps-controllers/src/snaps/SnapController.ts
Expand Up @@ -2088,10 +2088,7 @@ export class SnapController extends BaseController<
*/
#processSnapPermissions(
initialPermissions: SnapPermissions,
): Record<
string,
Pick<PermissionConstraint, 'caveats'> | Record<string, never>
> {
): Record<string, Pick<PermissionConstraint, 'caveats'>> {
return fromEntries(
Object.entries(initialPermissions).map(([initialPermission, value]) => {
if (hasProperty(caveatMappers, initialPermission)) {
Expand All @@ -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<PermissionConstraint, 'caveats'>,
];
}),
);
}
Expand Down

0 comments on commit b95e6af

Please sign in to comment.