feat(notifications): native support for pushover

This commit is contained in:
Nicolas Meienberger
2025-11-22 17:48:19 +01:00
parent a622b5e689
commit 8c4939af4e
6 changed files with 130 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ import { buildSlackShoutrrrUrl } from "./slack";
import { buildDiscordShoutrrrUrl } from "./discord";
import { buildGotifyShoutrrrUrl } from "./gotify";
import { buildNtfyShoutrrrUrl } from "./ntfy";
import { buildPushoverShoutrrrUrl } from "./pushover";
import { buildCustomShoutrrrUrl } from "./custom";
export function buildShoutrrrUrl(config: NotificationConfig): string {
@@ -18,6 +19,8 @@ export function buildShoutrrrUrl(config: NotificationConfig): string {
return buildGotifyShoutrrrUrl(config);
case "ntfy":
return buildNtfyShoutrrrUrl(config);
case "pushover":
return buildPushoverShoutrrrUrl(config);
case "custom":
return buildCustomShoutrrrUrl(config);
default: {

View File

@@ -0,0 +1,24 @@
import type { NotificationConfig } from "~/schemas/notifications";
export function buildPushoverShoutrrrUrl(
config: Extract<NotificationConfig, { type: "pushover" }>,
): string {
const params = new URLSearchParams();
if (config.devices) {
params.append("devices", config.devices);
}
if (config.priority !== undefined) {
params.append("priority", config.priority.toString());
}
const queryString = params.toString();
let shoutrrrUrl = `pushover://shoutrrr:${config.apiToken}@${config.userKey}/`;
if (queryString) {
shoutrrrUrl += `?${queryString}`;
}
return shoutrrrUrl;
}

View File

@@ -60,6 +60,11 @@ async function encryptSensitiveFields(config: NotificationConfig): Promise<Notif
...config,
token: config.token ? await cryptoUtils.encrypt(config.token) : undefined,
};
case "pushover":
return {
...config,
apiToken: await cryptoUtils.encrypt(config.apiToken),
};
case "custom":
return {
...config,
@@ -97,6 +102,11 @@ async function decryptSensitiveFields(config: NotificationConfig): Promise<Notif
...config,
token: config.token ? await cryptoUtils.decrypt(config.token) : undefined,
};
case "pushover":
return {
...config,
apiToken: await cryptoUtils.decrypt(config.apiToken),
};
case "custom":
return {
...config,