rest.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Request, Response } from "express";
  2. import { logger } from "./helpers";
  3. import { getStatus, getPriceData, isHealthy } from "./worker";
  4. let restPort: number = 0;
  5. export function init(runRest: boolean): boolean {
  6. if (!runRest) return true;
  7. if (!process.env.REST_PORT) return true;
  8. restPort = parseInt(process.env.REST_PORT);
  9. return true;
  10. }
  11. export async function run() {
  12. if (restPort == 0) return;
  13. const express = require("express");
  14. const cors = require("cors");
  15. const app = express();
  16. app.use(cors());
  17. app.listen(restPort, () =>
  18. logger.debug("listening on REST port " + restPort)
  19. );
  20. (async () => {
  21. app.get("/status", async (req: Request, res: Response) => {
  22. let result = await getStatus();
  23. res.json(result);
  24. });
  25. app.get("/queryterra/:price_id", async (req: Request, res: Response) => {
  26. let result = await getPriceData(req.params.price_id);
  27. res.json(result);
  28. });
  29. app.get("/health", async (req: Request, res: Response) => {
  30. if (isHealthy()) {
  31. res.sendStatus(200);
  32. } else {
  33. res.sendStatus(503);
  34. }
  35. });
  36. app.get("/", (req: Request, res: Response) =>
  37. res.json(["/status", "/queryterra/<price_id>", "/health"])
  38. );
  39. })();
  40. }