send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
86 lines • 7.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Blockstream = void 0;
const axios_1 = __importDefault(require("axios"));
const utxo_1 = require("../../lib/utxo");
const timeout_1 = require("./timeout");
const getAPIUrl = (testnet) => `https://blockstream.info/${testnet ? "testnet/" : ""}api`;
const fetchUTXO = (testnet) => async (txHash, vOut) => {
const apiUrl = getAPIUrl(testnet);
const utxo = (await axios_1.default.get(`${apiUrl}/tx/${txHash}`, {
timeout: timeout_1.DEFAULT_TIMEOUT,
})).data;
const heightResponse = (await axios_1.default.get(`${apiUrl}/blocks/tip/height`, {
timeout: timeout_1.DEFAULT_TIMEOUT,
})).data;
const confirmations = utxo.status.confirmed
? Math.max(1 + parseInt(heightResponse, 10) - utxo.status.block_height, 0)
: 0;
return {
txHash,
amount: utxo.vout[vOut].value,
vOut,
confirmations,
};
};
const fetchUTXOs = (testnet) => async (address, confirmations) => {
const apiUrl = getAPIUrl(testnet);
const response = await axios_1.default.get(`${apiUrl}/address/${address}/utxo`, { timeout: timeout_1.DEFAULT_TIMEOUT });
const heightResponse = await axios_1.default.get(`${apiUrl}/blocks/tip/height`, { timeout: timeout_1.DEFAULT_TIMEOUT });
return response.data
.map((utxo) => ({
txHash: utxo.txid,
amount: utxo.value,
vOut: utxo.vout,
confirmations: utxo.status.confirmed
? 1 +
parseInt(heightResponse.data, 10) -
utxo.status.block_height
: 0,
}))
.filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations)
.sort(utxo_1.sortUTXOs);
};
const fetchTXs = (testnet) => async (address, confirmations = 0, limit = 0) => {
const apiUrl = getAPIUrl(testnet);
const response = await axios_1.default.get(`${apiUrl}/address/${address}/txs`, { timeout: timeout_1.DEFAULT_TIMEOUT });
const heightResponse = await axios_1.default.get(`${apiUrl}/blocks/tip/height`, { timeout: timeout_1.DEFAULT_TIMEOUT });
const received = [];
for (const tx of response.data) {
for (let i = 0; i < tx.vout.length; i++) {
const vout = tx.vout[i];
if (vout.scriptpubkey_address === address) {
received.push({
txHash: tx.txid,
amount: vout.value,
vOut: i,
confirmations: tx.status.confirmed
? 1 +
parseInt(heightResponse.data, 10) -
tx.status.block_height
: 0,
});
}
}
}
return received
.filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations)
.sort(utxo_1.sortUTXOs);
};
const broadcastTransaction = (testnet) => async (txHex) => {
const apiUrl = getAPIUrl(testnet);
const response = await axios_1.default.post(`${apiUrl}/tx`, txHex, {
timeout: timeout_1.DEFAULT_TIMEOUT,
});
return response.data;
};
exports.Blockstream = {
fetchUTXO,
fetchUTXOs,
broadcastTransaction,
fetchTXs,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tzdHJlYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL2FwaXMvYmxvY2tzdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBRTFCLHlDQUFpRDtBQUNqRCx1Q0FBNEM7QUE0QzVDLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFLENBQ25DLDRCQUE0QixPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7QUFFL0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQ3pDLE1BQWMsRUFDZCxJQUFZLEVBQ0MsRUFBRTtJQUNmLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVsQyxNQUFNLElBQUksR0FBRyxDQUNULE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBZ0IsR0FBRyxNQUFNLE9BQU8sTUFBTSxFQUFFLEVBQUU7UUFDckQsT0FBTyxFQUFFLHlCQUFlO0tBQzNCLENBQUMsQ0FDTCxDQUFDLElBQUksQ0FBQztJQUVQLE1BQU0sY0FBYyxHQUFHLENBQ25CLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBUyxHQUFHLE1BQU0sb0JBQW9CLEVBQUU7UUFDbkQsT0FBTyxFQUFFLHlCQUFlO0tBQzNCLENBQUMsQ0FDTCxDQUFDLElBQUksQ0FBQztJQUVQLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztRQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDSixDQUFDLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFDM0QsQ0FBQyxDQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVSLE9BQU87UUFDSCxNQUFNO1FBQ04sTUFBTSxF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