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