{"version":3,"file":"rpc-handler.cjs","sourceRoot":"","sources":["../../src/v2/rpc-handler.ts"],"names":[],"mappings":";;AAgGA,oDAkBC;AAlHD,iDAQkC;AAGlC,2DAA+D;AAC/D,uDAA+C;AAG/C,0CAAwC;AACxC,oDAAyD;AAEzD,mHAAmH;AACnH,wDAAwD;AAExD;;;;;;;GAOG;AACH,KAAK,UAAU,sBAAsB,CACnC,OAAgB,EAChB,OAAuB;IAEvB,6EAA6E;IAC7E,gCAAgC;IAChC,IAAA,oBAAM,EAAC,OAAO,EAAE,oCAAoB,CAAC,CAAC;IAEtC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,GAAG,qBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACvC,IAAA,oBAAM,EAAC,OAAO,EAAE,6BAAwB,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC;QAED,KAAK,GAAG,qBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACtC,IAAA,oBAAM,EAAC,OAAO,EAAE,4BAAuB,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,GAAG,qBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAA,oBAAM,EAAC,OAAO,EAAE,gCAA2B,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,GAAG,qBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,IAAA,oBAAM,EAAC,OAAO,EAAE,+BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,GAAG,qBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,qCAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,IAAA,oBAAM,EAAC,OAAO,EAAE,+BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,GAAG,qBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,IAAA,oBAAM,EAAC,OAAO,EAAE,+BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,qCAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,OAAuB;IAEvB,IAAI,CAAC;QACH,OAAO,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,oBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACzD,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,mEAAmE,CAAC;QAE1E,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC","sourcesContent":["import {\n  KeyringRpcMethod,\n  GetAccountsRequestStruct,\n  GetAccountRequestStruct,\n  CreateAccountsRequestStruct,\n  DeleteAccountRequestStruct,\n  ExportAccountRequestStruct,\n  SubmitRequestRequestStruct,\n} from '@metamask/keyring-api/v2';\nimport type { Keyring } from '@metamask/keyring-api/v2';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { JsonRpcRequestStruct } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\nimport { isSnapError } from '../errors';\nimport { MethodNotSupportedError } from '../rpc-handler';\n\n// ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why.\n/* eslint-disable @typescript-eslint/only-throw-error */\n\n/**\n * Inner function that dispatches JSON-RPC request to the associated Keyring\n * methods.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n */\nasync function dispatchKeyringRequest(\n  keyring: Keyring,\n  request: JsonRpcRequest,\n): Promise<Json | void> {\n  // We first have to make sure that the request is a valid JSON-RPC request so\n  // we can check its method name.\n  assert(request, JsonRpcRequestStruct);\n\n  switch (request.method) {\n    case `${KeyringRpcMethod.GetAccounts}`: {\n      assert(request, GetAccountsRequestStruct);\n      return keyring.getAccounts();\n    }\n\n    case `${KeyringRpcMethod.GetAccount}`: {\n      assert(request, GetAccountRequestStruct);\n      return keyring.getAccount(request.params.id);\n    }\n\n    case `${KeyringRpcMethod.CreateAccounts}`: {\n      assert(request, CreateAccountsRequestStruct);\n      return keyring.createAccounts(request.params);\n    }\n\n    case `${KeyringRpcMethod.DeleteAccount}`: {\n      assert(request, DeleteAccountRequestStruct);\n      return keyring.deleteAccount(request.params.id);\n    }\n\n    case `${KeyringRpcMethod.ExportAccount}`: {\n      if (keyring.exportAccount === undefined) {\n        throw new MethodNotSupportedError(request.method);\n      }\n      assert(request, ExportAccountRequestStruct);\n      return keyring.exportAccount(request.params.id, request.params.options);\n    }\n\n    case `${KeyringRpcMethod.SubmitRequest}`: {\n      assert(request, SubmitRequestRequestStruct);\n      return keyring.submitRequest(request.params);\n    }\n\n    default: {\n      throw new MethodNotSupportedError(request.method);\n    }\n  }\n}\n\n/**\n * Handles a keyring (v2) JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests\n * in an Accounts Snap.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n * @example\n * ```ts\n * export const onKeyringRequest: OnKeyringRequestHandler = async ({\n *   origin,\n *   request,\n * }) => {\n *   return await handleKeyringRequest(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequest(\n  keyring: Keyring,\n  request: JsonRpcRequest,\n): Promise<Json | void> {\n  try {\n    return await dispatchKeyringRequest(keyring, request);\n  } catch (error) {\n    if (isSnapError(error)) {\n      throw error;\n    }\n\n    const message =\n      error instanceof Error && typeof error.message === 'string'\n        ? error.message\n        : 'An unknown error occurred while handling the keyring (v2) request';\n\n    throw new Error(message);\n  }\n}\n"]}