• home-assistant.js
  • const NotificationProvider = require("./notification-provider");
    const axios = require("axios");
    
    const defaultNotificationService = "notify";
    
    class HomeAssistant extends NotificationProvider {
        name = "HomeAssistant";
    
        /**
         * @inheritdoc
         */
        async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
            const okMsg = "Sent Successfully.";
    
            const notificationService = notification?.notificationService || defaultNotificationService;
    
            try {
                await axios.post(
                    `${notification.homeAssistantUrl.trim().replace(/\/*$/, "")}/api/services/notify/${notificationService}`,
                    {
                        title: "Uptime Kuma",
                        message: msg,
                        ...(notificationService !== "persistent_notification" && { data: {
                            name: monitorJSON?.name,
                            status: heartbeatJSON?.status,
                            channel: "Uptime Kuma",
                            icon_url: "https://github.com/louislam/uptime-kuma/blob/master/public/icon.png?raw=true",
                        } }),
                    },
                    {
                        headers: {
                            Authorization: `Bearer ${notification.longLivedAccessToken}`,
                            "Content-Type": "application/json",
                        },
                    }
                );
    
                return okMsg;
            } catch (error) {
                this.throwGeneralAxiosError(error);
            }
        }
    }
    
    module.exports = HomeAssistant;