UNPKG

@metamask/snaps-rpc-methods

Version:
75 lines 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getBip44EntropyImplementation = exports.getBip44EntropyBuilder = void 0; const key_tree_1 = require("@metamask/key-tree"); const permission_controller_1 = require("@metamask/permission-controller"); const rpc_errors_1 = require("@metamask/rpc-errors"); const snaps_utils_1 = require("@metamask/snaps-utils"); const utils_1 = require("../utils.cjs"); const targetName = 'snap_getBip44Entropy'; /** * The specification builder for the `snap_getBip44Entropy` permission. * `snap_getBip44Entropy_*` lets the Snap control private keys for a particular * BIP-32 coin type. * * @param options - The specification builder options. * @param options.methodHooks - The RPC method hooks needed by the method * implementation. * @returns The specification for the `snap_getBip44Entropy` permission. */ const specificationBuilder = ({ methodHooks }) => { return { permissionType: permission_controller_1.PermissionType.RestrictedMethod, targetName, allowedCaveats: [snaps_utils_1.SnapCaveatType.PermittedCoinTypes], methodImplementation: getBip44EntropyImplementation(methodHooks), validator: ({ caveats }) => { if (caveats?.length !== 1 || caveats[0].type !== snaps_utils_1.SnapCaveatType.PermittedCoinTypes) { throw rpc_errors_1.rpcErrors.invalidParams({ message: `Expected a single "${snaps_utils_1.SnapCaveatType.PermittedCoinTypes}" caveat.`, }); } }, subjectTypes: [permission_controller_1.SubjectType.Snap], }; }; const methodHooks = { getMnemonicSeed: true, getUnlockPromise: true, getClientCryptography: true, }; exports.getBip44EntropyBuilder = Object.freeze({ targetName, specificationBuilder, methodHooks, }); /** * Builds the method implementation for `snap_getBip44Entropy`. * * @param hooks - The RPC method hooks. * @param hooks.getMnemonicSeed - A function to retrieve the BIP-39 seed * of the user. * @param hooks.getUnlockPromise - A function that resolves once the MetaMask * extension is unlocked and prompts the user to unlock their MetaMask if it is * locked. * @param hooks.getClientCryptography - A function to retrieve the cryptographic * functions to use for the client. * @returns The method implementation which returns a `BIP44CoinTypeNode`. * @throws If the params are invalid. */ function getBip44EntropyImplementation({ getMnemonicSeed, getUnlockPromise, getClientCryptography, }) { return async function getBip44Entropy(args) { await getUnlockPromise(true); // `args.params` is validated by the decorator, so it's safe to assert here. const params = args.params; const seed = await (0, utils_1.getValueFromEntropySource)(getMnemonicSeed, params.source); const node = await key_tree_1.BIP44CoinTypeNode.fromSeed({ derivationPath: [seed, `bip32:44'`, `bip32:${params.coinType}'`], network: 'mainnet', }, getClientCryptography()); return node.toJSON(); }; } exports.getBip44EntropyImplementation = getBip44EntropyImplementation; //# sourceMappingURL=getBip44Entropy.cjs.map