Files
outline/server/routes/api/teams/schema.ts
2024-06-16 09:21:08 -07:00

69 lines
2.7 KiB
TypeScript

import { z } from "zod";
import { TOCPosition, UserRole } from "@shared/types";
import { BaseSchema } from "@server/routes/api/schema";
export const TeamsUpdateSchema = BaseSchema.extend({
body: z.object({
/** Team name */
name: z.string().optional(),
/** Avatar URL */
avatarUrl: z.string().optional(),
/** The subdomain to access the team */
subdomain: z.string().nullish(),
/** Whether public sharing is enabled */
sharing: z.boolean().optional(),
/** Whether siginin with email is enabled */
guestSignin: z.boolean().optional(),
/** Whether third-party document embeds are enabled */
documentEmbeds: z.boolean().optional(),
/** Whether team members are able to create new collections */
memberCollectionCreate: z.boolean().optional(),
/** Whether team members are able to create new workspaces */
memberTeamCreate: z.boolean().optional(),
/** The default landing collection for the team */
defaultCollectionId: z.string().uuid().nullish(),
/** The default user role */
defaultUserRole: z.nativeEnum(UserRole).optional(),
/** Whether new users must be invited to join the team */
inviteRequired: z.boolean().optional(),
/** Domains allowed to sign-in with SSO */
allowedDomains: z.array(z.string()).optional(),
/** Team preferences */
preferences: z
.object({
/** Whether documents have a separate edit mode instead of seamless editing. */
seamlessEdit: z.boolean().optional(),
/** Whether to use team logo across the app for branding. */
publicBranding: z.boolean().optional(),
/** Whether viewers should see download options. */
viewersCanExport: z.boolean().optional(),
/** Whether members can invite new people to the team. */
membersCanInvite: z.boolean().optional(),
/** Whether members can create API keys. */
membersCanCreateApiKey: z.boolean().optional(),
/** Whether commenting is enabled */
commenting: z.boolean().optional(),
/** The custom theme for the team. */
customTheme: z
.object({
accent: z.string().min(4).max(7).regex(/^#/).optional(),
accentText: z.string().min(4).max(7).regex(/^#/).optional(),
})
.optional(),
/** Side to display the document's table of contents in relation to the main content. */
tocPosition: z.nativeEnum(TOCPosition).optional(),
})
.optional(),
}),
});
export type TeamsUpdateSchemaReq = z.infer<typeof TeamsUpdateSchema>;
export const TeamsDeleteSchema = BaseSchema.extend({
body: z.object({
code: z.string(),
}),
});
export type TeamsDeleteSchemaReq = z.infer<typeof TeamsDeleteSchema>;