import { Transport } from '../core/transport'; export interface BitcoinSendOptions { feeRate?: number; memo?: string; } export interface ApnaBitcoin { getAddress(): Promise; signMessage(message: string): Promise; signPsbt(psbt: string): Promise; sendBitcoin( address: string, amountSats: number, opts?: BitcoinSendOptions ): Promise; } export interface BitcoinProtocolOptions { transport: () => Transport; isCapabilitySupported?: (capability: string) => boolean; } /** Create the low-level Bitcoin protocol module. */ export function createBitcoinProtocol( options: BitcoinProtocolOptions ): ApnaBitcoin { const call = (capability: string, args: unknown[]): Promise => options.isCapabilitySupported?.(capability) === false ? Promise.reject(new Error('bitcoin not supported by this host')) : options.transport().call(capability, args); return { getAddress: () => call('bitcoin.getAddress', []) as Promise, signMessage: (message: string) => call('bitcoin.signMessage', [message]) as Promise, signPsbt: (psbt: string) => call('bitcoin.signPsbt', [psbt]) as Promise, sendBitcoin: ( address: string, amountSats: number, opts?: BitcoinSendOptions ) => call('bitcoin.sendBitcoin', [address, amountSats, opts]) as Promise, }; }