UNPKG

send-crypto

Version:

A minimal JavaScript library / wallet for sending crypto assets

74 lines 6.94 kB
import axios from "axios"; import { fixUTXO, fixUTXOs, fixValue, sortUTXOs } from "../../lib/utxo"; import { DEFAULT_TIMEOUT } from "./timeout"; const endpoint = (testnet) => testnet ? "https://trest.bitcoin.com/v2/" : "https://rest.bitcoin.com/v2/"; const endpointV2 = (testnet) => testnet ? "https://explorer-tbch.api.bitcoin.com/tbch/v1" : "https://explorer.api.bitcoin.com/bch/v1"; const fetchUTXO = (testnet) => async (txHash, vOut) => { const url = `${endpointV2(testnet)}/tx/${txHash}`; const response = await axios.get(`${url}`, { timeout: DEFAULT_TIMEOUT, }); const utxo = response.data; return fixUTXO({ txHash, amount: parseFloat(utxo.vout[vOut].value), // script_hex: utxo.scriptPubKey, vOut, confirmations: utxo.confirmations, }, 8); }; const fetchUTXOs = (testnet) => async (address, confirmations) => { const url = `${endpointV2(testnet)}/addr/${address}/utxo`; const response = await axios.get(url, { timeout: DEFAULT_TIMEOUT, }); return fixUTXOs(response.data .map((utxo) => ({ txHash: utxo.txid, amount: utxo.amount, // script_hex: utxo.scriptPubKey, vOut: utxo.vout, confirmations: utxo.confirmations, })) .filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations), 8).sort(sortUTXOs); }; const fetchTXs = (testnet) => async (address, confirmations) => { const url = `${endpoint(testnet).replace(/\/$/, "")}/address/transactions/${address}`; const { data } = await axios.get(url, { timeout: DEFAULT_TIMEOUT, }); const received = []; for (const tx of data.txs) { for (let i = 0; i < tx.vout.length; i++) { const vout = tx.vout[i]; if (vout.scriptPubKey.addresses.indexOf(address) >= 0) { received.push({ txHash: tx.txid, amount: fixValue(parseFloat(vout.value), 8), vOut: i, confirmations: tx.confirmations, }); } } } return received .filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations) .sort(sortUTXOs); }; export const broadcastTransaction = (testnet) => async (txHex) => { const url = `${endpoint(testnet).replace(/\/$/, "")}/rawtransactions/sendRawTransaction`; const response = await axios.post(url, { hexes: [txHex] }, { timeout: DEFAULT_TIMEOUT }); if (response.data.error) { throw new Error(response.data.error); } return response.data[0]; }; export const BitcoinDotCom = { fetchUTXO, fetchUTXOs, fetchTXs, broadcastTransaction, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkRvdENvbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vYXBpcy9iaXRjb2luRG90Q29tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztBQUUvRSxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUNwQyxPQUFPO0lBQ0gsQ0FBQyxDQUFDLCtDQUErQztJQUNqRCxDQUFDLENBQUMseUNBQXlDLENBQUM7QUFFcEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQ3pDLE1BQWMsRUFDZCxJQUFZLEVBQ0MsRUFBRTtJQUNmLE1BQU0sR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBRWxELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBa0IsR0FBRyxHQUFHLEVBQUUsRUFBRTtRQUN4RCxPQUFPLEVBQUUsZUFBZTtLQUMzQixDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBRTNCLE9BQU8sT0FBTyxDQUNWO1FBQ0ksTUFBTTtRQUNOLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekMsaUNBQWlDO1FBQ2pDLElB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