Openstatus
www.openstatus.dev
1import type {
2 Monitor,
3 Notification,
4 NotificationProvider,
5} from "@openstatus/db/src/schema";
6import type { Region } from "@openstatus/db/src/schema/constants";
7import {
8 sendAlert as sendDiscordAlert,
9 sendDegraded as sendDiscordDegraded,
10 sendRecovery as sendDiscordRecovery,
11} from "@openstatus/notification-discord";
12import {
13 sendAlert as sendEmailAlert,
14 sendDegraded as sendEmailDegraded,
15 sendRecovery as sendEmailRecovery,
16} from "@openstatus/notification-emails";
17import {
18 sendAlert as sendGoogleChatAlert,
19 sendDegraded as sendGoogleChatDegraded,
20 sendRecovery as sendGoogleChatRecovery,
21} from "@openstatus/notification-google-chat";
22import {
23 sendAlert as sendNtfyAlert,
24 sendDegraded as sendNtfyDegraded,
25 sendRecovery as sendNtfyRecovery,
26} from "@openstatus/notification-ntfy";
27import {
28 sendAlert as sendOpsGenieAlert,
29 sendDegraded as sendOpsGenieDegraded,
30 sendRecovery as sendOpsGenieRecovery,
31} from "@openstatus/notification-opsgenie";
32import {
33 sendDegraded as sendPagerDutyDegraded,
34 sendRecovery as sendPagerDutyRecovery,
35 sendAlert as sendPagerdutyAlert,
36} from "@openstatus/notification-pagerduty";
37import {
38 sendAlert as sendSlackAlert,
39 sendDegraded as sendSlackDegraded,
40 sendRecovery as sendSlackRecovery,
41} from "@openstatus/notification-slack";
42import {
43 sendAlert as sendTelegramAlert,
44 sendDegraded as sendTelegramDegraded,
45 sendRecovery as sendTelegramRecovery,
46} from "@openstatus/notification-telegram";
47import {
48 sendAlert as sendSmsAlert,
49 sendDegraded as sendSmsDegraded,
50 sendRecovery as sendSmsRecovery,
51} from "@openstatus/notification-twillio-sms";
52import {
53 sendAlert as sendWhatsappAlert,
54 sendDegraded as sendWhatsappDegraded,
55 sendRecovery as sendWhatsappRecovery,
56} from "@openstatus/notification-twillio-whatsapp";
57import {
58 sendAlert as sendWebhookAlert,
59 sendDegraded as sendWebhookDegraded,
60 sendRecovery as sendWebhookRecovery,
61} from "@openstatus/notification-webhook";
62
63type SendNotification = ({
64 monitor,
65 notification,
66 statusCode,
67 message,
68 incidentId,
69 cronTimestamp,
70 latency,
71 region,
72}: {
73 monitor: Monitor;
74 notification: Notification;
75 statusCode?: number;
76 message?: string;
77 incidentId?: string;
78 cronTimestamp: number;
79 latency?: number;
80 region?: Region;
81}) => Promise<void>;
82
83type Notif = {
84 sendAlert: SendNotification;
85 sendRecovery: SendNotification;
86 sendDegraded: SendNotification;
87};
88
89export const providerToFunction = {
90 discord: {
91 sendAlert: sendDiscordAlert,
92 sendRecovery: sendDiscordRecovery,
93 sendDegraded: sendDiscordDegraded,
94 },
95 email: {
96 sendAlert: sendEmailAlert,
97 sendRecovery: sendEmailRecovery,
98 sendDegraded: sendEmailDegraded,
99 },
100 "google-chat": {
101 sendAlert: sendGoogleChatAlert,
102 sendRecovery: sendGoogleChatRecovery,
103 sendDegraded: sendGoogleChatDegraded,
104 },
105 ntfy: {
106 sendAlert: sendNtfyAlert,
107 sendRecovery: sendNtfyRecovery,
108 sendDegraded: sendNtfyDegraded,
109 },
110 opsgenie: {
111 sendAlert: sendOpsGenieAlert,
112 sendRecovery: sendOpsGenieRecovery,
113 sendDegraded: sendOpsGenieDegraded,
114 },
115 pagerduty: {
116 sendAlert: sendPagerdutyAlert,
117 sendRecovery: sendPagerDutyRecovery,
118 sendDegraded: sendPagerDutyDegraded,
119 },
120 slack: {
121 sendAlert: sendSlackAlert,
122 sendRecovery: sendSlackRecovery,
123 sendDegraded: sendSlackDegraded,
124 },
125 sms: {
126 sendAlert: sendSmsAlert,
127 sendRecovery: sendSmsRecovery,
128 sendDegraded: sendSmsDegraded,
129 },
130 webhook: {
131 sendAlert: sendWebhookAlert,
132 sendRecovery: sendWebhookRecovery,
133 sendDegraded: sendWebhookDegraded,
134 },
135 whatsapp: {
136 sendAlert: sendWhatsappAlert,
137 sendRecovery: sendWhatsappRecovery,
138 sendDegraded: sendWhatsappDegraded,
139 },
140 telegram: {
141 sendAlert: sendTelegramAlert,
142 sendRecovery: sendTelegramRecovery,
143 sendDegraded: sendTelegramDegraded,
144 },
145} satisfies Record<NotificationProvider, Notif>;