chore: use monorepo organization
This commit is contained in:
parent
deaf7d6ecc
commit
a687827f7e
1099 changed files with 8184 additions and 11535 deletions
29
packages/server/lib/plugins/ticker/bitpay.js
Normal file
29
packages/server/lib/plugins/ticker/bitpay.js
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
const axios = require('axios')
|
||||
const { COINS } = require('@lamassu/coins')
|
||||
|
||||
const BN = require('../../bn')
|
||||
const { BTC, BCH, LN } = COINS
|
||||
|
||||
const CRYPTO = [BTC, BCH, LN]
|
||||
const FIAT = 'ALL_CURRENCIES'
|
||||
|
||||
function ticker (fiatCode, cryptoCode) {
|
||||
return axios.get('https://bitpay.com/rates/' + cryptoCode + '/' + fiatCode)
|
||||
.then(r => {
|
||||
const data = r.data.data
|
||||
const price = new BN(data.rate.toString())
|
||||
return {
|
||||
rates: {
|
||||
ask: price,
|
||||
bid: price
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ticker,
|
||||
name: 'BitPay',
|
||||
CRYPTO,
|
||||
FIAT
|
||||
}
|
||||
70
packages/server/lib/plugins/ticker/ccxt.js
Normal file
70
packages/server/lib/plugins/ticker/ccxt.js
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
const ccxt = require('ccxt')
|
||||
|
||||
const BN = require('../../bn')
|
||||
const { buildMarket, verifyFiatSupport, defaultFiatMarket } = require('../common/ccxt')
|
||||
const { getRate } = require('../../../lib/forex')
|
||||
|
||||
const RETRIES = 2
|
||||
|
||||
const tickerObjects = {}
|
||||
|
||||
// This is probably fixed on upstream ccxt
|
||||
// but we need to udpate node to get on the latest version
|
||||
const sanityCheckRates = (ask, bid, tickerName) => {
|
||||
if (new BN(0).eq(ask) || new BN(0).eq(bid)) {
|
||||
throw new Error(`Failure fetching rates for ${tickerName}`)
|
||||
}
|
||||
}
|
||||
|
||||
function ticker (fiatCode, cryptoCode, tickerName) {
|
||||
if (!tickerObjects[tickerName]) {
|
||||
tickerObjects[tickerName] = new ccxt[tickerName]({
|
||||
timeout: 3000,
|
||||
enableRateLimit: false,
|
||||
})
|
||||
}
|
||||
|
||||
const ticker = tickerObjects[tickerName]
|
||||
|
||||
if (verifyFiatSupport(fiatCode, tickerName)) {
|
||||
return getCurrencyRates(ticker, fiatCode, cryptoCode)
|
||||
}
|
||||
|
||||
return getRate(RETRIES, tickerName, defaultFiatMarket(tickerName))
|
||||
.then(({ fxRate }) => {
|
||||
try {
|
||||
return getCurrencyRates(ticker, defaultFiatMarket(tickerName), cryptoCode)
|
||||
.then(res => ({
|
||||
rates: {
|
||||
ask: res.rates.ask.times(fxRate),
|
||||
bid: res.rates.bid.times(fxRate)
|
||||
}
|
||||
}))
|
||||
} catch (e) {
|
||||
return Promise.reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getCurrencyRates (ticker, fiatCode, cryptoCode) {
|
||||
try {
|
||||
if (!ticker.has['fetchTicker']) {
|
||||
throw new Error('Ticker not available')
|
||||
}
|
||||
const symbol = buildMarket(fiatCode, cryptoCode, ticker.id)
|
||||
return ticker.fetchTicker(symbol)
|
||||
.then(res => {
|
||||
sanityCheckRates(res.ask, res.bid, cryptoCode)
|
||||
return {
|
||||
rates: {
|
||||
ask: new BN(res.ask),
|
||||
bid: new BN(res.bid)
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
return Promise.reject(e)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { ticker }
|
||||
12
packages/server/lib/plugins/ticker/mock-ticker.js
Normal file
12
packages/server/lib/plugins/ticker/mock-ticker.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
const BN = require('../../bn')
|
||||
|
||||
function ticker (fiatCode, cryptoCode) {
|
||||
return Promise.resolve({
|
||||
rates: {
|
||||
ask: new BN(105),
|
||||
bid: new BN(100)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {ticker}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
const https = require('https')
|
||||
const axios = require('axios').create({
|
||||
// TODO: get rejectUnauthorized true to work
|
||||
baseURL: `${process.env.TICKER_URL}/api/rates/`,
|
||||
httpsAgent: new https.Agent({
|
||||
rejectUnauthorized: false
|
||||
})
|
||||
})
|
||||
|
||||
const BN = require('../../../bn')
|
||||
|
||||
function ticker (account, fiatCode, cryptoCode) {
|
||||
return axios.get(`${cryptoCode}/${fiatCode}`)
|
||||
.then(({ data }) => {
|
||||
if (data.error) throw new Error(JSON.stringify(data.error))
|
||||
return {
|
||||
rates: {
|
||||
ask: BN(data.ask),
|
||||
bid: BN(data.bid),
|
||||
signature: data.signature
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ticker
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue