UNPKG

@metamask/snaps-rpc-methods

Version:
32 lines 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWalletSnapPermissionMiddleware = void 0; const rpc_errors_1 = require("@metamask/rpc-errors"); const restricted_1 = require("../restricted/index.cjs"); /** * Create a middleware that validates `wallet_requestPermissions` calls that * include the `wallet_snap` permission. * * This prevents requesting the `wallet_snap` permission in the same call as * other permissions, which could lead to a confusing user experience where * multiple permission screens are shown at once, or the other permissions are * not displayed properly because the `wallet_snap` permission screen takes * precedence. * * @returns The middleware. */ function createWalletSnapPermissionMiddleware() { return async ({ request, next }) => { if (request.method === 'wallet_requestPermissions') { const requestedPermissions = request.params?.[0]; const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {}); if (requestedPermissionsKeys.length > 1 && requestedPermissionsKeys.includes(restricted_1.WALLET_SNAP_PERMISSION_KEY)) { throw rpc_errors_1.rpcErrors.invalidParams('Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.'); } } return await next(); }; } exports.createWalletSnapPermissionMiddleware = createWalletSnapPermissionMiddleware; //# sourceMappingURL=wallet-snap-permission.cjs.map