Use 'request' instead of 'axios' for electrs api requests.
This commit is contained in:
parent
12139fac3a
commit
aa8bccdb8f
@ -13,7 +13,6 @@
|
|||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.19.0",
|
|
||||||
"bitcoin": "^3.0.1",
|
"bitcoin": "^3.0.1",
|
||||||
"compression": "^1.7.3",
|
"compression": "^1.7.3",
|
||||||
"express": "^4.16.3",
|
"express": "^4.16.3",
|
||||||
|
@ -1,185 +1,182 @@
|
|||||||
const config = require('../../../mempool-config.json');
|
const config = require('../../../mempool-config.json');
|
||||||
import { ITransaction, IMempoolInfo, IBlock } from '../../interfaces';
|
import { ITransaction, IMempoolInfo, IBlock } from '../../interfaces';
|
||||||
import { AbstractBitcoinApi } from './bitcoin-api-abstract-factory';
|
import { AbstractBitcoinApi } from './bitcoin-api-abstract-factory';
|
||||||
import axios, { AxiosResponse } from 'axios';
|
import * as request from 'request';
|
||||||
|
|
||||||
class EsploraApi implements AbstractBitcoinApi {
|
class EsploraApi implements AbstractBitcoinApi {
|
||||||
client: any;
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.client = axios.create({
|
|
||||||
baseURL: config.ESPLORA_API_URL,
|
|
||||||
timeout: 15000,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getMempoolInfo(): Promise<IMempoolInfo> {
|
getMempoolInfo(): Promise<IMempoolInfo> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/mempool', { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/mempool');
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
resolve({
|
resolve({
|
||||||
size: response.data.count,
|
size: response.count,
|
||||||
bytes: response.data.vsize,
|
bytes: response.vsize,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
});
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getRawMempool(): Promise<ITransaction['txid'][]> {
|
getRawMempool(): Promise<ITransaction['txid'][]> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/mempool/txids', { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/mempool/txids');
|
if (err) {
|
||||||
resolve(response.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getRawTransaction(txId: string): Promise<ITransaction> {
|
getRawTransaction(txId: string): Promise<ITransaction> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/tx/' + txId, { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/tx/' + txId);
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
response.vsize = Math.round(response.weight / 4);
|
||||||
|
response.fee = response.fee / 100000000;
|
||||||
|
response.blockhash = response.status.block_hash;
|
||||||
|
|
||||||
response.data.vsize = Math.round(response.data.weight / 4);
|
resolve(response);
|
||||||
response.data.fee = response.data.fee / 100000000;
|
});
|
||||||
response.data.blockhash = response.data.status.block_hash;
|
|
||||||
|
|
||||||
resolve(response.data);
|
|
||||||
} catch (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlockCount(): Promise<number> {
|
getBlockCount(): Promise<number> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/blocks/tip/height', { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/blocks/tip/height');
|
if (err) {
|
||||||
resolve(response.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlockAndTransactions(hash: string): Promise<IBlock> {
|
getBlockAndTransactions(hash: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/block/' + hash, { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/block/' + hash);
|
if (err) {
|
||||||
const blockTxs: AxiosResponse = await this.client.get('/block/' + hash + '/txids');
|
reject(err);
|
||||||
|
}
|
||||||
|
request(config.ESPLORA_API_URL + '/block/' + hash + '/txids', { json: true }, (err2, res2, response2) => {
|
||||||
|
if (err2) {
|
||||||
|
reject(err2);
|
||||||
|
}
|
||||||
|
const block = response;
|
||||||
|
block.hash = hash;
|
||||||
|
block.nTx = block.tx_count;
|
||||||
|
block.time = block.timestamp;
|
||||||
|
block.tx = response2;
|
||||||
|
|
||||||
const block = blockInfo.data;
|
resolve(block);
|
||||||
block.hash = hash;
|
});
|
||||||
block.nTx = block.tx_count;
|
});
|
||||||
block.time = block.timestamp;
|
|
||||||
block.tx = blockTxs.data;
|
|
||||||
|
|
||||||
resolve(block);
|
|
||||||
} catch (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlockHash(height: number): Promise<string> {
|
getBlockHash(height: number): Promise<string> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/block-height/' + height, { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/block-height/' + height);
|
if (err) {
|
||||||
resolve(response.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlocks(): Promise<string> {
|
getBlocks(): Promise<string> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/blocks', { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/blocks');
|
if (err) {
|
||||||
resolve(response.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlocksFromHeight(height: number): Promise<string> {
|
getBlocksFromHeight(height: number): Promise<string> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/blocks/' + height, { json: true }, (err, res, response) => {
|
||||||
const response: AxiosResponse = await this.client.get('/blocks/' + height);
|
if (err) {
|
||||||
resolve(response.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlock(hash: string): Promise<IBlock> {
|
getBlock(hash: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/block/' + hash, { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/block/' + hash);
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlockTransactions(hash: string): Promise<IBlock> {
|
getBlockTransactions(hash: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/block/' + hash + '/txs', { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/block/' + hash + '/txs');
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBlockTransactionsFromIndex(hash: string, index: number): Promise<IBlock> {
|
getBlockTransactionsFromIndex(hash: string, index: number): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/block/' + hash + '/txs/' + index, { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/block/' + hash + '/txs/' + index);
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getAddress(address: string): Promise<IBlock> {
|
getAddress(address: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/address/' + address, { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/address/' + address);
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getAddressTransactions(address: string): Promise<IBlock> {
|
getAddressTransactions(address: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/address/' + address + '/txs', { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/address/' + address + '/txs');
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getAddressTransactionsFromLastSeenTxid(address: string, lastSeenTxid: string): Promise<IBlock> {
|
getAddressTransactionsFromLastSeenTxid(address: string, lastSeenTxid: string): Promise<IBlock> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
request(config.ESPLORA_API_URL + '/address/' + address + '/txs/chain/' + lastSeenTxid, { json: true }, (err, res, response) => {
|
||||||
const blockInfo: AxiosResponse = await this.client.get('/address/' + address + '/txs/chain/' + lastSeenTxid);
|
if (err) {
|
||||||
resolve(blockInfo.data);
|
reject(err);
|
||||||
} catch (error) {
|
}
|
||||||
reject(error);
|
resolve(response);
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user