• lunasea.js
  • const NotificationProvider = require("./notification-provider");
    const axios = require("axios");
    const { DOWN, UP } = require("../../src/util");
    
    class LunaSea extends NotificationProvider {
        name = "lunasea";
    
        /**
         * @inheritdoc
         */
        async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
            const okMsg = "Sent Successfully.";
            const url = "https://notify.lunasea.app/v1";
    
            try {
                const target = this.getTarget(notification);
                if (heartbeatJSON == null) {
                    let testdata = {
                        "title": "Uptime Kuma Alert",
                        "body": msg,
                    };
                    await axios.post(`${url}/custom/${target}`, testdata);
                    return okMsg;
                }
    
                if (heartbeatJSON["status"] === DOWN) {
                    let downdata = {
                        "title": "UptimeKuma Alert: " + monitorJSON["name"],
                        "body": "[🔴 Down] " +
                            heartbeatJSON["msg"] +
                            `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`
                    };
                    await axios.post(`${url}/custom/${target}`, downdata);
                    return okMsg;
                }
    
                if (heartbeatJSON["status"] === UP) {
                    let updata = {
                        "title": "UptimeKuma Alert: " + monitorJSON["name"],
                        "body": "[✅ Up] " +
                            heartbeatJSON["msg"] +
                            `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`
                    };
                    await axios.post(`${url}/custom/${target}`, updata);
                    return okMsg;
                }
    
            } catch (error) {
                this.throwGeneralAxiosError(error);
            }
        }
    
        /**
         * Generates the lunasea target to send the notification to
         * @param {BeanModel} notification Notification details
         * @returns {string} The target to send the notification to
         */
        getTarget(notification) {
            if (notification.lunaseaTarget === "user") {
                return "user/" + notification.lunaseaUserID;
            }
            return "device/" + notification.lunaseaDevice;
    
        }
    }
    
    module.exports = LunaSea;