1import { postJson } from "../util/http.js";
2import { replaceVariables } from "../util/helpers.js";
3
4const defaults = {
5 finished: "A speedtest is finished:\nPing: %ping% ms (±%jitter% ms)\nUpload: %upload% Mbps\nDownload: %download% Mbps",
6 failed: "A speedtest has failed. Reason: %error%"
7};
8
9const send = ({url, key}, message, priority, activity) =>
10 postJson(`${url}/message`, {message, priority: parseInt(priority)},
11 {headers: {"Authorization": "Bearer " + key}, activity});
12
13export default (registerEvent) => {
14 registerEvent('testFinished', async ({data: c}, data, activity) => {
15 if (c.send_finished) await send(c,
16 replaceVariables(c.finished_message || defaults.finished, data), c.priority, activity);
17 });
18
19 registerEvent('testFailed', async ({data: c}, error, activity) => {
20 if (c.send_failed) await send(c,
21 replaceVariables(c.failed_message || defaults.failed, {error}), 8, activity);
22 });
23
24 return {
25 icon: "fa-solid fa-bell",
26 fields: [
27 {name: "url", type: "text", required: true, regex: /https?:\/\/.+/},
28 {name: "key", type: "text", required: true, regex: /^.{15}$/},
29 {name: "priority", type: "text", required: true, regex: /^[0-9]$/},
30 {name: "send_finished", type: "boolean", required: false},
31 {name: "finished_message", type: "textarea", required: false},
32 {name: "send_failed", type: "boolean", required: false},
33 {name: "error_message", type: "textarea", required: false}
34 ]
35 };
36};
37