159 lines
6.2 KiB
JavaScript
159 lines
6.2 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const logger = require("../../server/utils/logger");
|
|
const sendEmail = require("../email/sendemail");
|
|
const data = require("../data/data");
|
|
const bodyParser = require("body-parser");
|
|
const ioevent = require("../ioevent/ioevent");
|
|
const taskHandler = require("../tasks/tasks");
|
|
const os = require("../opensearch/os-handler");
|
|
const eventAuthorizationMiddleware = require("../middleware/eventAuthorizationMIddleware");
|
|
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
|
|
const withUserGraphQLClientMiddleware = require("../middleware/withUserGraphQLClientMiddleware");
|
|
const { taskAssignedEmail, tasksRemindEmail } = require("../email/tasksEmails");
|
|
const { canvastest } = require("../render/canvas-handler");
|
|
const { alertCheck } = require("../alerts/alertcheck");
|
|
const updateBodyshopCache = require("../web-sockets/updateBodyshopCache");
|
|
const uuid = require("uuid").v4;
|
|
|
|
//Test route to ensure Express is responding.
|
|
router.get("/test", eventAuthorizationMiddleware, async function (req, res) {
|
|
const commit = require("child_process").execSync("git rev-parse --short HEAD");
|
|
// console.log(app.get('trust proxy'));
|
|
// console.log("remoteAddress", req.socket.remoteAddress);
|
|
// console.log("X-Forwarded-For", req.header('x-forwarded-for'));
|
|
logger.log("test-api-status", "DEBUG", "api", { commit });
|
|
// sendEmail.sendServerEmail({
|
|
// subject: `API Check - ${process.env.NODE_ENV}`,
|
|
// text: `Server API check has come in. Remote IP: ${req.socket.remoteAddress}, X-Forwarded-For: ${req.header('x-forwarded-for')}`,
|
|
// });
|
|
sendEmail.sendServerEmail({
|
|
subject: `API Check - ${process.env.NODE_ENV}`,
|
|
text: `Server API check has come in.`
|
|
});
|
|
res.status(200).send(`OK - ${commit}`);
|
|
});
|
|
|
|
router.get("/test-logs", eventAuthorizationMiddleware, (req, res) => {
|
|
const { logger } = req;
|
|
// // Test 1: Log with a message that exceeds the size limit, triggering an upload to S3.
|
|
const largeMessage = "A".repeat(256 * 1024 + 1); // Message larger than the log size limit
|
|
logger.log(largeMessage, "error", "user123", null, { detail: "large log entry" });
|
|
|
|
// Test 2: Log with a message that is within the size limit, should log directly using winston.
|
|
const smallMessage = "A small log message";
|
|
logger.log(smallMessage, "info", "user123", null, { detail: "small log entry" });
|
|
|
|
// Test 3: Log with the `upload` flag set to `true`, forcing the log to be uploaded to S3.
|
|
logger.log(
|
|
"This log will be uploaded to S3 regardless of size",
|
|
"warning",
|
|
"user123",
|
|
null,
|
|
{ detail: "upload log" },
|
|
true
|
|
);
|
|
|
|
// Test 4: Log with a message that doesn't exceed the size limit and doesn't require an upload.
|
|
logger.log("Normal log entry", "debug", "user123", { id: 4 }, { detail: "normal log entry" });
|
|
|
|
return res.status(500).send("Logs tested.");
|
|
});
|
|
|
|
router.get("/wstest", eventAuthorizationMiddleware, (req, res) => {
|
|
const { ioRedis } = req;
|
|
ioRedis.to(`bodyshop-broadcast-room:bfec8c8c-b7f1-49e0-be4c-524455f4e582`).emit("new-message-summary", {
|
|
isoutbound: true,
|
|
conversationId: "2b44d692-a9e4-4ed4-9c6b-7d8b0c44a0f6",
|
|
msid: "SM5d053957bc0da29399b768c23bffcc0f",
|
|
summary: true
|
|
});
|
|
|
|
// TODO: Do we need to add more content here?
|
|
ioRedis
|
|
.to(`bodyshop-conversation-room:bfec8c8c-b7f1-49e0-be4c-524455f4e582:2b44d692-a9e4-4ed4-9c6b-7d8b0c44a0f6`)
|
|
.emit("new-message-detailed", {
|
|
//
|
|
// msid: "SMbbd7703a898fef7f2c07c148ade8a6cd",
|
|
// text: "test2",
|
|
// conversationid: "2b44d692-a9e4-4ed4-9c6b-7d8b0c44a0f6",
|
|
// isoutbound: true,
|
|
// userid: "patrick@imex.dev",
|
|
// image: false,
|
|
// image_path: [],
|
|
newMessage: {
|
|
conversation: {
|
|
id: uuid(),
|
|
archived: false,
|
|
bodyshop: {
|
|
id: "bfec8c8c-b7f1-49e0-be4c-524455f4e582",
|
|
imexshopid: "APPLE"
|
|
},
|
|
created_at: "2024-11-19T19:46:38.984633+00:00",
|
|
updated_at: "2024-11-19T22:40:48.346875+00:00",
|
|
unreadcnt: 0,
|
|
phone_num: "+16138676684"
|
|
},
|
|
conversationid: "2b44d692-a9e4-4ed4-9c6b-7d8b0c44a0f6",
|
|
created_at: "2024-11-19T22:40:48.346875+00:00",
|
|
id: "68604ea9-c411-43ec-ab83-899868e58819",
|
|
image_path: [],
|
|
image: false,
|
|
isoutbound: true,
|
|
msid: "SMbbd7703a898fef7f2c07c148ade8a6cd",
|
|
read: false,
|
|
text: `This is a test ${Math.round(Math.random() * 100)}`,
|
|
updated_at: "2024-11-19T22:40:48.346875+00:00",
|
|
status: "posted",
|
|
userid: "patrick@imex.dev"
|
|
},
|
|
conversationId: "2b44d692-a9e4-4ed4-9c6b-7d8b0c44a0f6",
|
|
summary: false
|
|
}); // TODO: Do we need to add more content here?
|
|
|
|
return res.status(500).send("Logs tested.");
|
|
});
|
|
|
|
// Search
|
|
router.post("/search", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, os.search);
|
|
router.post("/opensearch", eventAuthorizationMiddleware, os.handler);
|
|
|
|
// IO Events
|
|
router.post("/ioevent", ioevent.default);
|
|
|
|
// Email
|
|
router.post("/sendemail", validateFirebaseIdTokenMiddleware, sendEmail.sendEmail);
|
|
router.post("/emailbounce", bodyParser.text(), sendEmail.emailBounce);
|
|
|
|
// Tasks Email Handler
|
|
router.post("/tasks-assigned-handler", eventAuthorizationMiddleware, taskAssignedEmail);
|
|
router.post("/tasks-remind-handler", eventAuthorizationMiddleware, tasksRemindEmail);
|
|
|
|
// Handlers
|
|
router.post("/record-handler/arms", data.arms);
|
|
router.post("/taskHandler", validateFirebaseIdTokenMiddleware, taskHandler.taskHandler);
|
|
|
|
// Canvas Test
|
|
router.post("/canvastest", validateFirebaseIdTokenMiddleware, canvastest);
|
|
|
|
// Alert Check
|
|
router.post("/alertcheck", eventAuthorizationMiddleware, alertCheck);
|
|
|
|
// Redis Cache Routes
|
|
router.post("/bodyshop-cache", eventAuthorizationMiddleware, updateBodyshopCache);
|
|
|
|
// Health Check for docker-compose-cluster load balancer, only available in development
|
|
if (process.env.NODE_ENV === "development") {
|
|
router.get("/health", (req, res) => {
|
|
const healthStatus = {
|
|
status: "healthy",
|
|
timestamp: new Date().toISOString(),
|
|
environment: process.env.NODE_ENV || "unknown",
|
|
uptime: process.uptime()
|
|
};
|
|
res.status(200).json(healthStatus);
|
|
});
|
|
}
|
|
|
|
module.exports = router;
|