@chainlink/blockcypher
Version:
Chainlink adapter to query BTC address balance from blockcypher.com.
57 lines • 2.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute = exports.inputParams = exports.Name = void 0;
const blockcypher_1 = __importDefault(require("blockcypher"));
const object_path_1 = __importDefault(require("object-path"));
const config_1 = require("../config");
exports.Name = 'balance';
const WARNING_NO_OPERATION = 'No Operation: only btc mainnet/testnet chains are supported by blockcypher adapter';
const WARNING_NO_OPERATION_MISSING_ADDRESS = 'No Operation: address param is missing';
// rewrite chain id for bcypher
const getChainId = (coin, chain) => {
switch (chain) {
case 'mainnet':
return 'main';
case 'testnet':
return coin === 'btc' ? 'test3' : 'test';
}
};
const toBalances = async (config, addresses, confirmations = config_1.DEFAULT_CONFIRMATIONS) => Promise.all(addresses.map(async (addr) => {
if (!addr.address)
return { ...addr, warning: WARNING_NO_OPERATION_MISSING_ADDRESS };
if (!addr.coin)
addr.coin = 'btc';
if (addr.coin !== 'btc')
return { ...addr, warning: WARNING_NO_OPERATION };
if (!addr.chain)
addr.chain = 'mainnet';
if (addr.chain !== 'mainnet' && addr.chain !== 'testnet')
return { ...addr, warning: WARNING_NO_OPERATION };
const chainId = getChainId(addr.coin, addr.chain);
const api = new blockcypher_1.default(addr.coin, chainId, config.apiKey);
const params = { confirmations };
const _getAddrBal = () => new Promise((resolve, reject) => {
api.getAddrBal(addr.address, params, (error, body) => error ? reject(error) : resolve(body));
});
return {
...addr,
balance: (await _getAddrBal()).balance,
};
}));
exports.inputParams = {
dataPath: false,
confirmations: false,
};
// Export function to integrate with Chainlink node
exports.execute = async (config, request, data) => {
const dataPath = data.dataPath || config_1.DEFAULT_DATA_PATH;
const inputData = object_path_1.default.get(request.data, dataPath);
// Check if input data is valid
if (!inputData || !Array.isArray(inputData) || inputData.length === 0)
throw Error(`Input, at '${dataPath}' path, must be a non-empty array.`);
return await toBalances(config, inputData, data.confirmations);
};
//# sourceMappingURL=balance.js.map