UNPKG

@metamask/snaps-rpc-methods

Version:
65 lines 3.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildSnapRestrictedMethodSpecifications = exports.buildSnapEndowmentSpecifications = exports.processSnapPermissions = void 0; const v2_1 = require("@metamask/json-rpc-engine/v2"); const permission_controller_1 = require("@metamask/permission-controller"); const utils_1 = require("@metamask/utils"); const endowments_1 = require("./endowments/index.cjs"); const restricted_1 = require("./restricted/index.cjs"); /** * Map initial permissions as defined in a Snap manifest to something that can * be processed by the PermissionsController. Each caveat mapping function * should return a valid permission caveat value. * * This function does not validate the caveat values, since that is done by * the PermissionsController itself, upon requesting the permissions. * * @param initialPermissions - The initial permissions to process. * @returns The processed permissions. */ function processSnapPermissions(initialPermissions) { return Object.fromEntries(Object.entries(initialPermissions).map(([initialPermission, value]) => { if ((0, utils_1.hasProperty)(restricted_1.caveatMappers, initialPermission)) { return [initialPermission, restricted_1.caveatMappers[initialPermission](value)]; } else if ((0, utils_1.hasProperty)(endowments_1.endowmentCaveatMappers, initialPermission)) { return [ initialPermission, endowments_1.endowmentCaveatMappers[initialPermission](value), ]; } // If we have no mapping, this may be a non-snap permission, return as-is return [ initialPermission, value, ]; })); } exports.processSnapPermissions = processSnapPermissions; const buildSnapEndowmentSpecifications = (excludedEndowments) => Object.values(endowments_1.endowmentPermissionBuilders).reduce((allSpecifications, { targetName, specificationBuilder }) => { if (!excludedEndowments.includes(targetName)) { allSpecifications[targetName] = specificationBuilder({}); } return allSpecifications; }, {}); exports.buildSnapEndowmentSpecifications = buildSnapEndowmentSpecifications; const buildSnapRestrictedMethodSpecifications = (excludedPermissions, hooks, messenger) => { const permissionBuilders = Object.values(restricted_1.restrictedMethodPermissionBuilders).filter((builder) => !excludedPermissions.includes(builder.targetName)); const expectedHookNames = new Set(permissionBuilders.flatMap((builder) => builder.methodHooks ? Object.getOwnPropertyNames(builder.methodHooks) : [])); (0, v2_1.assertExpectedHooks)(hooks, expectedHookNames); return permissionBuilders.reduce((specifications, { targetName, specificationBuilder, methodHooks, actionNames }) => { specifications[targetName] = specificationBuilder({ methodHooks: (0, v2_1.selectHooks)(hooks, methodHooks), messenger: (0, permission_controller_1.createRestrictedMethodMessenger)({ namespace: targetName, rootMessenger: messenger, actionNames: actionNames, }), }); return specifications; }, {}); }; exports.buildSnapRestrictedMethodSpecifications = buildSnapRestrictedMethodSpecifications; //# sourceMappingURL=permissions.cjs.map