UNPKG

bitcoin-inscription-viewer

Version:

🔍 A robust, production-ready React/TypeScript library for viewing Bitcoin Ordinals inscriptions with advanced optimization features including LRU caching, LaserEyes wallet integration, virtual scrolling, and performance monitoring

205 lines 6.68 kB
/** * Comprehensive Ordinals API Service * Handles both user's node API endpoints and ordinals.com recursive endpoints * Based on the official Ordinals API documentation */ import { InscriptionData } from '../types/inscription'; export interface ApiEndpoint { baseUrl: string; timeout?: number; headers?: Record<string, string>; } export interface ApiResponse<T = any> { data: T; success: boolean; error?: string; source: 'user-node' | 'ordinals.com'; } export interface InscriptionApiData { id: string; number?: number; address?: string; content_type?: string; content_length?: number; timestamp?: number; genesis_height?: number; genesis_fee?: number; output?: string; output_value?: number; sat?: number; satpoint?: string; charms?: string[]; } export interface InscriptionsListResponse { ids?: string[]; inscriptions?: InscriptionApiData[]; children?: InscriptionApiData[]; more?: boolean; page?: number; page_index?: number; prev?: number | null; next?: number | null; } export interface BlockResponse { hash: string; height: number; inscriptions: string[]; transactions: string[]; target?: string; best_height?: number; } export interface AddressResponse { outputs: string[]; inscriptions: string[]; sat_balance: number; runes_balances: any[]; } export declare class OrdinalsApiService { private userNodeEndpoint; private ordinalsEndpoint; private cache; private cacheMaxAge; constructor(userNodeUrl?: string, ordinalsUrl?: string); /** * Generic HTTP request handler with fallback logic */ private makeRequest; /** * Check if endpoint is a recursive endpoint that can use ordinals.com */ private isRecursiveEndpoint; /** * GET /address/<ADDRESS> * List all assets of an address */ getAddressAssets(address: string): Promise<ApiResponse<AddressResponse>>; /** * GET /block/<BLOCK_HASH_OR_HEIGHT> * Returns info about the specified block */ getBlock(blockHashOrHeight: string | number): Promise<ApiResponse<BlockResponse>>; /** * GET /blockcount * Returns the height of the latest block */ getBlockCount(): Promise<ApiResponse<number>>; /** * GET /blockhash/<HEIGHT> * Returns blockhash of specified block */ getBlockHash(height: number): Promise<ApiResponse<string>>; /** * GET /inscription/<INSCRIPTION_ID> * Fetch details about a specific inscription by its ID */ getInscription(inscriptionId: string): Promise<ApiResponse<InscriptionApiData>>; /** * GET /inscriptions * Get a list of the latest 100 inscriptions */ getInscriptions(page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /inscriptions/<PAGE> * Pagination for inscriptions */ getInscriptionsPage(page: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /inscriptions/block/<BLOCK_HEIGHT> * Get inscriptions for a specific block */ getInscriptionsInBlock(blockHeight: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * POST /inscriptions * Fetch details for a list of inscription IDs */ getInscriptionsByIds(inscriptionIds: string[]): Promise<ApiResponse<InscriptionApiData[]>>; /** * GET /output/<OUTPUT> * Returns information about a UTXO, including inscriptions within it */ getOutput(output: string): Promise<ApiResponse<any>>; /** * GET /status * Returns details about the server installation and index */ getStatus(): Promise<ApiResponse<any>>; /** * GET /r/blockhash * Latest block hash */ getLatestBlockHash(): Promise<ApiResponse<string>>; /** * GET /r/blockheight * Latest block height */ getLatestBlockHeight(): Promise<ApiResponse<number>>; /** * GET /r/blocktime * UNIX timestamp of latest block */ getLatestBlockTime(): Promise<ApiResponse<number>>; /** * GET /r/children/<INSCRIPTION_ID> * The first 100 child inscription ids */ getInscriptionChildren(inscriptionId: string, page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /r/children/<INSCRIPTION_ID>/inscriptions * Details of first 100 child inscriptions */ getInscriptionChildrenDetails(inscriptionId: string, page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /r/inscription/<INSCRIPTION_ID> * Information about an inscription */ getInscriptionInfo(inscriptionId: string): Promise<ApiResponse<InscriptionApiData>>; /** * GET /r/metadata/<INSCRIPTION_ID> * JSON string containing the hex-encoded CBOR metadata */ getInscriptionMetadata(inscriptionId: string): Promise<ApiResponse<string>>; /** * GET /r/parents/<INSCRIPTION_ID> * The first 100 parent inscription ids */ getInscriptionParents(inscriptionId: string, page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /r/parents/<INSCRIPTION_ID>/inscriptions * Details of the first 100 parent inscriptions */ getInscriptionParentsDetails(inscriptionId: string, page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /r/sat/<SAT_NUMBER>/inscriptions * The first 100 inscription ids on a sat */ getSatInscriptions(satNumber: number, page?: number): Promise<ApiResponse<InscriptionsListResponse>>; /** * GET /r/sat/<SAT_NUMBER>/at/<INDEX> * The inscription id at INDEX of all inscriptions on a sat */ getSatInscriptionAtIndex(satNumber: number, index: number): Promise<ApiResponse<string>>; /** * GET /content/<INSCRIPTION_ID> * The content of the inscription (recursive endpoint, can use ordinals.com) */ getInscriptionContent(inscriptionId: string): Promise<ApiResponse<any>>; /** * Convert API response to normalized inscription data */ normalizeInscriptionData(apiData: InscriptionApiData | string): InscriptionData; /** * Process various API response formats and extract inscriptions */ extractInscriptions(response: InscriptionsListResponse): InscriptionData[]; /** * Clear cache */ clearCache(): void; /** * Update endpoint configurations */ updateEndpoints(userNodeUrl?: string, ordinalsUrl?: string): void; } export declare const ordinalsApi: OrdinalsApiService; export default ordinalsApi; //# sourceMappingURL=OrdinalsApiService.d.ts.map