UNPKG

@metamask/keyring-snap-sdk

Version:
89 lines 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleKeyringRequest = handleKeyringRequest; const v2_1 = require("@metamask/keyring-api/v2"); const keyring_utils_1 = require("@metamask/keyring-utils"); const superstruct_1 = require("@metamask/superstruct"); const errors_1 = require("../errors.cjs"); const rpc_handler_1 = require("../rpc-handler.cjs"); // ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why. /* eslint-disable @typescript-eslint/only-throw-error */ /** * Inner function that dispatches JSON-RPC request to the associated Keyring * methods. * * @param keyring - Keyring instance. * @param request - Keyring JSON-RPC request. * @returns A promise that resolves to the keyring response. */ async function dispatchKeyringRequest(keyring, request) { // We first have to make sure that the request is a valid JSON-RPC request so // we can check its method name. (0, superstruct_1.assert)(request, keyring_utils_1.JsonRpcRequestStruct); switch (request.method) { case `${v2_1.KeyringRpcMethod.GetAccounts}`: { (0, superstruct_1.assert)(request, v2_1.GetAccountsRequestStruct); return keyring.getAccounts(); } case `${v2_1.KeyringRpcMethod.GetAccount}`: { (0, superstruct_1.assert)(request, v2_1.GetAccountRequestStruct); return keyring.getAccount(request.params.id); } case `${v2_1.KeyringRpcMethod.CreateAccounts}`: { (0, superstruct_1.assert)(request, v2_1.CreateAccountsRequestStruct); return keyring.createAccounts(request.params); } case `${v2_1.KeyringRpcMethod.DeleteAccount}`: { (0, superstruct_1.assert)(request, v2_1.DeleteAccountRequestStruct); return keyring.deleteAccount(request.params.id); } case `${v2_1.KeyringRpcMethod.ExportAccount}`: { if (keyring.exportAccount === undefined) { throw new rpc_handler_1.MethodNotSupportedError(request.method); } (0, superstruct_1.assert)(request, v2_1.ExportAccountRequestStruct); return keyring.exportAccount(request.params.id, request.params.options); } case `${v2_1.KeyringRpcMethod.SubmitRequest}`: { (0, superstruct_1.assert)(request, v2_1.SubmitRequestRequestStruct); return keyring.submitRequest(request.params); } default: { throw new rpc_handler_1.MethodNotSupportedError(request.method); } } } /** * Handles a keyring (v2) JSON-RPC request. * * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests * in an Accounts Snap. * * @param keyring - Keyring instance. * @param request - Keyring JSON-RPC request. * @returns A promise that resolves to the keyring response. * @example * ```ts * export const onKeyringRequest: OnKeyringRequestHandler = async ({ * origin, * request, * }) => { * return await handleKeyringRequest(keyring, request); * }; * ``` */ async function handleKeyringRequest(keyring, request) { try { return await dispatchKeyringRequest(keyring, request); } catch (error) { if ((0, errors_1.isSnapError)(error)) { throw error; } const message = error instanceof Error && typeof error.message === 'string' ? error.message : 'An unknown error occurred while handling the keyring (v2) request'; throw new Error(message); } } //# sourceMappingURL=rpc-handler.cjs.map