79 lines
3.2 KiB
TypeScript
79 lines
3.2 KiB
TypeScript
import { z } from "zod";
|
|
|
|
//****************************************
|
|
// Notification Validations
|
|
//****************************************
|
|
|
|
export const createNotificationBodyValidation = z.discriminatedUnion("type", [
|
|
// Email notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("email"),
|
|
address: z.email("Please enter a valid e-mail address"),
|
|
homeserverUrl: z.union([z.string(), z.literal("")]).optional(),
|
|
roomId: z.union([z.string(), z.literal("")]).optional(),
|
|
accessToken: z.union([z.string(), z.literal("")]).optional(),
|
|
}),
|
|
// Webhook notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("webhook"),
|
|
address: z.string().url("Please enter a valid Webhook URL"),
|
|
homeserverUrl: z.union([z.string(), z.literal("")]).optional(),
|
|
roomId: z.union([z.string(), z.literal("")]).optional(),
|
|
accessToken: z.union([z.string(), z.literal("")]).optional(),
|
|
}),
|
|
// Slack notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("slack"),
|
|
address: z.string().url("Please enter a valid Webhook URL"),
|
|
homeserverUrl: z.union([z.string(), z.literal("")]).optional(),
|
|
roomId: z.union([z.string(), z.literal("")]).optional(),
|
|
accessToken: z.union([z.string(), z.literal("")]).optional(),
|
|
}),
|
|
// Discord notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("discord"),
|
|
address: z.string().url("Please enter a valid Webhook URL"),
|
|
homeserverUrl: z.union([z.string(), z.literal("")]).optional(),
|
|
roomId: z.union([z.string(), z.literal("")]).optional(),
|
|
accessToken: z.union([z.string(), z.literal("")]).optional(),
|
|
}),
|
|
// PagerDuty notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("pager_duty"),
|
|
address: z.string().min(1, "PagerDuty integration key is required"),
|
|
homeserverUrl: z.union([z.string(), z.literal("")]).optional(),
|
|
roomId: z.union([z.string(), z.literal("")]).optional(),
|
|
accessToken: z.union([z.string(), z.literal("")]).optional(),
|
|
}),
|
|
// Matrix notification
|
|
z.object({
|
|
notificationName: z.string().min(1, "Notification name is required"),
|
|
type: z.literal("matrix"),
|
|
address: z.union([z.string(), z.literal("")]).optional(),
|
|
homeserverUrl: z.string().url("Please enter a valid Homeserver URL"),
|
|
roomId: z.string().min(1, "Room ID is required"),
|
|
accessToken: z.string().min(1, "Access Token is required"),
|
|
}),
|
|
]);
|
|
|
|
export const sendTestEmailBodyValidation = z.object({
|
|
to: z.string().min(1, "To field is required"),
|
|
systemEmailHost: z.string().optional(),
|
|
systemEmailPort: z.number().optional(),
|
|
systemEmailSecure: z.boolean().optional(),
|
|
systemEmailPool: z.boolean().optional(),
|
|
systemEmailAddress: z.string().optional(),
|
|
systemEmailPassword: z.string().optional(),
|
|
systemEmailUser: z.string().optional(),
|
|
systemEmailConnectionHost: z.union([z.string(), z.literal("")]).optional(),
|
|
systemEmailIgnoreTLS: z.boolean().optional(),
|
|
systemEmailRequireTLS: z.boolean().optional(),
|
|
systemEmailRejectUnauthorized: z.boolean().optional(),
|
|
systemEmailTLSServername: z.union([z.string(), z.literal("")]).optional(),
|
|
});
|