@metamask/keyring-api
Version:
MetaMask Keyring API
99 lines • 3.1 kB
JavaScript
import { object } from "@metamask/keyring-utils";
import { string, array, enums, refine, literal, nonempty } from "@metamask/superstruct";
import { AddressType, getAddressInfo } from "bitcoin-address-validation";
import { BtcAccountType, CaipChainIdStruct, KeyringAccountStruct } from "../api/index.mjs";
const validateAddress = (address, type) => {
try {
const addressInfo = getAddressInfo(address);
if (addressInfo.type === type) {
return true;
}
return new Error(`Invalid ${type} address`);
}
catch (error) {
return new Error(`Failed to decode ${type} address: ${error.message}`);
}
};
export const BtcP2pkhAddressStruct = refine(string(), 'BtcP2pkhAddressStruct', (address) => {
return validateAddress(address, AddressType.p2pkh);
});
export const BtcP2shAddressStruct = refine(string(), 'BtcP2shAddressStruct', (address) => {
return validateAddress(address, AddressType.p2sh);
});
export const BtcP2wpkhAddressStruct = refine(string(), 'BtcP2wpkhAddressStruct', (address) => {
return validateAddress(address, AddressType.p2wpkh);
});
export const BtcP2trAddressStruct = refine(string(), 'BtcP2trAddressStruct', (address) => {
return validateAddress(address, AddressType.p2tr);
});
/**
* Supported Bitcoin methods.
*/
export var BtcMethod;
(function (BtcMethod) {
BtcMethod["SignPsbt"] = "signPsbt";
BtcMethod["ComputeFee"] = "computeFee";
BtcMethod["FillPsbt"] = "fillPsbt";
BtcMethod["BroadcastPsbt"] = "broadcastPsbt";
BtcMethod["SendTransfer"] = "sendTransfer";
BtcMethod["GetUtxo"] = "getUtxo";
BtcMethod["ListUtxos"] = "listUtxos";
BtcMethod["PublicDescriptor"] = "publicDescriptor";
BtcMethod["SignMessage"] = "signMessage";
})(BtcMethod || (BtcMethod = {}));
const BtcAccountStruct = object({
...KeyringAccountStruct.schema,
/**
* Account supported scopes (CAIP-2 chain ID).
*/
scopes: nonempty(array(CaipChainIdStruct)),
/**
* Account supported methods.
*/
methods: array(enums(Object.values(BtcMethod))),
});
export const BtcP2pkhAccountStruct = object({
...BtcAccountStruct.schema,
/**
* Account P2PKH address.
*/
address: BtcP2pkhAddressStruct,
/**
* Account type.
*/
type: literal(`${BtcAccountType.P2pkh}`),
});
export const BtcP2shAccountStruct = object({
...BtcAccountStruct.schema,
/**
* Account P2SH address.
*/
address: BtcP2shAddressStruct,
/**
* Account type.
*/
type: literal(`${BtcAccountType.P2sh}`),
});
export const BtcP2wpkhAccountStruct = object({
...BtcAccountStruct.schema,
/**
* Account P2WPKH address.
*/
address: BtcP2wpkhAddressStruct,
/**
* Account type.
*/
type: literal(`${BtcAccountType.P2wpkh}`),
});
export const BtcP2trAccountStruct = object({
...BtcAccountStruct.schema,
/**
* Account P2TR address.
*/
address: BtcP2trAddressStruct,
/**
* Account type.
*/
type: literal(`${BtcAccountType.P2tr}`),
});
//# sourceMappingURL=types.mjs.map