index.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env node
  2. import app from "./app.js";
  3. import internalCertificate from "./internal/certificate.js";
  4. import internalIpRanges from "./internal/ip_ranges.js";
  5. import { global as logger } from "./logger.js";
  6. import { migrateUp } from "./migrate.js";
  7. import { getCompiledSchema } from "./schema/index.js";
  8. import setup from "./setup.js";
  9. const IP_RANGES_FETCH_ENABLED = process.env.IP_RANGES_FETCH_ENABLED !== "false";
  10. async function appStart() {
  11. return migrateUp()
  12. .then(setup)
  13. .then(getCompiledSchema)
  14. .then(() => {
  15. if (!IP_RANGES_FETCH_ENABLED) {
  16. logger.info("IP Ranges fetch is disabled by environment variable");
  17. return;
  18. }
  19. logger.info("IP Ranges fetch is enabled");
  20. return internalIpRanges.fetch().catch((err) => {
  21. logger.error("IP Ranges fetch failed, continuing anyway:", err.message);
  22. });
  23. })
  24. .then(() => {
  25. internalCertificate.initTimer();
  26. internalIpRanges.initTimer();
  27. const server = app.listen(3000, () => {
  28. logger.info(`Backend PID ${process.pid} listening on port 3000 ...`);
  29. process.on("SIGTERM", () => {
  30. logger.info(`PID ${process.pid} received SIGTERM`);
  31. server.close(() => {
  32. logger.info("Stopping.");
  33. process.exit(0);
  34. });
  35. });
  36. });
  37. })
  38. .catch((err) => {
  39. logger.error(`Startup Error: ${err.message}`, err);
  40. setTimeout(appStart, 1000);
  41. });
  42. }
  43. try {
  44. appStart();
  45. } catch (err) {
  46. logger.fatal(err);
  47. process.exit(1);
  48. }