74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
|
import axios from 'axios';
|
||
|
import { Application, Request, Response } from 'express';
|
||
|
import config from '../../config';
|
||
|
import elementsParser from './elements-parser';
|
||
|
import icons from './icons';
|
||
|
|
||
|
class LiquidRoutes {
|
||
|
public initRoutes(app: Application) {
|
||
|
app
|
||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'assets/icons', this.getAllLiquidIcon)
|
||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'assets/featured', this.$getAllFeaturedLiquidAssets)
|
||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'asset/:assetId/icon', this.getLiquidIcon)
|
||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'assets/group/:id', this.$getAssetGroup)
|
||
|
;
|
||
|
|
||
|
if (config.DATABASE.ENABLED) {
|
||
|
app
|
||
|
.get(config.MEMPOOL.API_URL_PREFIX + 'liquid/pegs/month', this.$getElementsPegsByMonth)
|
||
|
;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
private getLiquidIcon(req: Request, res: Response) {
|
||
|
const result = icons.getIconByAssetId(req.params.assetId);
|
||
|
if (result) {
|
||
|
res.setHeader('content-type', 'image/png');
|
||
|
res.setHeader('content-length', result.length);
|
||
|
res.send(result);
|
||
|
} else {
|
||
|
res.status(404).send('Asset icon not found');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private getAllLiquidIcon(req: Request, res: Response) {
|
||
|
const result = icons.getAllIconIds();
|
||
|
if (result) {
|
||
|
res.json(result);
|
||
|
} else {
|
||
|
res.status(404).send('Asset icons not found');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private async $getAllFeaturedLiquidAssets(req: Request, res: Response) {
|
||
|
try {
|
||
|
const response = await axios.get(`${config.EXTERNAL_DATA_SERVER.LIQUID_API}/assets/featured`, { responseType: 'stream', timeout: 10000 });
|
||
|
response.data.pipe(res);
|
||
|
} catch (e) {
|
||
|
res.status(500).end();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private async $getAssetGroup(req: Request, res: Response) {
|
||
|
try {
|
||
|
const response = await axios.get(`${config.EXTERNAL_DATA_SERVER.LIQUID_API}/assets/group/${parseInt(req.params.id, 10)}`,
|
||
|
{ responseType: 'stream', timeout: 10000 });
|
||
|
response.data.pipe(res);
|
||
|
} catch (e) {
|
||
|
res.status(500).end();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private async $getElementsPegsByMonth(req: Request, res: Response) {
|
||
|
try {
|
||
|
const pegs = await elementsParser.$getPegDataByMonth();
|
||
|
res.json(pegs);
|
||
|
} catch (e) {
|
||
|
res.status(500).send(e instanceof Error ? e.message : e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default new LiquidRoutes();
|