/ api / index.js
index.js
 1  const Events = require("events");
 2  const Validators = require("./validators");
 3  const express = require("express");
 4  const cors = require("cors");
 5  const helmet = require("helmet");
 6  const rateLimit = require("./rate-limit");
 7  const errorHandler = require("./error-handler");
 8  const config = require("../config");
 9  const Database = require("../database");
10  const Mailer = require("../mail/sendgrid");
11  const DappConfig = require("../dapp-config");
12  const Controller = require("./controller");
13  const logger = require("../logger")('api');
14  
15  const events = new Events();
16  const dappConfig = new DappConfig(config, logger);
17  const mailer = new Mailer(config, logger);
18  const db = new Database(events, config);
19  
20  db.init(logger);
21  
22  events.on("db:connected", () => {
23    const app = express();
24  
25    app.use(rateLimit(logger));
26    app.use(cors());
27    app.use(express.json());
28    app.use(express.urlencoded({ extended: true }));
29    app.use(helmet.expectCt({ enforce: true, maxAge: 60 }));
30    app.use(helmet());
31    app.set("trust proxy", 1);
32  
33    app.post("/:dappId/subscribe", Validators.subscribe, Controller.subscribe(dappConfig, mailer));
34    app.post("/:dappId/unsubscribe", Validators.unsubscribe, Controller.unsubscribe(dappConfig));
35    app.get("/confirm/:token", Validators.confirm, Controller.confirm());
36    app.get("/:dappId/user/:address", Validators.userExists, Controller.userExists());
37    app.get("/", (req, res) => res.status(200).json({ ok: true }));
38  
39    app.use(errorHandler(logger));
40  
41    app.listen(config.PORT, () => logger.info(`App listening on port ${config.PORT}!`));
42  });