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 });