mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
* feat: notifications backend & creation * feat: assign notification to backup schedule * refactor: status dot one component * chore(notification-details): remove refetchInterval
32 lines
864 B
TypeScript
32 lines
864 B
TypeScript
import type { NotificationConfig } from "~/schemas/notifications";
|
|
|
|
export function buildSlackShoutrrrUrl(config: Extract<NotificationConfig, { type: "slack" }>): string {
|
|
const url = new URL(config.webhookUrl);
|
|
const pathParts = url.pathname.split("/").filter(Boolean);
|
|
|
|
if (pathParts.length < 4 || pathParts[0] !== "services") {
|
|
throw new Error("Invalid Slack webhook URL format");
|
|
}
|
|
|
|
const [, tokenA, tokenB, tokenC] = pathParts;
|
|
|
|
let shoutrrrUrl = `slack://hook:${tokenA}-${tokenB}-${tokenC}@webhook`;
|
|
|
|
const params = new URLSearchParams();
|
|
if (config.channel) {
|
|
params.append("channel", config.channel);
|
|
}
|
|
if (config.username) {
|
|
params.append("username", config.username);
|
|
}
|
|
if (config.iconEmoji) {
|
|
params.append("icon", config.iconEmoji);
|
|
}
|
|
|
|
if (params.toString()) {
|
|
shoutrrrUrl += `?${params.toString()}`;
|
|
}
|
|
|
|
return shoutrrrUrl;
|
|
}
|