Feat: Add custom body for Webhook Notif.

This commit is contained in:
Nelson Chan 2023-04-19 22:28:53 +08:00
parent 149f8c3646
commit 97d38ee1a8
5 changed files with 107 additions and 29 deletions

View file

@ -1,6 +1,7 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const FormData = require("form-data");
const { Liquid } = require("liquidjs");
class Webhook extends NotificationProvider {
@ -15,17 +16,28 @@ class Webhook extends NotificationProvider {
monitor: monitorJSON,
msg,
};
let finalData;
let config = {
headers: {}
};
if (notification.webhookContentType === "form-data") {
finalData = new FormData();
finalData.append("data", JSON.stringify(data));
config.headers = finalData.getHeaders();
} else {
finalData = data;
const formData = new FormData();
formData.append("data", JSON.stringify(data));
config.headers = formData.getHeaders();
data = formData;
} else if (notification.webhookContentType === "custom") {
// Initialize LiquidJS and parse the custom Body Template
const engine = new Liquid();
const tpl = engine.parse(notification.webhookCustomBody);
// Insert templated values into Body
const parsedBody = await engine.render(tpl,
{
msg,
heartbeatJSON,
monitorJSON
});
data = parsedBody;
}
if (notification.webhookAdditionalHeaders) {
@ -39,7 +51,7 @@ class Webhook extends NotificationProvider {
}
}
await axios.post(notification.webhookURL, finalData, config);
await axios.post(notification.webhookURL, data, config);
return okMsg;
} catch (error) {