UNPKG

blockbook-fetcher

Version:

Blockbook API fetcher for Browser / Node.js

2 lines (1 loc) 14.6 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("ajv")):"function"==typeof define&&define.amd?define(["exports","ajv"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).blockbook={},e.ajv$1)}(this,function(e,t){"use strict";const r=new(globalThis?.Ajv||globalThis?.ajv2020||t.Ajv)({allErrors:!0,allowUnionTypes:!0}),i={type:"object",properties:{error:{type:"string"},chain:{type:"string"},blocks:{type:"number"},headers:{type:"number"},bestBlockHash:{type:"string"},difficulty:{type:"string"},sizeOnDisk:{type:"number"},version:{type:"string"},subversion:{type:"string"},protocolVersion:{type:"string"},timeOffset:{type:"number"},warnings:{type:"string"},consensus_version:{type:"string"},consensus:{}}},s={type:"object",properties:{name:{type:"string"},version:{type:"number"},rows:{type:"number"},keyBytes:{type:"number"},valueBytes:{type:"number"},updated:{type:"string"}},required:["name","version","rows","keyBytes","valueBytes","updated"]},n={type:"object",properties:{coin:{type:"string"},network:{type:"string"},host:{type:"string"},version:{type:"string"},gitCommit:{type:"string"},buildTime:{type:"string"},syncMode:{type:"boolean"},initialSync:{type:"boolean"},inSync:{type:"boolean"},bestHeight:{type:"number"},lastBlockTime:{type:"string"},inSyncMempool:{type:"boolean"},lastMempoolTime:{type:"string"},mempoolSize:{type:"number"},decimals:{type:"number"},dbSize:{type:"number"},hasFiatRates:{type:"boolean"},hasTokenFiatRates:{type:"boolean"},currentFiatRatesTime:{type:"string"},historicalFiatRatesTime:{type:"string"},historicalTokenFiatRatesTime:{type:"string"},supportedStakingPools:{type:"array",items:{type:"string"}},dbSizeFromColumns:{type:"number"},dbColumns:{type:"array",items:s},about:{type:"string"}},required:["coin","network","host","version","gitCommit","buildTime","syncMode","initialSync","inSync","bestHeight","lastBlockTime","inSyncMempool","lastMempoolTime","mempoolSize","decimals","dbSize","about"]},a={type:"object",properties:{blockbook:n,backend:i},required:["blockbook","backend"]},o={type:"object",properties:{blockHash:{type:"string"}},required:["blockHash"]},p={type:"object",properties:{Type:{type:"string"},Alias:{type:"string"}},required:["Type","Alias"]},y={type:"object",properties:{type:{type:"number"},from:{type:"string"},to:{type:"string"},value:{type:"string"}},required:["type","from","to","value"]},c={type:"object",properties:{type:{type:"string"},values:{type:"array",items:{type:"string"}}},required:["type"]},m={type:"object",properties:{methodId:{type:"string"},name:{type:"string"},function:{type:"string"},params:{type:"array",items:c}},required:["methodId","name"]},l={type:"object",properties:{type:{type:"number"},createdContract:{type:"string"},status:{type:"number"},error:{type:"string"},nonce:{type:"number"},gasLimit:{type:"number"},gasUsed:{type:"number"},gasPrice:{type:"string"},maxPriorityFeePerGas:{type:"string"},maxFeePerGas:{type:"string"},baseFeePerGas:{type:"string"},l1Fee:{type:"number"},l1FeeScalar:{type:"string"},l1GasPrice:{type:"string"},l1GasUsed:{type:"number"},data:{type:"string"},parsedData:m,internalTransfers:{type:"array",items:y}},required:["status","nonce","gasLimit"]},u={type:"object",properties:{id:{type:"string"},value:{type:"string"}}},b={type:"object",properties:{type:{type:"string"},standard:{type:"string"},from:{type:"string"},to:{type:"string"},contract:{type:"string"},name:{type:"string"},symbol:{type:"string"},decimals:{type:"number"},value:{type:"string"},multiTokenValues:{type:"array",items:u}}},d={type:"object",properties:{value:{type:"string"},n:{type:"number"},spent:{type:"boolean"},spentTxId:{type:"string"},spentIndex:{type:"number"},spentHeight:{type:"number"},hex:{type:"string"},asm:{type:"string"},addresses:{type:["array","null"],items:{type:"string"}},isAddress:{type:"boolean"},isOwn:{type:"boolean"},type:{type:"string"}},required:["n","addresses","isAddress"]},g={type:"object",properties:{txid:{type:"string"},vout:{type:"number"},sequence:{type:"number"},n:{type:"number"},addresses:{type:"array",items:{type:"string"}},isAddress:{type:"boolean"},isOwn:{type:"boolean"},value:{type:"string"},hex:{type:"string"},asm:{type:"string"},coinbase:{type:"string"}},required:["n","isAddress"]},h={type:"object",properties:{txid:{type:"string"},version:{type:"number"},lockTime:{type:"number"},vin:{type:"array",items:g},vout:{type:"array",items:d},blockHash:{type:"string"},blockHeight:{type:"number"},confirmations:{type:"number"},confirmationETABlocks:{type:"number"},confirmationETASeconds:{type:"number"},blockTime:{type:"number"},size:{type:"number"},vsize:{type:"number"},value:{type:"string"},valueIn:{type:"string"},fees:{type:"string"},hex:{type:"string"},rbf:{type:"boolean"},coinSpecificData:{},tokenTransfers:{type:"array",items:b},ethereumSpecific:l,addressAliases:{type:"object",additionalProperties:p}},required:["txid","vin","vout","blockHeight","confirmations","blockTime","value"]},f={type:"object",properties:{error:{type:"string"}},required:["error"]},T={oneOf:[h,f]},S={type:"object",properties:{contract:{type:"string"},name:{type:"string"},pendingBalance:{type:"string"},pendingDepositedBalance:{type:"string"},depositedBalance:{type:"string"},withdrawTotalAmount:{type:"string"},claimableAmount:{type:"string"},restakedReward:{type:"string"},autocompoundBalance:{type:"string"}},required:["contract","name","pendingBalance","pendingDepositedBalance","depositedBalance","withdrawTotalAmount","claimableAmount","restakedReward","autocompoundBalance"]},k={type:"object",properties:{type:{type:"string"},standard:{type:"string"},contract:{type:"string"},name:{type:"string"},symbol:{type:"string"},decimals:{type:"number"},createdInBlock:{type:"number"},destructedInBlock:{type:"number"}}},v={type:"object",properties:{type:{type:"string"},standard:{type:"string"},name:{type:"string"},path:{type:"string"},contract:{type:"string"},transfers:{type:"number"},symbol:{type:"string"},decimals:{type:"number"},balance:{type:"string"},baseValue:{type:"number"},secondaryValue:{type:"number"},ids:{type:"array",items:{type:"string"}},multiTokenValues:{type:"array",items:u},totalReceived:{type:"string"},totalSent:{type:"string"}}},w={type:"object",properties:{page:{type:"number"},totalPages:{type:"number"},itemsOnPage:{type:"number"},address:{type:"string"},balance:{type:"string"},totalReceived:{type:"string"},totalSent:{type:"string"},unconfirmedBalance:{type:"string"},unconfirmedTxs:{type:"number"},unconfirmedSending:{type:"string"},unconfirmedReceiving:{type:"string"},txs:{type:"number"},addrTxCount:{type:"number"},nonTokenTxs:{type:"number"},internalTxs:{type:"number"},transactions:{type:"array",items:h},txids:{type:"array",items:{type:"string"}},nonce:{type:"string"},usedTokens:{type:"number"},tokens:{type:"array",items:v},secondaryValue:{type:"number"},tokensBaseValue:{type:"number"},tokensSecondaryValue:{type:"number"},totalBaseValue:{type:"number"},totalSecondaryValue:{type:"number"},contractInfo:k,erc20Contract:k,addressAliases:{type:"object",additionalProperties:p},stakingPools:{type:"array",items:S}},required:["address","balance","unconfirmedBalance","unconfirmedTxs","txs"]},x={oneOf:[w,f]},j={type:"object",properties:{txid:{type:"string"},vout:{type:"number"},value:{type:"string"},height:{type:"number"},confirmations:{type:"number"},address:{type:"string"},path:{type:"string"},lockTime:{type:"number"},coinbase:{type:"boolean"}},required:["txid","vout","value","confirmations"]},O={oneOf:[{type:"array",items:j},f]},B={type:"object",properties:{Hash:{type:"string"},Time:{type:"number"},Txs:{type:"number"},Size:{type:"number"},Height:{type:"number"}},required:["Hash","Time","Txs","Size","Height"]},$={type:"object",properties:{page:{type:"number"},totalPages:{type:"number"},itemsOnPage:{type:"number"},blocks:{type:"array",items:B}},required:["blocks"]},E={type:"object",properties:{page:{type:"number"},totalPages:{type:"number"},itemsOnPage:{type:"number"},hash:{type:"string"},previousBlockHash:{type:"string"},nextBlockHash:{type:"string"},height:{type:"number"},confirmations:{type:"number"},size:{type:"number"},time:{type:"number"},version:{type:["string","number"]},merkleRoot:{type:"string"},nonce:{type:"string"},bits:{type:"string"},difficulty:{type:"string"},tx:{type:"array",items:{type:"string"}},txCount:{type:"number"},txs:{type:"array",items:h},addressAliases:{type:"object",additionalProperties:p}},required:["hash","height","confirmations","size","merkleRoot","bits","difficulty","txCount"]},A={oneOf:[E,f]},P={type:"object",properties:{hex:{type:"string"}},required:["hex"]},V={oneOf:[P,f]},q={type:"object",properties:{result:{type:"string"}}},U={oneOf:[q,{type:"object",properties:{error:{type:"object",properties:{message:{type:"string"}},required:["message"]}},required:["error"]}]},F={type:"object",properties:{ts:{type:"number",nullable:!0},available_currencies:{type:"array",items:{type:"string"}},error:{type:"string",nullable:!0}},required:["available_currencies"]},I={oneOf:[F,f]},H={type:"object",properties:{ts:{type:"number",nullable:!0},rates:{type:"object",additionalProperties:{type:"number"}},error:{type:"string",nullable:!0}},required:["rates"]},C={oneOf:[H,f]},R={type:"object",properties:{time:{type:"number"},txs:{type:"number"},received:{type:"string"},sent:{type:"string"},sentToSelf:{type:"string"},rates:{type:"object",additionalProperties:{type:"number"}},txid:{type:"string"}},required:["time","txs","received","sent","sentToSelf"]},z={type:"array",items:R},M={oneOf:[z,f]},D={type:"object",properties:{result:{type:"string"}}},G={oneOf:[D,f]};async function K(e,t,r){const i=await fetch(e,{...t||{},signal:AbortSignal.timeout(t?.timeout||6e4)});if(!i.ok)throw new Error(`Failed to query Blockbook: ${i.statusText}`);const s=await i.json();if(!r||r?.(s))return s;throw new Error("Blockbook schema error: "+JSON.stringify(r.errors))}function L(e){if(!e)return"";const t=Object.entries(e).filter(([,e])=>void 0!==e);return t.length?"?"+t.map(([e,t])=>Array.isArray(t)?t.map(t=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&"):`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&"):""}e.APIErrorSchema={type:"object",properties:{Text:{type:"string"},Public:{type:"boolean"}},required:["Text","Public"]},e.AddressAliasSchema=p,e.AddressSchema=w,e.AddressSchemaOrError=x,e.AvailableVsCurrenciesSchema=F,e.AvailableVsCurrenciesSchemaOrError=I,e.BackendInfoSchema=i,e.BalanceHistoryArraySchema=z,e.BalanceHistoryArraySchemaOrError=M,e.BalanceHistorySchema=R,e.BlockInfoSchema=B,e.BlockSchema=E,e.BlockSchemaOrError=A,e.Blockbook=class{baseUrl;fetchOptions;disableTypeValidation;constructor(e,t){this.baseUrl=e.replace(/\/+$/,""),this.fetchOptions=t?.fetchOptions,this.disableTypeValidation=t?.disableTypeValidation}async getStatus(){const e=r.compile(a);return K(`${this.baseUrl}/api/v2`,this.fetchOptions,e)}async getBlockHash(e){const t=this.disableTypeValidation?void 0:r.compile(o);return K(`${this.baseUrl}/api/v2/block-index/${e}`,this.fetchOptions,t)}async getTransaction(e,t){const i=this.disableTypeValidation?void 0:r.compile(T),s=await K(`${this.baseUrl}/api/v2/tx/${e}${L({spending:t})}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getTransactionSpecific(e){const t=this.disableTypeValidation?void 0:r.compile({type:"object"});return K(`${this.baseUrl}/api/v2/tx-specific/${e}`,this.fetchOptions,t)}async getAddress(e,t){const i=this.disableTypeValidation?void 0:r.compile(x),s=await K(`${this.baseUrl}/api/v2/address/${e}${L(t)}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getXpub(e,t){const i=this.disableTypeValidation?void 0:r.compile(x),s=await K(`${this.baseUrl}/api/v2/xpub/${e}${L(t)}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getUtxo(e,t){const i=this.disableTypeValidation?void 0:r.compile(O),s=await K(`${this.baseUrl}/api/v2/utxo/${e}${L(t)}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getBlock(e,t){const i=this.disableTypeValidation?void 0:r.compile(A),s=await K(`${this.baseUrl}/api/v2/block/${e}${L({page:t})}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getRawBlock(e){const t=this.disableTypeValidation?void 0:r.compile(V),{hex:i,error:s}=await K(`${this.baseUrl}/api/v2/rawblock/${e}`,this.fetchOptions,t);if(s)throw new Error(s);return i}async sendTransaction(e){const t=this.disableTypeValidation?void 0:r.compile(U),{result:i,error:s}=await K(`${this.baseUrl}/api/v2/sendtx/`,{...this.fetchOptions,method:"POST",headers:{...this.fetchOptions?.headers??{},"Content-Type":"text/plain"},body:e},t);if(s)throw new Error(s?.message||JSON.stringify(s));return i}async getTickersList(e){const t=this.disableTypeValidation?void 0:r.compile(I),i=await K(`${this.baseUrl}/api/v2/tickers-list${L({timestamp:e})}`,this.fetchOptions,t);if(i?.error)throw new Error(i?.error);return i}async getTickers(e,t){const i=this.disableTypeValidation?void 0:r.compile(C),s=await K(`${this.baseUrl}/api/v2/tickers${L({currency:e,timestamp:t})}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async getBalanceHistory(e,t){const i=this.disableTypeValidation?void 0:r.compile(M),s=await K(`${this.baseUrl}/api/v2/balancehistory/${e}${L(t)}`,this.fetchOptions,i);if(s?.error)throw new Error(s?.error);return s}async estimateFee(e=1){const t=this.disableTypeValidation?void 0:r.compile(G),{result:i,error:s}=await K(`${this.baseUrl}/api/v2/estimatefee/${e}`,this.fetchOptions,t);if(s)throw new Error(s);return i}},e.BlockbookInfoSchema=n,e.BlocksSchema=$,e.ContractInfoSchema=k,e.DEFAULT_TIMEOUT=6e4,e.ErrorSchema=f,e.EstimateFeesSchema=D,e.EstimateFeesSchemaOrError=G,e.EthereumInternalTransferSchema=y,e.EthereumParsedInputDataSchema=m,e.EthereumParsedInputParamSchema=c,e.EthereumSpecificSchema=l,e.FeeStatsSchema={type:"object",properties:{txCount:{type:"number"},totalFeesSat:{type:"string"},averageFeePerKb:{type:"number"},decilesFeePerKb:{type:"array",items:{type:"number"}}},required:["txCount","totalFeesSat","averageFeePerKb","decilesFeePerKb"]},e.FiatTickerSchema=H,e.FiatTickerSchemaOrError=C,e.GetBlockHashSchema=o,e.InternalStateColumnSchema=s,e.MultiTokenValueSchema=u,e.RawBlockSchema=P,e.RawBlockSchemaOrError=V,e.SendTxSchema=q,e.SendTxSchemaOrError=U,e.StakingPoolSchema=S,e.SystemInfoSchema=a,e.TokenSchema=v,e.TokenTransferSchema=b,e.TxSchema=h,e.TxSchemaOrError=T,e.UtxoArraySchemaOrError=O,e.UtxoSchema=j,e.VinSchema=g,e.VoutSchema=d,e.ajv=r,e.fetchAndValidate=K,e.sleep=function(e){return new Promise(t=>setTimeout(t,e))},e.toQueryString=L});