UNPKG

@chainlink/blockcypher

Version:

Chainlink adapter to query BTC address balance from blockcypher.com.

57 lines 2.5 kB
"use strict"; 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