send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
83 lines • 7.4 kB
JavaScript
import axios from "axios";
import https from "https";
import { fixUTXO, fixValue, sortUTXOs } from "../../lib/utxo";
import { DEFAULT_TIMEOUT } from "./timeout";
const fetchUTXOs = (insightURL) => async (address, confirmations) => {
const url = `${insightURL.replace(/\/$/, "")}/addr/${address}/utxo`;
const response = await axios.get(url, {
// TODO: Remove when certificate is fixed.
httpsAgent: new https.Agent({
rejectUnauthorized: false,
}),
timeout: DEFAULT_TIMEOUT,
});
const data = typeof response.data === "string"
? JSON.parse(response.data)
: response.data;
return data
.map((utxo) => ({
txHash: utxo.txid,
amount: utxo.satoshis || fixValue(utxo.amount, 8),
// script_hex: utxo.scriptPubKey,
vOut: utxo.vout,
confirmations: utxo.confirmations,
}))
.filter((utxo) => confirmations === 0 || utxo.confirmations >= confirmations)
.sort(sortUTXOs);
};
const fetchTXs = (insightURL) => async (address, confirmations) => {
const url = `${insightURL.replace(/\/$/, "")}/txs/?address=${address}`;
const response = await axios.get(url, {
// TODO: Remove when certificate is fixed.
httpsAgent: new https.Agent({
rejectUnauthorized: false,
}),
timeout: DEFAULT_TIMEOUT,
});
const data = typeof response.data === "string"
? JSON.parse(response.data)
: response.data;
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);
};
const fetchUTXO = (insightURL) => async (txHash, vOut) => {
const url = `${insightURL.replace(/\/$/, "")}/tx/${txHash}`;
const tx = (await axios.get(url, { timeout: DEFAULT_TIMEOUT }))
.data;
return fixUTXO({
txHash,
amount: parseFloat(tx.vout[vOut].value),
vOut,
confirmations: tx.confirmations,
}, 8);
};
export const broadcastTransaction = (insightURL) => async (txHex) => {
const url = `${insightURL.replace(/\/$/, "")}/tx/send`;
const response = await axios.post(url, { rawtx: txHex }, { timeout: DEFAULT_TIMEOUT });
if (response.data.error) {
throw new Error(response.data.error);
}
return response.data.txid;
};
export const Insight = {
fetchUTXO,
fetchUTXOs,
fetchTXs,
broadcastTransaction,
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vYXBpcy9pbnNpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFDNUMsT0FBZSxFQUNmLGFBQXFCLEVBQ0csRUFBRTtJQUMxQixNQUFNLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLE9BQU8sT0FBTyxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBa0IsR0FBRyxFQUFFO1FBQ25ELDBDQUEwQztRQUMxQyxVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3hCLGtCQUFrQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztRQUNGLE9BQU8sRUFBRSxlQUFlO0tBQzNCLENBQUMsQ0FBQztJQUVILE1BQU0sSUFBSSxHQUNOLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRO1FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFeEIsT0FBTyxJQUFJO1NBQ04sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMs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