{"version":3,"file":"invoke-method.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":";;;AACA,mFAG6C;AAE7C,qDAAiE;AACjE,uDAAyD;AACzD,2CAIyB;AAGzB,uCAA2C;AAS3C,MAAM,wBAAwB,GAAG,IAAA,oBAAM,EAAC;IACtC,KAAK,EAAE,yBAAiB;IACxB,sDAAsD;IACtD,OAAO,EAAE,IAAA,kBAAI,EAAC,4BAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,KAA+B;IAE/B,IAAI,CAAC,IAAA,gBAAE,EAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,CAAC;QAClD,MAAM,sBAAS,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAC5B,yDAA6B,EAC7B,4CAAgB,CACoB,CAAC;IAEvC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,2BAAc,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,CAAC;AAxBD,kDAwBC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n  Caip25CaveatType,\n  Caip25EndowmentPermissionName,\n} from '@metamask/chain-agnostic-permission';\nimport type { Caveat } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport { is, object, pick } from '@metamask/superstruct';\nimport {\n  CaipChainIdStruct,\n  JsonRpcRequestStruct,\n  type Json,\n} from '@metamask/utils';\n\nimport type { ScopedJsonRpcRequest } from './utils';\nimport { getSessionScopes } from './utils';\n\nexport type InvokeMethodHandlerHooks = {\n  getCaveat: (\n    permission: string,\n    caveatType: string,\n  ) => Caveat<string, Json> | undefined;\n};\n\nconst InvokeMethodParamsStruct = object({\n  scope: CaipChainIdStruct,\n  // @ts-expect-error Unsure why this type doesn't work.\n  request: pick(JsonRpcRequestStruct, ['method', 'params']),\n});\n\n/**\n * A handler that implements a simplified version of `wallet_invokeMethod`.\n *\n * @param request - Incoming JSON-RPC request.\n * @param hooks - The method hooks.\n * @returns Nothing.\n */\nexport async function invokeMethodHandler(\n  request: ScopedJsonRpcRequest,\n  hooks: InvokeMethodHandlerHooks,\n) {\n  if (!is(request.params, InvokeMethodParamsStruct)) {\n    throw rpcErrors.invalidParams({ data: { request } });\n  }\n\n  const { request: wrappedRequest, scope } = request.params;\n\n  const caveat = hooks.getCaveat(\n    Caip25EndowmentPermissionName,\n    Caip25CaveatType,\n  ) as Caveat<string, Caip25CaveatValue>;\n\n  const sessionScopes = caveat ? getSessionScopes(caveat.value) : {};\n\n  if (!sessionScopes[scope]?.methods.includes(wrappedRequest.method)) {\n    throw providerErrors.unauthorized();\n  }\n\n  request.method = wrappedRequest.method;\n  request.params = wrappedRequest.params;\n  request.scope = scope;\n}\n"]}