Openstatus www.openstatus.dev
at 175ecb24f9261f7e2f2ea2940027b255e26d7cc5 125 lines 3.6 kB view raw
1import { FormDiscord } from "@/components/forms/notifications/form-discord"; 2import { FormEmail } from "@/components/forms/notifications/form-email"; 3import { FormNtfy } from "@/components/forms/notifications/form-ntfy"; 4import { FormOpsGenie } from "@/components/forms/notifications/form-opsgenie"; 5import { FormPagerDuty } from "@/components/forms/notifications/form-pagerduty"; 6import { FormSlack } from "@/components/forms/notifications/form-slack"; 7import { FormSms } from "@/components/forms/notifications/form-sms"; 8import { FormTelegram } from "@/components/forms/notifications/form-telegram"; 9import { FormWebhook } from "@/components/forms/notifications/form-webhook"; 10import { FormWhatsApp } from "@/components/forms/notifications/form-whatsapp"; 11import { DiscordIcon, TelegramIcon, WhatsappIcon } from "@openstatus/icons"; 12import { OpsGenieIcon } from "@openstatus/icons"; 13import { PagerDutyIcon } from "@openstatus/icons"; 14import { SlackIcon } from "@openstatus/icons"; 15import { sendTestDiscordMessage as sendTestDiscord } from "@openstatus/notification-discord"; 16import { sendTest as sendTestNtfy } from "@openstatus/notification-ntfy"; 17import { sendTest as sendTestOpsGenie } from "@openstatus/notification-opsgenie"; 18import { sendTest as sendTestPagerDuty } from "@openstatus/notification-pagerduty"; 19import { sendTestSlackMessage as sendTestSlack } from "@openstatus/notification-slack"; 20import { sendTest as sendTestTelegram } from "@openstatus/notification-telegram"; 21import { sendTest as sendWhatsAppTest } from "@openstatus/notification-twillio-whatsapp"; 22import { sendTest as sendTestWebhook } from "@openstatus/notification-webhook"; 23import { 24 BellIcon, 25 Cog, 26 Mail, 27 MessageCircle, 28 Trash2, 29 Webhook, 30} from "lucide-react"; 31 32export const actions = [ 33 { 34 id: "edit", 35 label: "Settings", 36 icon: Cog, 37 variant: "default" as const, 38 }, 39 { 40 id: "delete", 41 label: "Delete", 42 icon: Trash2, 43 variant: "destructive" as const, 44 }, 45] as const; 46 47export type NotifierAction = (typeof actions)[number]; 48 49export const getActions = ( 50 props: Partial<Record<NotifierAction["id"], () => Promise<void> | void>>, 51): (NotifierAction & { onClick?: () => Promise<void> | void })[] => { 52 return actions.map((action) => ({ 53 ...action, 54 onClick: props[action.id as keyof typeof props], 55 })); 56}; 57 58// List of the notifiers 59 60export const config = { 61 slack: { 62 icon: SlackIcon, 63 label: "Slack", 64 form: FormSlack, 65 sendTest: sendTestSlack, 66 }, 67 discord: { 68 icon: DiscordIcon, 69 label: "Discord", 70 form: FormDiscord, 71 sendTest: sendTestDiscord, 72 }, 73 email: { 74 icon: Mail, 75 label: "Email", 76 form: FormEmail, 77 // TODO: add sendTest 78 sendTest: undefined, 79 }, 80 sms: { 81 icon: MessageCircle, 82 label: "SMS", 83 form: FormSms, 84 // TODO: add sendTest 85 sendTest: undefined, 86 }, 87 webhook: { 88 icon: Webhook, 89 label: "Webhook", 90 form: FormWebhook, 91 sendTest: sendTestWebhook, 92 }, 93 opsgenie: { 94 icon: OpsGenieIcon, 95 label: "OpsGenie", 96 form: FormOpsGenie, 97 sendTest: sendTestOpsGenie, 98 }, 99 pagerduty: { 100 icon: PagerDutyIcon, 101 label: "PagerDuty", 102 form: FormPagerDuty, 103 sendTest: sendTestPagerDuty, 104 }, 105 ntfy: { 106 icon: BellIcon, // TODO: add svg icon 107 label: "Ntfy", 108 form: FormNtfy, 109 sendTest: sendTestNtfy, 110 }, 111 telegram: { 112 icon: TelegramIcon, 113 label: "Telegram", 114 form: FormTelegram, 115 sendTest: sendTestTelegram, 116 }, 117 whatsapp: { 118 icon: WhatsappIcon, 119 label: "WhatsApp", 120 form: FormWhatsApp, 121 sendTest: sendWhatsAppTest, 122 }, 123}; 124 125export type NotifierProvider = keyof typeof config;