1
4
5import { z } from "zod";
6
7export const notificationChannelSchema = z.enum(["in_app", "email", "webhook"]);
8export type NotificationChannelInput = z.infer<typeof notificationChannelSchema>;
9
10export const notificationTypeSchema = z.enum([
11 "mention",
12 "comment",
13 "assignment",
14 "page_shared",
15 "task_assigned",
16 "database_change",
17 "automation",
18 "integration",
19]);
20export type NotificationTypeInput = z.infer<typeof notificationTypeSchema>;
21
22
24export const createNotificationSchema = z
25 .object({
26 userId: z.string().min(1),
27 type: notificationTypeSchema,
28
29 title: z.string().min(1).max(200),
30 body: z.string().max(2000).optional(),
31
32 link: z.string().max(500).optional(),
33
34 channels: z.array(notificationChannelSchema).min(1).max(3).optional(),
35 actorId: z.string().min(1).optional(),
36 refType: z.string().min(1).optional(),
37 refId: z.string().min(1).optional(),
38 })
39 .strict();
40export type CreateNotification = z.infer<typeof createNotificationSchema>;
41
42export const markNotificationsReadSchema = z
43 .object({
44 notificationIds: z.array(z.string().min(1)).min(1).max(500).optional(),
45
46 upTo: z
47 .string()
48 .refine((s) => Number.isFinite(Date.parse(s)), { message: "invalid ISO date" })
49 .optional(),
50 })
51 .strict();
52export type MarkNotificationsRead = z.infer<typeof markNotificationsReadSchema>;
53