2021-05-15 01:56:08 +08:00
|
|
|
const express = require("express");
|
2021-06-07 00:32:37 +08:00
|
|
|
const { config } = require("dotenv");
|
2021-06-16 07:46:37 +08:00
|
|
|
const path = require("path");
|
2021-07-08 19:30:06 +08:00
|
|
|
const MonkeyError = require("./handlers/error");
|
2021-06-07 00:32:37 +08:00
|
|
|
config({ path: path.join(__dirname, ".env") });
|
2021-06-01 11:47:58 +08:00
|
|
|
const cors = require("cors");
|
|
|
|
const admin = require("firebase-admin");
|
2021-09-10 21:18:40 +08:00
|
|
|
const Logger = require("./handlers/logger.js");
|
2021-06-07 00:32:37 +08:00
|
|
|
const serviceAccount = require("./credentials/serviceAccountKey.json");
|
2021-08-18 07:33:14 +08:00
|
|
|
const { connectDB, mongoDB } = require("./init/mongodb");
|
2022-01-29 02:48:08 +08:00
|
|
|
const jobs = require("./jobs");
|
2022-01-27 06:42:53 +08:00
|
|
|
const addApiRoutes = require("./api/routes");
|
2021-05-20 06:39:18 +08:00
|
|
|
|
2021-06-16 07:47:34 +08:00
|
|
|
const PORT = process.env.PORT || 5005;
|
|
|
|
|
2021-06-01 11:47:58 +08:00
|
|
|
// MIDDLEWARE & SETUP
|
2021-05-15 01:56:08 +08:00
|
|
|
const app = express();
|
2021-06-07 00:32:37 +08:00
|
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
app.use(express.json());
|
2021-08-17 01:01:52 +08:00
|
|
|
app.use(cors());
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2021-08-28 04:52:49 +08:00
|
|
|
app.set("trust proxy", 1);
|
|
|
|
|
2021-09-06 07:52:05 +08:00
|
|
|
app.use((req, res, next) => {
|
|
|
|
if (process.env.MAINTENANCE === "true") {
|
2021-09-06 07:52:32 +08:00
|
|
|
res.status(503).json({ message: "Server is down for maintenance" });
|
2021-09-06 07:52:05 +08:00
|
|
|
} else {
|
|
|
|
next();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2022-01-27 06:42:53 +08:00
|
|
|
addApiRoutes(app);
|
2021-05-15 01:56:08 +08:00
|
|
|
|
2022-01-10 10:06:34 +08:00
|
|
|
//DO NOT REMOVE NEXT, EVERYTHING WILL EXPLODE
|
|
|
|
app.use(function (e, req, res, next) {
|
2022-01-18 22:42:32 +08:00
|
|
|
if (/ECONNREFUSED.*27017/i.test(e.message)) {
|
|
|
|
e.message = "Could not connect to the database. It may have crashed.";
|
|
|
|
delete e.stack;
|
|
|
|
}
|
|
|
|
|
2021-08-18 07:41:33 +08:00
|
|
|
let monkeyError;
|
2022-01-10 10:06:34 +08:00
|
|
|
if (e.errorID) {
|
2021-08-18 07:41:33 +08:00
|
|
|
//its a monkey error
|
2022-01-10 10:06:34 +08:00
|
|
|
monkeyError = e;
|
2021-08-18 07:41:33 +08:00
|
|
|
} else {
|
|
|
|
//its a server error
|
2022-01-10 10:06:34 +08:00
|
|
|
monkeyError = new MonkeyError(e.status, e.message, e.stack);
|
2021-09-13 22:40:12 +08:00
|
|
|
}
|
|
|
|
if (!monkeyError.uid && req.decodedToken) {
|
|
|
|
monkeyError.uid = req.decodedToken.uid;
|
2021-08-18 07:41:33 +08:00
|
|
|
}
|
2021-08-18 03:00:29 +08:00
|
|
|
if (process.env.MODE !== "dev" && monkeyError.status > 400) {
|
2021-09-10 07:03:01 +08:00
|
|
|
Logger.log(
|
2022-01-08 00:05:24 +08:00
|
|
|
"system_error",
|
2021-09-10 07:03:01 +08:00
|
|
|
`${monkeyError.status} ${monkeyError.message}`,
|
|
|
|
monkeyError.uid
|
|
|
|
);
|
2021-08-18 07:33:14 +08:00
|
|
|
mongoDB().collection("errors").insertOne({
|
2021-08-18 03:00:29 +08:00
|
|
|
_id: monkeyError.errorID,
|
|
|
|
timestamp: Date.now(),
|
|
|
|
status: monkeyError.status,
|
|
|
|
uid: monkeyError.uid,
|
|
|
|
message: monkeyError.message,
|
|
|
|
stack: monkeyError.stack,
|
|
|
|
});
|
2022-01-10 10:10:26 +08:00
|
|
|
monkeyError.stack = undefined;
|
2022-01-08 00:24:58 +08:00
|
|
|
} else {
|
2022-01-10 10:06:34 +08:00
|
|
|
console.error(monkeyError.message);
|
2021-08-18 03:00:29 +08:00
|
|
|
}
|
2022-01-10 10:06:34 +08:00
|
|
|
return res.status(monkeyError.status || 500).json(monkeyError);
|
2021-05-15 01:56:08 +08:00
|
|
|
});
|
2021-06-14 14:49:23 +08:00
|
|
|
|
2022-01-14 21:44:35 +08:00
|
|
|
console.log("Starting server...");
|
2021-06-16 07:47:34 +08:00
|
|
|
app.listen(PORT, async () => {
|
2022-01-14 21:44:35 +08:00
|
|
|
console.log(`Listening on port ${PORT}`);
|
2022-01-18 22:42:32 +08:00
|
|
|
console.log("Connecting to database...");
|
2021-06-14 14:49:23 +08:00
|
|
|
await connectDB();
|
2022-01-18 22:42:32 +08:00
|
|
|
console.log("Database connected");
|
2021-06-14 14:49:23 +08:00
|
|
|
admin.initializeApp({
|
|
|
|
credential: admin.credential.cert(serviceAccount),
|
|
|
|
});
|
2021-09-06 06:57:07 +08:00
|
|
|
|
2022-01-29 02:48:08 +08:00
|
|
|
console.log("Starting cron jobs...");
|
|
|
|
jobs.forEach((job) => job.start());
|
2021-09-10 06:39:10 +08:00
|
|
|
});
|