/** * Esplora Bitcoin API implementation * * This module implements BitcoinChainApi using the Blockstream Esplora REST API. * It handles balance lookup and transaction history, mapping Esplora's response * format to our internal activity types. * * **Key behaviours:** * - Balance: funded_txo_sum - spent_txo_sum from address endpoint * - Activities: Only confirmed txs with non-zero net (incoming/outgoing) are shown * - Mempool txs and net-zero (e.g. change) are omitted * - 'unknown' used for coinbase inputs and non-address outputs (OP_RETURN, etc.) */ import type { BitcoinChainApi, BitcoinBalanceData, BitcoinMempoolTx, BitcoinTxStatus, BitcoinUtxo } from './api'; import type { BitcoinTransactionActivity } from '../../activities'; import { type BitcoinTransactionId, type TransactionHex } from '../../types'; /** * Bitcoin chain API implementation using the Blockstream Esplora API * * Uses the Esplora REST API for balance and transaction data. * See: https://github.com/Blockstream/esplora/blob/master/API.md */ export declare class EsploraBitcoinApi implements BitcoinChainApi { /** * Creates an Esplora API client * * @param baseUrl - Esplora API base URL (e.g. https://blockstream.info/api) */ constructor(baseUrl: string); private readonly baseUrl; private getUrl; private fetchJson; /** * {@inheritDoc BitcoinChainApi.getBalance} * * - API returns 4xx/5xx: throws (rate limit, downtime, invalid address) * - Success: returns funded/spent from chain_stats (balance = funded - spent) * - Missing chain_stats fields: default to 0 */ getBalance(address: string): Promise; /** * {@inheritDoc BitcoinChainApi.getActivities} * * 1. Fetch raw txs from Esplora (throws on API error, returns [] on malformed) * 2. Map each tx via mapEsploraTxToActivity (skips unconfirmed, net-zero) * 3. Sort by block number descending (newest first) * * **When activities are omitted:** Unconfirmed (mempool) txs and net-zero txs * (e.g. change back to self) are not included. */ getActivities(address: string): Promise; /** * {@inheritDoc BitcoinChainApi.getUtxos} */ getUtxos(address: string): Promise; /** * {@inheritDoc BitcoinChainApi.getFeeRateSatsPerVByte} */ getFeeRateSatsPerVByte(): Promise; /** * {@inheritDoc BitcoinChainApi.getMempoolTxs} */ getMempoolTxs(address: string): Promise; /** * {@inheritDoc BitcoinChainApi.broadcastTransaction} */ broadcastTransaction(txHex: TransactionHex): Promise; /** * {@inheritDoc BitcoinChainApi.getTxStatus} * * Esplora returns 404 for unknown txs (we report unconfirmed) and a * `{ confirmed, block_height? }` payload otherwise. */ getTxStatus(txid: BitcoinTransactionId): Promise; }