Skip to content
This repository was archived by the owner on Aug 12, 2023. It is now read-only.

Commit cd67412

Browse files
authored
Add rates endpoint (#410)
1 parent f3019fc commit cd67412

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

src/app/routes/v1/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const createAssetBridgesRouter = require('./asset-bridges');
77
const createFillsRouter = require('./fills');
88
const createMetricsRouter = require('./metrics');
99
const createProtocolsRouter = require('./protocols');
10+
const createRatesRouter = require('./rates');
1011
const createRelayerLookupRouter = require('./relayer-lookup');
1112
const createRelayerRouter = require('./relayer');
1213
const createRelayersRouter = require('./relayers');
@@ -29,6 +30,7 @@ const createRouter = () => {
2930
createFillsRouter().routes(),
3031
createMetricsRouter().routes(),
3132
createProtocolsRouter().routes(),
33+
createRatesRouter().routes(),
3234
createRelayerLookupRouter().routes(),
3335
createRelayerRouter().routes(),
3436
createRelayersRouter().routes(),

src/app/routes/v1/rates.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const axios = require('axios');
2+
const moment = require('moment');
3+
const Router = require('koa-router');
4+
5+
const { getLogger } = require('../../../util/logging');
6+
7+
let lastRates;
8+
let lastUpdated;
9+
10+
const getRates = async () => {
11+
const stale =
12+
lastRates === undefined ||
13+
moment(lastUpdated)
14+
.add('1', 'minutes')
15+
.toDate() < new Date();
16+
17+
if (!stale) {
18+
return lastRates;
19+
}
20+
21+
const logger = getLogger('rates');
22+
const { data } = await axios.get(
23+
'https://min-api.cryptocompare.com/data/pricemulti?fsyms=USD&tsyms=AUD,BTC,GBP,CNY,ETH,EUR,JPY,KRW,USD',
24+
);
25+
26+
lastUpdated = new Date();
27+
lastRates = data;
28+
29+
logger.info('refreshed rates');
30+
31+
return lastRates;
32+
};
33+
34+
const createRouter = () => {
35+
const router = new Router({ prefix: '/rates' });
36+
37+
router.get('/', async ({ response }, next) => {
38+
const rates = await getRates();
39+
40+
response.body = rates;
41+
42+
await next();
43+
});
44+
45+
return router;
46+
};
47+
48+
module.exports = createRouter;

0 commit comments

Comments
 (0)