UNPKG

@metamask/snaps-rpc-methods

Version:
1 lines 2.31 kB
{"version":3,"file":"wallet-snap-permission.mjs","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAGjD,OAAO,EAAE,0BAA0B,EAAE,gCAAsB;AAI3D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oCAAoC;IAGlD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,2BAA2B,EAAE,CAAC;YACnD,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAEzE,IACE,wBAAwB,CAAC,MAAM,GAAG,CAAC;gBACnC,wBAAwB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAC7D,CAAC;gBACD,MAAM,SAAS,CAAC,aAAa,CAC3B,qKAAqK,CACtK,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type {\n JsonRpcCall,\n JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Json } from '@metamask/utils';\n\nimport { WALLET_SNAP_PERMISSION_KEY } from '../restricted';\n\ntype RequestParams = [Record<string, Json>];\n\n/**\n * Create a middleware that validates `wallet_requestPermissions` calls that\n * include the `wallet_snap` permission.\n *\n * This prevents requesting the `wallet_snap` permission in the same call as\n * other permissions, which could lead to a confusing user experience where\n * multiple permission screens are shown at once, or the other permissions are\n * not displayed properly because the `wallet_snap` permission screen takes\n * precedence.\n *\n * @returns The middleware.\n */\nexport function createWalletSnapPermissionMiddleware(): JsonRpcMiddleware<\n JsonRpcCall<RequestParams>\n> {\n return async ({ request, next }) => {\n if (request.method === 'wallet_requestPermissions') {\n const requestedPermissions = request.params?.[0];\n const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {});\n\n if (\n requestedPermissionsKeys.length > 1 &&\n requestedPermissionsKeys.includes(WALLET_SNAP_PERMISSION_KEY)\n ) {\n throw rpcErrors.invalidParams(\n 'Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.',\n );\n }\n }\n\n return await next();\n };\n}\n"]}