UNPKG

@metamask/snaps-rpc-methods

Version:
55 lines 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildSnapRestrictedMethodSpecifications = exports.buildSnapEndowmentSpecifications = exports.processSnapPermissions = void 0; const utils_1 = require("@metamask/utils"); const endowments_1 = require("./endowments/index.cjs"); const restricted_1 = require("./restricted/index.cjs"); const utils_2 = require("./utils.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) => Object.values(restricted_1.restrictedMethodPermissionBuilders).reduce((specifications, { targetName, specificationBuilder, methodHooks }) => { if (!excludedPermissions.includes(targetName)) { specifications[targetName] = specificationBuilder({ // @ts-expect-error The selectHooks type is wonky methodHooks: (0, utils_2.selectHooks)(hooks, methodHooks), }); } return specifications; }, {}); exports.buildSnapRestrictedMethodSpecifications = buildSnapRestrictedMethodSpecifications; //# sourceMappingURL=permissions.cjs.map