server.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // @ts-ignore -- generated package
  2. import "src/utils/environment";
  3. import * as sapper from "@sapper/server"; // eslint-disable-line import/no-unresolved
  4. import compression from "compression";
  5. import express, { Express } from "express";
  6. import session from "cookie-session";
  7. // @ts-ignore -- doesn't package its own types until 1.0.0-next.6
  8. import sirv from "sirv";
  9. import { createConnection, getConnectionOptions } from "typeorm";
  10. import { DB_ENTITIES } from "@shared/db/entities";
  11. import { eventLogger, logger } from "./utils/logging";
  12. import { AppSession } from "./utils/session";
  13. const PORT = process.env.PORT; // eslint-disable-line prefer-destructuring
  14. // @ts-ignore -- creates a warning after `rollup-plugin-replace` (set up in `rollup.config.js`)
  15. // replaces `process.env.NODE_ENV` with `"production"` during `prod`
  16. const dev = process.env.NODE_ENV === "development";
  17. logger.info("Staring webserver to port %s", PORT);
  18. eventLogger.info("Started");
  19. const key = process.env.WEB_COOKIE_KEY;
  20. if (!key) {
  21. logger.error("WEB_COOKIE_KEY is not set, cannot run!");
  22. process.exit();
  23. }
  24. const createSapperServer = async (): Promise<Express> => {
  25. await createConnection({
  26. ...await getConnectionOptions(),
  27. entities: DB_ENTITIES,
  28. });
  29. const app = express();
  30. app.enable("trust proxy");
  31. app.use(express.json());
  32. app.use(
  33. session({
  34. secret: key,
  35. name: "session",
  36. secure: !dev,
  37. }),
  38. compression({ threshold: 0 }),
  39. sirv("static", { dev }),
  40. sapper.middleware({
  41. session: (req): AppSession => ({
  42. }),
  43. }),
  44. );
  45. return app;
  46. };
  47. createSapperServer().then((app) => {
  48. app.listen(PORT, (err?: any): void => { // eslint-disable-line
  49. if (err) logger.error("Error on webserver: %s", err);
  50. });
  51. });
  52. export { sapper };