first commit

This commit is contained in:
Francois Klieber committed 2021-06-06 20:25:14 +02:00
commit aa7869eb33
386 files changed
+69375

No files matched your search

@@ -0,0 +1,51 @@
const _ = require('lodash');
const fs = require('fs');
const request = require('request-promise');
const Promise = require('bluebird');
let getOrderMinSize = currency => {
if (currency === 'BTC') return 0.001;
else if (currency === 'ETH') return 0.01;
else if (currency === 'USDT') return 10;
else return 1;
};
const options = {
url: 'https://www.binance.com/exchange/public/product',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
};
request(options)
.then(body => {
if (!body && !body.data) {
throw new Error('Unable to fetch product list, response was empty');
}
let assets = _.uniqBy(_.map(body.data, market => market.baseAsset));
let currencies = _.uniqBy(_.map(body.data, market => market.quoteAsset));
let pairs = _.map(body.data, market => {
return {
pair: [market.quoteAsset, market.baseAsset],
minimalOrder: {
amount: parseFloat(market.minTrade),
price: parseFloat(market.tickSize),
order: getOrderMinSize(market.quoteAsset),
},
};
});
return { assets: assets, currencies: currencies, markets: pairs };
})
.then(markets => {
fs.writeFileSync('../../wrappers/binance-markets.json', JSON.stringify(markets, null, 2));
console.log(`Done writing Binance market data`);
})
.catch(err => {
console.log(`Couldn't import products from Binance`);
console.log(err);
});
@@ -0,0 +1,54 @@
const _ = require('lodash');
const fs = require('fs');
const request = require('request-promise');
const Promise = require('bluebird');
request({
url: 'https://api.bitfinex.com/v1/symbols_details',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
})
.then(body => {
if (!body) {
throw new Error('Unable to fetch list of assets, response was empty');
}
return body;
})
.then(results => {
let assets = _.uniq(_.map(results, market => {
return market.pair.substring(0, 3).toUpperCase();
}));
let currencies = _.uniq(_.map(results, market => {
return market.pair.substring(3, 6).toUpperCase();
}));
let markets = _.map(results, market => {
return {
pair: [
market.pair.substring(3, 6).toUpperCase(),
market.pair.substring(0, 3).toUpperCase()
],
minimalOrder: {
amount: market.minimum_order_size,
unit: 'asset',
},
};
});
return { assets: assets, currencies: currencies, markets: markets };
})
.then(markets => {
fs.writeFileSync('../../wrappers/bitfinex-markets.json', JSON.stringify(markets, null, 2));
console.log(`Done writing Bitfinex market data`);
})
.catch(err => {
console.log(`Couldn't import products from Bitfinex`);
console.log(err);
});
@@ -0,0 +1,54 @@
const _ = require('lodash');
const fs = require('fs');
const request = require('request-promise');
const Promise = require('bluebird');
request({
url: 'https://api.pro.coinbase.com/products',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
})
.then(body => {
if (!body) {
throw new Error('Unable to fetch list of assets, response was empty');
}
return body;
})
.then(results => {
let assets = _.uniq(_.map(results, market => {
return market.base_currency.toUpperCase();
}));
let currencies = _.uniq(_.map(results, market => {
return market.quote_currency.toUpperCase();
}));
let markets = _.map(results, market => {
return {
pair: [
market.quote_currency.toUpperCase(),
market.base_currency.toUpperCase()
],
minimalOrder: {
amount: market.base_min_size,
unit: 'asset',
},
};
});
return { assets: assets, currencies: currencies, markets: markets };
})
.then(markets => {
fs.writeFileSync('../../wrappers/coinbase-markets.json', JSON.stringify(markets, null, 2));
console.log(`Done writing Coinbase market data`);
})
.catch(err => {
console.log(`Couldn't import products from Coinbase`);
console.log(err);
});
@@ -0,0 +1,45 @@
const _ = require('lodash');
const fs = require('fs');
const request = require('request-promise');
const Promise = require('bluebird');
const options = {
url: 'https://coinfalcon.com/api/v1/markets',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
};
request(options)
.then(body => {
if (!body && !body.data) {
throw new Error('Unable to fetch product list, response was empty');
}
let assets = _.uniq(_.map(body.data, market => market.name.split('-')[0]));
let currencies = _.uniq(_.map(body.data, market => market.name.split('-')[1]));
let pairs = _.map(body.data, market => {
var currency = market.name.split('-')[1];
var asset = market.name.split('-')[0];
return {
pair: [currency, asset],
minimalOrder: {
amount: parseFloat(market.min_volume),
price: parseFloat(market.min_price),
order: 0.0
},
};
});
return { assets: assets, currencies: currencies, markets: pairs };
})
.then(markets => {
fs.writeFileSync('../../wrappers/coinfalcon-markets.json', JSON.stringify(markets, null, 2));
console.log(`Done writing CoinFalcon market data`);
})
.catch(err => {
console.log(`Couldn't import products from CoinFalcon`);
console.log(err);
});
@@ -0,0 +1,152 @@
const _ = require('lodash');
const fs = require('fs');
const request = require('request-promise');
const Promise = require('bluebird');
// Minimum amounts are not queryable, get them here
// https://support.kraken.com/hc/en-us/articles/205893708-What-is-the-minimum-order-size-
let getMinTradeSize = asset => {
let minTradeSize = 0.01;
switch (asset) {
case 'XREP':
minTradeSize = '0.3'
break;
case 'XXBT':
minTradeSize = '0.002'
break;
case 'BCH':
minTradeSize = '0.002'
break;
case 'ADA':
minTradeSize = '1'
break;
case 'DASH':
minTradeSize = '0.03'
break;
case 'XXDG':
minTradeSize = '3000'
break;
case 'EOS':
minTradeSize = '3.0'
break;
case 'XETH':
minTradeSize = '0.02'
break;
case 'XETC':
minTradeSize = '0.3'
break;
case 'GNO':
minTradeSize = '0.03'
break;
case 'XICN':
minTradeSize = '2'
break;
case 'XLTC':
minTradeSize = '0.1'
break;
case 'XMLN':
minTradeSize = '0.1'
break;
case 'XXMR':
minTradeSize = '0.1'
break;
case 'QTUM':
minTradeSize = '0.1'
break;
case 'XXRP':
minTradeSize = '30'
break;
case 'XXLM':
minTradeSize = '30'
break;
case 'USDT':
minTradeSize = '5'
break;
case 'XTZ':
minTradeSize = '1'
break;
case 'XZEC':
minTradeSize = '0.03'
break;
default:
break;
}
return minTradeSize;
}
let assetPromise = request({
url: 'https://api.kraken.com/0/public/Assets',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
}).then(body => {
if (!body || !body.result) {
throw new Error('Unable to fetch list of assets, response was empty')
} else if (!_.isEmpty(body.error)) {
throw new Error(`Unable to fetch list of assets: ${body.error}`);
}
return body.result;
});
let assetPairsPromise = request({
url: 'https://api.kraken.com/0/public/AssetPairs',
headers: {
Connection: 'keep-alive',
'User-Agent': 'Request-Promise',
},
json: true,
}).then(body => {
if (!body || !body.result) {
throw new Error('Unable to fetch list of assets, response was empty')
} else if (!_.isEmpty(body.error)) {
throw new Error(`Unable to fetch list of assets: ${body.error}`);
}
return body.result;
});
Promise.all([assetPromise, assetPairsPromise])
.then(results => {
let assets = _.uniq(_.map(results[1], market => {
return results[0][market.base].altname;
}));
let currencies = _.uniq(_.map(results[1], market => {
return results[0][market.quote].altname;
}));
let marketKeys = _.filter(_.keys(results[1]), k => { return !k.endsWith('.d'); });
let markets = _.map(marketKeys, k => {
let market = results[1][k];
let asset = results[0][market.base];
let currency = results[0][market.quote];
return {
pair: [currency.altname, asset.altname],
prefixed: [market.quote, market.base],
book: k,
minimalOrder: {
amount: getMinTradeSize(market.base),
unit: 'asset',
},
pricePrecision: market.pair_decimals,
amountPrecision: market.lot_decimals
};
});
return { assets: assets, currencies: currencies, markets: markets };
})
.then(markets => {
fs.writeFileSync('../../wrappers/kraken-markets.json', JSON.stringify(markets, null, 2));
console.log(`Done writing Kraken market data`);
})
.catch(err => {
console.log(`Couldn't import products from Kraken`);
console.log(err);
});