1import { z } from "zod";
2
3
11
12export const CreateUploadDto = z.object({
13 name: z.string().min(1).max(512),
14
18 size: z.number().int().positive(),
19 mimeType: z.string().min(1).max(200),
20
21
22
23
24
25 pageId: z.string().min(1).nullable().optional(),
26 blockId: z.string().min(1).nullable().optional(),
27
29 replaceFileId: z.string().min(1).nullable().optional(),
30});
31export type CreateUploadInput = z.infer<typeof CreateUploadDto>;
32
33
35export const CompleteUploadDto = z
36 .object({
37 sha256: z.string().regex(/^[0-9a-f]{64}$/).optional(),
38 })
39 .optional()
40 .default({});
41export type CompleteUploadInput = z.infer<typeof CompleteUploadDto>;
42
43export const CancelUploadDto = z.object({}).optional().default({});
44export type CancelUploadInput = z.infer<typeof CancelUploadDto>;
45
46
47export const ListFilesQuery = z.object({
48 scope: z.enum(["page", "workspace"]).default("workspace"),
49 pageId: z.string().min(1).optional(),
50 kind: z.enum(["image", "video", "audio", "pdf", "doc", "other"]).optional(),
51 status: z
52 .enum(["UPLOADING", "SCANNING", "READY", "VIRUS_DETECTED", "FAILED"])
53 .optional(),
54 search: z.string().max(200).optional(),
55 sort: z.enum(["name", "size", "date", "updated"]).default("updated"),
56 cursor: z.string().optional(),
57 limit: z.coerce.number().int().min(1).max(100).default(50),
58});
59export type ListFilesInput = z.infer<typeof ListFilesQuery>;
60
61export const RenameFileDto = z.object({ name: z.string().min(1).max(512) });
62export type RenameFileInput = z.infer<typeof RenameFileDto>;
63
64
65
66
67export const RollbackFileDto = z.object({
68 version: z.number().int().positive().max(10_000),
69});
70export type RollbackFileInput = z.infer<typeof RollbackFileDto>;
71
72
73export const FilePermissionGrantDto = z.object({
74 granteeType: z.enum(["user", "team", "role"]),
75
76 granteeId: z.string().min(1).max(128),
77
78 level: z.enum(["NONE", "VIEW", "COMMENT", "EDIT", "FULL_ACCESS"]),
79});
80
81
82export const SetPermissionsDto = z.object({
83 grants: z.array(FilePermissionGrantDto).max(200),
84});
85export type SetPermissionsInput = z.infer<typeof SetPermissionsDto>;
86