import type { ChainTracker } from "@bsv/sdk"; import type { BaseBlockHeader, BlockHeader, Chain } from "@bsv/wallet-toolbox"; import type { ClientOptions } from "../types"; import { BaseClient } from "./BaseClient"; /** * Client for /1sat/chaintracks/* routes. * Implements ChaintracksClientApi interface from @bsv/wallet-toolbox. * * Routes: * - GET /tip - Get chain tip * - GET /tip/stream - SSE stream of new blocks * - GET /network - Get network type * - GET /headers?height=N&count=M - Get raw header bytes * - GET /header/height/:height - Get header by height * - GET /header/hash/:hash - Get header by hash */ export declare class ChaintracksClient extends BaseClient implements ChainTracker { private eventSource; private subscribers; private cachedTip; private cachedTipTime; private static readonly TIP_CACHE_TTL_MS; constructor(baseUrl: string, options?: ClientOptions); /** * Get current blockchain height (ChainTracker interface) */ currentHeight(): Promise; /** * Validate merkle root for a given height (ChainTracker interface) */ isValidRootForHeight(root: string, height: number): Promise; /** * Get the blockchain network (main or test) */ getChain(): Promise; /** * Get service info - synthetic for remote client */ getInfo(): Promise<{ chain: Chain; heightBulk: number; heightLive: number; storage: string; bulkIngestors: string[]; liveIngestors: string[]; packages: { name: string; version: string; }[]; }>; /** * Get current chain height */ getPresentHeight(): Promise; /** * Get headers as serialized 80-byte hex string */ getHeaders(height: number, count: number): Promise; /** * Get the current chain tip header (cached for 30 seconds) */ findChainTipHeader(): Promise; /** * Get the current chain tip hash */ findChainTipHash(): Promise; /** * Get block header by height */ findHeaderForHeight(height: number): Promise; /** * Get block header by hash */ findHeaderForBlockHash(hash: string): Promise; /** No-op: Remote server tracks the chain */ addHeader(_header: BaseBlockHeader): Promise; /** No-op: Client is always ready */ startListening(): Promise; /** No-op: Resolves immediately */ listening(): Promise; /** Always true for remote client */ isListening(): Promise; /** Always true for remote client */ isSynchronized(): Promise; /** Not implemented for remote client */ subscribeReorgs(_listener: (depth: number, oldTip: BlockHeader, newTip: BlockHeader, deactivatedHeaders?: BlockHeader[]) => void): Promise; /** Unsubscribe from events */ unsubscribe(_subscriptionId: string): Promise; /** Subscribe to new header events */ subscribeHeaders(listener: (header: BlockHeader) => void): Promise; /** * Get raw header bytes for one or more headers */ getHeaderBytes(height: number, count?: number): Promise; /** * Subscribe to new block notifications via SSE * Returns unsubscribe function */ subscribe(callback: (header: BlockHeader) => void): () => void; /** * Close all connections */ close(): void; }