From 3bc1fd7c02cd16d29115c653373aa6107f8b0b3c Mon Sep 17 00:00:00 2001 From: Tola Leng Date: Fri, 15 Aug 2025 16:47:26 +0700 Subject: [PATCH] feat: Add NTFY notification channel - Adds NTFY as a new option to the notification channel type dropdown - This includes updating the form schema and related components to support the ntfy_endpoint field for NTFY configurations. --- .../public/upload/notification/ntfy.png | Bin 0 -> 33848 bytes .../NotificationChannelDialog.tsx | 33 +++++++++++++++++- .../src/services/alertConfigService.ts | 10 +++--- 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 application/public/upload/notification/ntfy.png diff --git a/application/public/upload/notification/ntfy.png b/application/public/upload/notification/ntfy.png new file mode 100644 index 0000000000000000000000000000000000000000..ad57c98097b099d9761f5f7f536cbfcf86f12eaf GIT binary patch literal 33848 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

p$v%1$3SscWfsG_zGry-P} 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 Z&z3h{n5Rb0YCu9UhWf^OIR`HU{U3bDbkYC- literal 0 HcmV?d00001 diff --git a/application/src/components/settings/notification-settings/NotificationChannelDialog.tsx b/application/src/components/settings/notification-settings/NotificationChannelDialog.tsx index 87ce90a..4d47b44 100644 --- a/application/src/components/settings/notification-settings/NotificationChannelDialog.tsx +++ b/application/src/components/settings/notification-settings/NotificationChannelDialog.tsx @@ -36,7 +36,7 @@ interface NotificationChannelDialogProps { const baseSchema = z.object({ notify_name: z.string().min(1, "Name is required"), - notification_type: z.enum(["telegram", "discord", "slack", "signal", "google_chat", "email", "webhook"]), + notification_type: z.enum(["telegram", "discord", "slack", "signal", "google_chat", "email", "ntfy", "webhook"]), enabled: z.boolean().default(true), service_id: z.string().default("global"), template_id: z.string().optional(), @@ -78,6 +78,11 @@ const emailSchema = baseSchema.extend({ smtp_password: z.string().min(1, "SMTP password is required"), }); +const ntfySchema = baseSchema.extend({ + notification_type: z.literal("ntfy"), + ntfy_endpoint: z.string().url("Must be a valid NTFY endpoint URL"), +}); + const webhookSchema = baseSchema.extend({ notification_type: z.literal("webhook"), webhook_url: z.string().url("Must be a valid URL"), @@ -91,6 +96,7 @@ const formSchema = z.discriminatedUnion("notification_type", [ signalSchema, googleChatSchema, emailSchema, + ntfySchema, webhookSchema ]); @@ -133,6 +139,12 @@ const notificationTypeOptions = [ description: "Send notifications via email", icon: "/upload/notification/email.png" }, + { + value: "ntfy", + label: "NTFY", + description: "Send notifications via NTFY push service", + icon: "/upload/notification/ntfy.png" + }, { value: "webhook", label: "Webhook", @@ -540,6 +552,25 @@ export const NotificationChannelDialog = ({ )} + {notificationType === "ntfy" && ( + ( + + NTFY Endpoint + + + + + The NTFY endpoint URL including your topic (e.g., https://ntfy.sh/checkcle) + + + + )} + /> + )} + {notificationType === "webhook" && ( <>