chore: use monorepo organization

This commit is contained in:
Rafael Taranto 2025-05-12 10:52:54 +01:00
parent deaf7d6ecc
commit a687827f7e
1099 changed files with 8184 additions and 11535 deletions

View 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
}

View 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 }

View 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}

View file

@ -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
}