UNPKG

@swipewallet/venus-js

Version:

A JavaScript SDK for Ethereum and the Venus Protocol.

200 lines 6.52 kB
"use strict"; /** * @file API * @desc These methods facilitate HTTP requests to the Venus API. */ exports.__esModule = true; exports.governance = exports.marketHistory = exports.vToken = exports.account = void 0; var util_1 = require("./util"); // import { version } from '../package.json'; // let userPlatform; // try { // if (typeof document !== 'undefined') { // userPlatform = 'web'; // } else if ( // typeof navigator !== 'undefined' && // navigator.product === 'ReactNative' // ) { // userPlatform = 'react-native'; // } else if ( // typeof navigator !== 'undefined' && // navigator.userAgent.toLowerCase().indexOf('electron') > -1 // ) { // userPlatform = 'electron-js'; // } else { // userPlatform = 'node-js'; // } // } catch (e) { // userPlatform = 'unknown'; // } /** * Makes a request to the AccountService API. The Account API retrieves * information for various accounts which have interacted with the protocol. * For more details, see the Venus API documentation. * * @param {object} options A JavaScript object of API request parameters. * * @returns {object} Returns the HTTP response body or error. * * @example * * ``` * (async function() { * const account = await Venus.api.account({ * "addresses": "0xB61C5971d9c0472befceFfbE662555B78284c307", * "network": "testnet" * }); * * let sxpBorrowBalance = 0; * if (Object.isExtensible(account) && account.accounts) { * account.accounts.forEach((acc) => { * acc.tokens.forEach((tok) => { * if (tok.symbol === Venus.vSXP) { * sxpBorrowBalance = +tok.borrow_balance_underlying.value; * } * }); * }); * } * * console.log('sxpBorrowBalance', sxpBorrowBalance); * })().catch(console.error); * ``` */ // TODO -- this will be updated when api is ready function account(options) { return queryApi(options, 'account', '/api/v2/account'); } exports.account = account; /** * Makes a request to the CTokenService API. The vToken API retrieves * information about vToken contract interaction. For more details, see the * Venus API documentation. * * @param {object} options A JavaScript object of API request parameters. * * @returns {object} Returns the HTTP response body or error. * * @example * * ``` * (async function() { * const vSxpData = await Venus.api.vToken({ * "addresses": Venus.util.getAddress(Venus.vSXP) * }); * * console.log('vSxpData', vSxpData); // JavaScript Object * })().catch(console.error); * ``` */ function vToken(options) { return queryApi(options, 'vToken', '/api/vtoken'); } exports.vToken = vToken; /** * Makes a request to the MarketHistoryService API. The market history service * retrieves information about a market. For more details, see the Venus * API documentation. * * @param {object} options A JavaScript object of API request parameters. * * @returns {object} Returns the HTTP response body or error. * * @example * * ``` * (async function() { * const vUsdcMarketData = await Venus.api.marketHistory({ * "asset": Venus.util.getAddress(Venus.vUSDC), * "min_block_timestamp": 1559339900, * "max_block_timestamp": 1598320674, * "num_buckets": 10, * }); * * console.log('vUsdcMarketData', vUsdcMarketData); // JavaScript Object * })().catch(console.error); * ``` */ function marketHistory(options) { // return queryApi(options, 'Market History', '/api/v2/market_history/graph'); return queryApi(options, 'Market History', '/api/market_history/graph'); } exports.marketHistory = marketHistory; /** * Makes a request to the GovernanceService API. The Governance Service includes * three endpoints to retrieve information about COMP accounts. For more * details, see the Venus API documentation. * * @param {object} options A JavaScript object of API request parameters. * @param {string} endpoint A string of the name of the corresponding governance * service endpoint. Valid values are `proposals`, `voteReceipts`, or * `accounts`. * * @returns {object} Returns the HTTP response body or error. * * @example * * ``` * (async function() { * const proposal = await Venus.api.governance( * { "proposal_ids": [ 20 ] }, 'proposals' * ); * * console.log('proposal', proposal); // JavaScript Object * })().catch(console.error); * ``` */ function governance(options, endpoint) { if (endpoint === 'proposals') { // endpoint = '/api/v2/governance/proposals'; endpoint = '/api/governance/proposals'; } else if (endpoint === 'voteReceipts') { // endpoint = '/api/v2/governance/proposal_vote_receipts'; endpoint = '/api/governance/proposal_vote_receipts'; } else { // endpoint = '/api/v2/governance/accounts'; endpoint = '/api/governance/accounts'; } return queryApi(options, 'GovernanceService', endpoint); } exports.governance = governance; function queryApi(options, name, path) { return new Promise(function (resolve, reject) { var errorPrefix = "Venus [api] [" + name + "] | "; var responseCode, responseMessage; // TODO -- api service endpoint should be updated. var hostname = 'https://mainnetapi.venus.io'; if (options && (options.network === 'testnet')) hostname = 'https://testnetapi.venus.io'; util_1.request({ hostname: hostname, path: path, method: 'POST', headers: { 'Content-type': 'application/json' }, body: options }).then(function (response) { responseCode = response.status; responseMessage = response.statusText; var responseBody = JSON.parse(response.body); if (responseCode >= 200 && responseCode <= 299) { resolve(responseBody); } else { throw 'Invalid request made to the Venus API.'; } })["catch"](function (error) { var errorMessage = ''; if (error.name === 'SyntaxError') { errorMessage = errorPrefix + "Unable to parse response body."; } else { errorMessage = errorPrefix + error.toString(); } reject({ error: errorMessage, responseCode: responseCode, responseMessage: responseMessage }); }); }); } //# sourceMappingURL=api.js.map