{"version":3,"file":"wallet-snap-permission.cjs","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":";;;AAIA,qDAAiD;AAGjD,wDAA2D;AAI3D;;;;;;;;;;;GAWG;AACH,SAAgB,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,uCAA0B,CAAC,EAC7D,CAAC;gBACD,MAAM,sBAAS,CAAC,aAAa,CAC3B,qKAAqK,CACtK,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC;AApBD,oFAoBC","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"]}