@metamask/snaps-rpc-methods
Version:
MetaMask Snaps JSON-RPC method implementations
55 lines • 2.8 kB
JavaScript
;
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