const NotificationProvider = require("./notification-provider"); const axios = require("axios"); const { DOWN, UP } = require("../../src/util"); class OneChat extends NotificationProvider { name = "OneChat"; /** * @inheritdoc */ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { const okMsg = "Sent Successfully."; const url = "https://chat-api.one.th/message/api/v1/push_message"; try { const config = { headers: { "Content-Type": "application/json", Authorization: "Bearer " + notification.accessToken, }, }; // Send a test message if the monitor is null if (heartbeatJSON == null) { const testMessage = { to: notification.recieverId, bot_id: notification.botId, type: "text", message: "Test Successful!", }; await axios.post(url, testMessage, config); } else if (heartbeatJSON["status"] === DOWN) { const downMessage = { to: notification.recieverId, bot_id: notification.botId, type: "text", message: "UptimeKuma Alert:\n" + "[🔴 Down]\n" + "Name: " + monitorJSON["name"] + "\n" + heartbeatJSON["msg"] + "\n" + "Time (" + heartbeatJSON["timezone"] + "): " + heartbeatJSON["localDateTime"], }; await axios.post(url, downMessage, config); } else if (heartbeatJSON["status"] === UP) { const upMessage = { to: notification.recieverId, bot_id: notification.botId, type: "text", message: "UptimeKuma Alert:\n" + "[🟢 Up]\n" + "Name: " + monitorJSON["name"] + "\n" + heartbeatJSON["msg"] + "\n" + "Time (" + heartbeatJSON["timezone"] + "): " + heartbeatJSON["localDateTime"], }; await axios.post(url, upMessage, config); } return okMsg; } catch (error) { // Handle errors and throw a descriptive message if (error.response) { const errorMessage = error.response.data?.message || "Unknown API error occurred."; throw new Error(`OneChat API Error: ${errorMessage}`); } else { throw new Error( `Network or unexpected error: ${error.message}` ); } } } } module.exports = OneChat;