ccxt-rest
Version:
Open Source Unified REST API of 100+ Crypto Exchange Sites
72 lines (64 loc) • 2.49 kB
JavaScript
const ccxt = require('ccxt')
, db = require('../models')
, Flatted = require('flatted/cjs')
;
const exchangeCache = {}
function _createWhereClause(exchangeName, exchangeId) {
return {
where: {
exchangeId: exchangeId,
exchangeName : exchangeName
}
}
}
function saveOrUpdate(exchangeName, exchangeId, constructorParameters, exchange) {
exchangeCache[exchangeName] = exchangeCache[exchangeName] || {}
exchangeCache[exchangeName][exchangeId] = exchange
const params = Flatted.stringify(constructorParameters)
return db.Exchange.create({exchangeName:exchangeName, exchangeId:exchangeId, params:params})
}
function destroy(exchangeName, exchangeId) {
return findByExchangeNameAndExchangeId(exchangeName, exchangeId)
.then(exchange => {
return db.Exchange.destroy(_createWhereClause(exchangeName, exchangeId))
.then(() => {
delete exchangeCache[exchangeName][exchangeId]
return exchange
})
});
}
async function getPublicExchange(exchangeName) {
const existingPublicExchange = await findByExchangeNameAndExchangeId(exchangeName, '');
if (existingPublicExchange) {
existingPublicExchange.id = ''
return existingPublicExchange
} else {
const params = {enableRateLimit:true}
const newPublicExchange = new ccxt[exchangeName](params)
newPublicExchange.id = ''
await saveOrUpdate(exchangeName, '', params, newPublicExchange)
return newPublicExchange
}
}
async function findByExchangeNameAndExchangeId(exchangeName, exchangeId) {
exchangeCache[exchangeName] = exchangeCache[exchangeName] || {}
if (exchangeCache[exchangeName][exchangeId]) {
return exchangeCache[exchangeName][exchangeId]
} else {
return db.Exchange.findOne(_createWhereClause(exchangeName, exchangeId))
.then(exchangeData => {
if (exchangeData) {
exchangeCache[exchangeName][exchangeId] = new ccxt[exchangeName](exchangeData.params.toString())
return exchangeCache[exchangeName][exchangeId]
} else {
return null;
}
})
}
}
module.exports = {
findByExchangeNameAndExchangeId : findByExchangeNameAndExchangeId,
destroy : destroy,
getPublicExchange : getPublicExchange,
saveOrUpdate : saveOrUpdate
}