feat: Update DataToProcess to include IncomingEmailMonitorRequest and refactor IncomingEmail processing

This commit is contained in:
Nawaz Dhandala
2026-01-14 09:27:01 +00:00
parent 691227dfef
commit 66ed8fd9aa
4 changed files with 22 additions and 12 deletions

View File

@@ -1,4 +1,5 @@
import IncomingMonitorRequest from "../../../Types/Monitor/IncomingMonitor/IncomingMonitorRequest";
import IncomingEmailMonitorRequest from "../../../Types/Monitor/IncomingEmailMonitor/IncomingEmailMonitorRequest";
import ServerMonitorResponse from "../../../Types/Monitor/ServerMonitor/ServerMonitorResponse";
import ProbeMonitorResponse from "../../../Types/Probe/ProbeMonitorResponse";
import LogMonitorResponse from "../../../Types/Monitor/LogMonitor/LogMonitorResponse";
@@ -9,6 +10,7 @@ import ExceptionMonitorResponse from "../../../Types/Monitor/ExceptionMonitor/Ex
type DataToProcess =
| ProbeMonitorResponse
| IncomingMonitorRequest
| IncomingEmailMonitorRequest
| ServerMonitorResponse
| LogMonitorResponse
| TraceMonitorResponse

View File

@@ -37,7 +37,6 @@ router.post(
const isValid: boolean = await provider.validateWebhook({
headers: req.headers as Record<string, string>,
body: req.body as JSONObject,
rawBody: (req as ExpressRequest & { rawBody?: string }).rawBody,
});
if (!isValid) {
@@ -76,8 +75,8 @@ router.post(
emailFrom: parsedEmail.from,
emailTo: parsedEmail.to,
emailSubject: parsedEmail.subject,
emailBody: parsedEmail.textBody,
emailBodyHtml: parsedEmail.htmlBody,
emailBody: parsedEmail.body,
emailBodyHtml: parsedEmail.bodyHtml,
emailHeaders: parsedEmail.headers,
attachments: parsedEmail.attachments,
});

View File

@@ -16,6 +16,7 @@ import ProbeMonitorResponse from "Common/Types/Probe/ProbeMonitorResponse";
import IncomingEmailMonitorRequest from "Common/Types/Monitor/IncomingEmailMonitor/IncomingEmailMonitorRequest";
import MonitorType from "Common/Types/Monitor/MonitorType";
import Monitor from "Common/Models/DatabaseModels/Monitor";
import { MonitorStepProbeResponse } from "Common/Models/DatabaseModels/MonitorProbe";
import { JSONObject } from "Common/Types/JSON";
import { PROBE_INGEST_CONCURRENCY } from "../../Config";
import ExceptionMessages from "Common/Types/Exception/ExceptionMessages";
@@ -63,7 +64,7 @@ async function processProbeFromQueue(
): Promise<void> {
const probeResponse: ProbeMonitorResponse = JSONFunctions.deserialize(
jobData.probeMonitorResponse?.["probeMonitorResponse"] as JSONObject,
) as ProbeMonitorResponse;
) as unknown as ProbeMonitorResponse;
if (!probeResponse) {
throw new BadDataException("ProbeMonitorResponse not found");
@@ -86,15 +87,18 @@ async function processProbeFromQueue(
probeResponse.ingestedAt = OneUptimeDate.getCurrentDate();
// save the probe response to the monitor test.
await MonitorTestService.updateOneById({
const stepResponse: MonitorStepProbeResponse = {
[probeResponse.monitorStepId.toString()]: {
...JSON.parse(JSON.stringify(probeResponse)),
monitoredAt: OneUptimeDate.getCurrentDate(),
} as ProbeMonitorResponse,
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
await (MonitorTestService as any).updateOneById({
id: testId,
data: {
monitorStepProbeResponse: {
[probeResponse.monitorStepId.toString()]: {
...JSON.parse(JSON.stringify(probeResponse)),
monitoredAt: OneUptimeDate.getCurrentDate(),
},
} as JSONObject,
monitorStepProbeResponse: stepResponse,
},
props: {
isRoot: true,

View File

@@ -278,6 +278,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz",
"integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==",
"dev": true,
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
@@ -1249,7 +1250,8 @@
"node_modules/@types/node": {
"version": "17.0.45",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
"peer": true
},
"node_modules/@types/prettier": {
"version": "2.7.3",
@@ -1520,6 +1522,7 @@
"url": "https://github.com/sponsors/ai"
}
],
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001565",
"electron-to-chromium": "^1.4.601",
@@ -2461,6 +2464,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
"integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
"dev": true,
"peer": true,
"dependencies": {
"@jest/core": "^28.1.3",
"@jest/types": "^28.1.3",
@@ -4357,6 +4361,7 @@
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"peer": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",