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 sendNtfyAlert,
19 sendDegraded as sendNtfyDegraded,
20 sendRecovery as sendNtfyRecovery,
21} from "@openstatus/notification-ntfy";
22import {
23 sendAlert as sendOpsGenieAlert,
24 sendDegraded as sendOpsGenieDegraded,
25 sendRecovery as sendOpsGenieRecovery,
26} from "@openstatus/notification-opsgenie";
27import {
28 sendDegraded as sendPagerDutyDegraded,
29 sendRecovery as sendPagerDutyRecovery,
30 sendAlert as sendPagerdutyAlert,
31} from "@openstatus/notification-pagerduty";
32import {
33 sendAlert as sendSlackAlert,
34 sendDegraded as sendSlackDegraded,
35 sendRecovery as sendSlackRecovery,
36} from "@openstatus/notification-slack";
37import {
38 sendAlert as sendTelegramAlert,
39 sendDegraded as sendTelegramDegraded,
40 sendRecovery as sendTelegramRecovery,
41} from "@openstatus/notification-telegram";
42import {
43 sendAlert as sendSmsAlert,
44 sendDegraded as sendSmsDegraded,
45 sendRecovery as sendSmsRecovery,
46} from "@openstatus/notification-twillio-sms";
47import {
48 sendAlert as sendWebhookAlert,
49 sendDegraded as sendWebhookDegraded,
50 sendRecovery as sendWebhookRecovery,
51} from "@openstatus/notification-webhook";
52
53type SendNotification = ({
54 monitor,
55 notification,
56 statusCode,
57 message,
58 incidentId,
59 cronTimestamp,
60 latency,
61 region,
62}: {
63 monitor: Monitor;
64 notification: Notification;
65 statusCode?: number;
66 message?: string;
67 incidentId?: string;
68 cronTimestamp: number;
69 latency?: number;
70 region?: Region;
71}) => Promise<void>;
72
73type Notif = {
74 sendAlert: SendNotification;
75 sendRecovery: SendNotification;
76 sendDegraded: SendNotification;
77};
78
79export const providerToFunction = {
80 discord: {
81 sendAlert: sendDiscordAlert,
82 sendRecovery: sendDiscordRecovery,
83 sendDegraded: sendDiscordDegraded,
84 },
85 email: {
86 sendAlert: sendEmailAlert,
87 sendRecovery: sendEmailRecovery,
88 sendDegraded: sendEmailDegraded,
89 },
90 ntfy: {
91 sendAlert: sendNtfyAlert,
92 sendRecovery: sendNtfyRecovery,
93 sendDegraded: sendNtfyDegraded,
94 },
95 opsgenie: {
96 sendAlert: sendOpsGenieAlert,
97 sendRecovery: sendOpsGenieRecovery,
98 sendDegraded: sendOpsGenieDegraded,
99 },
100 pagerduty: {
101 sendAlert: sendPagerdutyAlert,
102 sendRecovery: sendPagerDutyRecovery,
103 sendDegraded: sendPagerDutyDegraded,
104 },
105 slack: {
106 sendAlert: sendSlackAlert,
107 sendRecovery: sendSlackRecovery,
108 sendDegraded: sendSlackDegraded,
109 },
110 sms: {
111 sendAlert: sendSmsAlert,
112 sendRecovery: sendSmsRecovery,
113 sendDegraded: sendSmsDegraded,
114 },
115 webhook: {
116 sendAlert: sendWebhookAlert,
117 sendRecovery: sendWebhookRecovery,
118 sendDegraded: sendWebhookDegraded,
119 },
120 telegram: {
121 sendAlert: sendTelegramAlert,
122 sendRecovery: sendTelegramRecovery,
123 sendDegraded: sendTelegramDegraded,
124 },
125} satisfies Record<NotificationProvider, Notif>;