mirror of
https://github.com/fullstack-cash/bch-api.git
synced 2026-09-22 01:02:05 -07:00
feat(price): Adding price endpoint
This commit is contained in:
@@ -39,6 +39,7 @@ const BlockbookV3 = require('./routes/v3/blockbook')
|
||||
const Ninsight = require('./routes/v3/ninsight')
|
||||
const ElectrumXV3 = require('./routes/v3/electrumx')
|
||||
const EncryptionV3 = require('./routes/v3/encryption')
|
||||
const PriceV3 = require('./routes/v3/price')
|
||||
|
||||
require('dotenv').config()
|
||||
|
||||
@@ -52,6 +53,7 @@ const blockbookV3 = new BlockbookV3()
|
||||
const electrumxv3 = new ElectrumXV3()
|
||||
electrumxv3.connect()
|
||||
const encryptionv3 = new EncryptionV3()
|
||||
const pricev3 = new PriceV3()
|
||||
|
||||
const app = express()
|
||||
|
||||
@@ -121,6 +123,7 @@ app.use(`/${v3prefix}/` + 'xpub', xpubV3.router)
|
||||
app.use(`/${v3prefix}/` + 'blockbook', blockbookV3.router)
|
||||
app.use(`/${v3prefix}/` + 'electrumx', electrumxv3.router)
|
||||
app.use(`/${v3prefix}/` + 'encryption', encryptionv3.router)
|
||||
app.use(`/${v3prefix}/` + 'price', pricev3.router)
|
||||
|
||||
const ninsight = new Ninsight()
|
||||
app.use(`/${v3prefix}/` + 'ninsight', ninsight.router)
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
This price route is really just a wrapper for another API price endpoint.
|
||||
The main reason for hosting this price wrapper is so that the price can
|
||||
be accessible over Tor. Tor is typically blocked by other REST API servers.
|
||||
*/
|
||||
|
||||
'use strict'
|
||||
|
||||
const express = require('express')
|
||||
const axios = require('axios')
|
||||
const wlogger = require('../../util/winston-logging')
|
||||
const util = require('util')
|
||||
|
||||
const RouteUtils = require('../../util/route-utils')
|
||||
const routeUtils = new RouteUtils()
|
||||
|
||||
let _this // Global context for 'this' instance of the Class.
|
||||
|
||||
class Price {
|
||||
constructor () {
|
||||
_this = this
|
||||
|
||||
this.axios = axios
|
||||
this.routeUtils = routeUtils
|
||||
|
||||
this.priceUrl = 'https://api.coinbase.com/v2/exchange-rates?currency=BCH'
|
||||
|
||||
this.router = express.Router()
|
||||
this.router.get('/', _this.root)
|
||||
this.router.get('/usd', _this.getUSD)
|
||||
this.router.get('/rates', _this.getBCHRate)
|
||||
}
|
||||
|
||||
// DRY error handler.
|
||||
errorHandler (err, res) {
|
||||
// Attempt to decode the error message.
|
||||
const { msg, status } = _this.routeUtils.decodeError(err)
|
||||
if (msg) {
|
||||
res.status(status)
|
||||
return res.json({ error: msg })
|
||||
}
|
||||
|
||||
res.status(500)
|
||||
return res.json({ error: util.inspect(err) })
|
||||
}
|
||||
|
||||
// Root API endpoint. Simply acknowledges that it exists.
|
||||
root (req, res, next) {
|
||||
return res.json({ status: 'price' })
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} /price/usd Get the USD price of BCH
|
||||
* @apiName Get the USD price of BCH
|
||||
* @apiGroup Price
|
||||
* @apiDescription Get the USD price of BCH
|
||||
*
|
||||
*
|
||||
* @apiExample Example usage:
|
||||
* curl -X GET "https://api.fullstack.cash/v3/price/usd" -H "accept: application/json"
|
||||
*
|
||||
*/
|
||||
async getUSD (req, res, next) {
|
||||
try {
|
||||
// Request options
|
||||
const opt = {
|
||||
method: 'get',
|
||||
baseURL: _this.priceUrl,
|
||||
timeout: 15000
|
||||
}
|
||||
|
||||
const response = await axios.request(opt)
|
||||
// console.log(`response.data: ${JSON.stringify(response.data, null, 2)}`)
|
||||
|
||||
return res.json({ usd: Number(response.data.data.rates.USD) })
|
||||
} catch (err) {
|
||||
// Write out error to error log.
|
||||
wlogger.error('Error in price.js/getUSD().', err)
|
||||
|
||||
return _this.errorHandler(err, res)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} /price/usd Get rates for several different currencies
|
||||
* @apiName Get rates for several different currencies
|
||||
* @apiGroup Price
|
||||
* @apiDescription Get rates for several different currencies
|
||||
*
|
||||
*
|
||||
* @apiExample Example usage:
|
||||
* curl -X GET "https://api.fullstack.cash/v3/price/rates" -H "accept: application/json"
|
||||
*
|
||||
*/
|
||||
// Get rates for several different currencies
|
||||
async getBCHRate (req, res, next) {
|
||||
try {
|
||||
// Request options
|
||||
const opt = {
|
||||
method: 'get',
|
||||
baseURL: _this.priceUrl,
|
||||
timeout: 15000
|
||||
}
|
||||
|
||||
const response = await axios.request(opt)
|
||||
// console.log(`response.data: ${JSON.stringify(response.data, null, 2)}`)
|
||||
|
||||
return res.json(response.data.data.rates)
|
||||
} catch (err) {
|
||||
// Write out error to error log.
|
||||
wlogger.error('Error in price.js/getUSD().', err)
|
||||
|
||||
return _this.errorHandler(err, res)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Price
|
||||
Reference in New Issue
Block a user