You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.1 KiB
JavaScript

var Promise, bhttp, expireTime, lastRateCheck, lastRates;
Promise = require("bluebird");
bhttp = require("bhttp");
lastRates = null;
lastRateCheck = 0;
expireTime = 5 * 60 * 1000;
module.exports = function(cacheExpiration) {
return Promise["try"](function() {
if (Date.now() > lastRateCheck + expireTime) {
return Promise["try"](function() {
return Promise.all([
bhttp.get("http://api.fixer.io/latest", {
decodeJSON: true
}), bhttp.get("https://blockchain.info/ticker", {
decodeJSON: true
})
]);
}).spread(function(fixerRates, blockchainRates) {
var eurRates;
eurRates = fixerRates.body.rates;
eurRates.BTC = 1 / blockchainRates.body.EUR["15m"];
return eurRates;
}).then(function(rates) {
lastRates = rates;
lastRateCheck = Date.now();
if (cacheExpiration != null) {
expireTime = cacheExpiration * 1000;
}
return rates;
})["catch"](function(err) {
return lastRates;
});
} else {
return lastRates;
}
});
};