aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared/types/feeds.ts
blob: 90a187f73de32cbd2f77ba32ffb77c3a0e452860 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { z } from "zod";

const MAX_FEED_URL_LENGTH = 500;
const MAX_FEED_NAME_LENGTH = 100;

export const zAppliesToEnumSchema = z.enum(["all", "text", "images"]);

export const zFeedSchema = z.object({
  id: z.string(),
  name: z.string().min(1).max(MAX_FEED_NAME_LENGTH),
  url: z.string().url(),
  enabled: z.boolean(),
  importTags: z.boolean(),
  lastFetchedStatus: z.enum(["success", "failure", "pending"]).nullable(),
  lastFetchedAt: z.date().nullable(),
});

export type ZFeed = z.infer<typeof zFeedSchema>;

export const zNewFeedSchema = z.object({
  name: z.string().min(1).max(MAX_FEED_NAME_LENGTH),
  url: z.string().max(MAX_FEED_URL_LENGTH).url(),
  enabled: z.boolean(),
  importTags: z.boolean().optional().default(false),
});

export const zUpdateFeedSchema = z.object({
  feedId: z.string(),
  name: z.string().min(1).max(MAX_FEED_NAME_LENGTH).optional(),
  url: z.string().max(MAX_FEED_URL_LENGTH).url().optional(),
  enabled: z.boolean().optional(),
  importTags: z.boolean().optional(),
});