• yzj.js
  • const NotificationProvider = require("./notification-provider");
    const { DOWN, UP } = require("../../src/util");
    const { default: axios } = require("axios");
    
    class YZJ extends NotificationProvider {
        name = "YZJ";
    
        /**
         * @inheritdoc
         */
        async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
            let okMsg = "Sent Successfully.";
    
            try {
                if (heartbeatJSON !== null) {
                    msg = `${this.statusToString(heartbeatJSON["status"])} ${monitorJSON["name"]} \n> ${heartbeatJSON["msg"]}\n> Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`;
                }
    
                const config = {
                    headers: {
                        "Content-Type": "application/json",
                    },
                };
                const params = {
                    content: msg
                };
                // yzjtype=0 => general robot
                const url = `${notification.yzjWebHookUrl}?yzjtype=0&yzjtoken=${notification.yzjToken}`;
    
                const result = await axios.post(url, params, config);
                if (!result.data?.success) {
                    throw new Error(result.data?.errmsg ?? "yzj's server did not respond with the expected result");
                }
                return okMsg;
            } catch (error) {
                this.throwGeneralAxiosError(error);
            }
        }
    
        /**
         * Convert status constant to string
         * @param {string} status The status constant
         * @returns {string} status
         */
        statusToString(status) {
            switch (status) {
                case DOWN:
                    return "❌";
                case UP:
                    return "✅";
                default:
                    return status;
            }
        }
    }
    
    module.exports = YZJ;