1import { postJson } from "../util/http.js";
2
3const send = (url, event, data, activity) =>
4 postJson(url, {event, data}, {headers: {"user-agent": "Pixies/WebhookAgent"}, activity});
5
6const events = [
7 ['testStarted', 'send_started', "TEST_STARTED"],
8 ['minutePassed', 'send_alive', "KEEP_ALIVE"],
9 ['testFinished', 'send_finished', "TEST_FINISHED", (d) => d],
10 ['testFailed', 'send_failed', "TEST_FAILED", (e) => ({error: e})],
11 ['recommendationsUpdated', 'send_recommendations', "RECOMMENDATIONS_UPDATED", (d) => d],
12 ['configUpdated', 'send_config_updates', "CONFIG_UPDATED", (d) => d]
13];
14
15export default (registerEvent) => {
16 for (const [event, flag, type, getData] of events) {
17 registerEvent(event, async ({data: c}, payload, activity) => {
18 if (c[flag]) await send(c.url, type, getData?.(payload), activity);
19 });
20 }
21
22 return {
23 icon: "fa-solid fa-globe",
24 fields: [
25 {name: "url", type: "text", required: true, regex: /https?:\/\/.+/},
26 {name: "send_started", type: "boolean", required: false},
27 {name: "send_finished", type: "boolean", required: false},
28 {name: "send_alive", type: "boolean", required: false},
29 {name: "send_failed", type: "boolean", required: false},
30 {name: "send_recommendations", type: "boolean", required: false},
31 {name: "send_config_updates", type: "boolean", required: false},
32 {name: "interval", type: "number", required: false, min: 1, max: 1440}
33 ]
34 };
35};
36