{"version":3,"file":"wallet-revokePermissions.cjs","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":";;;AAAA,mFAAoF;AAKpF,2EAA6E;AAC7E,2CAKyB;AAEzB,uCAA4D;AAE/C,QAAA,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,mCAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;QAChC,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,+BAA+B,CACtC,GAA2B,EAC3B,GAAiC,EACjC,KAAqC,EACrC,GAA6B,EAC7B,EACE,0BAA0B,GAG3B;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,yDAA6B,CACjD,CAAC;IAEF,IAAI,CAAC,IAAA,uBAAe,EAAC,cAAc,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,MAAM,2BAA2B,GAAa;QAC5C,yBAAiB,CAAC,WAAW;QAC7B,sBAAc,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAClD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9D,CAAC;IAEF,MAAM,4BAA4B,GAChC,sBAAsB,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;IAE1D,IAAI,4BAA4B,EAAE;QAChC,sBAAsB,CAAC,IAAI,CAAC,yDAA6B,CAAC,CAAC;KAC5D;IAED,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport type {\n  AsyncJsonRpcEngineNextCallback,\n  JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport { invalidParams, MethodNames } from '@metamask/permission-controller';\nimport {\n  isNonEmptyArray,\n  type Json,\n  type JsonRpcRequest,\n  type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { EndowmentTypes, RestrictedMethods } from './types';\n\nexport const revokePermissionsHandler = {\n  methodNames: [MethodNames.RevokePermissions],\n  implementation: revokePermissionsImplementation,\n  hookNames: {\n    revokePermissionsForOrigin: true,\n    updateCaveat: true,\n  },\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns Nothing.\n */\nfunction revokePermissionsImplementation(\n  req: JsonRpcRequest<Json[]>,\n  res: PendingJsonRpcResponse<Json>,\n  _next: AsyncJsonRpcEngineNextCallback,\n  end: JsonRpcEngineEndCallback,\n  {\n    revokePermissionsForOrigin,\n  }: {\n    revokePermissionsForOrigin: (permissionKeys: string[]) => void;\n  },\n) {\n  const { params } = req;\n\n  const param = params?.[0];\n\n  if (!param) {\n    return end(invalidParams({ data: { request: req } }));\n  }\n\n  // For now, this API revokes the entire permission key\n  // even if caveats are specified.\n  const permissionKeys = Object.keys(param).filter(\n    (name) => name !== Caip25EndowmentPermissionName,\n  );\n\n  if (!isNonEmptyArray(permissionKeys)) {\n    return end(invalidParams({ data: { request: req } }));\n  }\n\n  const caip25EquivalentPermissions: string[] = [\n    RestrictedMethods.EthAccounts,\n    EndowmentTypes.PermittedChains,\n  ];\n  const relevantPermissionKeys = permissionKeys.filter(\n    (name: string) => !caip25EquivalentPermissions.includes(name),\n  );\n\n  const shouldRevokeLegacyPermission =\n    relevantPermissionKeys.length !== permissionKeys.length;\n\n  if (shouldRevokeLegacyPermission) {\n    relevantPermissionKeys.push(Caip25EndowmentPermissionName);\n  }\n\n  revokePermissionsForOrigin(relevantPermissionKeys);\n\n  res.result = null;\n\n  return end();\n}\n"]}