mirror of
https://github.com/documenso/documenso.git
synced 2026-06-22 04:12:06 +10:00
78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
import { PROTECTED_TEAM_URLS } from '@documenso/lib/constants/teams';
|
|
import { ZNameSchema } from '@documenso/lib/types/name';
|
|
import { zEmail } from '@documenso/lib/utils/zod';
|
|
import { TeamMemberRole } from '@prisma/client';
|
|
import { z } from 'zod';
|
|
|
|
/**
|
|
* Restrict team URLs schema.
|
|
*
|
|
* Allowed characters:
|
|
* - Alphanumeric
|
|
* - Lowercase
|
|
* - Dashes
|
|
* - Underscores
|
|
*
|
|
* Conditions:
|
|
* - 3-30 characters
|
|
* - Cannot start and end with underscores or dashes.
|
|
* - Cannot contain consecutive underscores or dashes.
|
|
* - Cannot be a reserved URL in the PROTECTED_TEAM_URLS list
|
|
*/
|
|
export const ZTeamUrlSchema = z
|
|
.string()
|
|
.trim()
|
|
.min(3, { message: 'Team URL must be at least 3 characters long.' })
|
|
.max(30, { message: 'Team URL must not exceed 30 characters.' })
|
|
.toLowerCase()
|
|
.regex(/^[a-z0-9].*[^_-]$/, 'Team URL cannot start or end with dashes or underscores.')
|
|
.regex(/^(?!.*[-_]{2})/, 'Team URL cannot contain consecutive dashes or underscores.')
|
|
.regex(/^[a-z0-9]+(?:[-_][a-z0-9]+)*$/, 'Team URL can only contain letters, numbers, dashes and underscores.')
|
|
.refine((value) => !PROTECTED_TEAM_URLS.includes(value), {
|
|
message: 'This URL is already in use.',
|
|
});
|
|
|
|
export const ZCreateTeamEmailVerificationMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
name: ZNameSchema,
|
|
email: zEmail().trim().toLowerCase().min(1, 'Please enter a valid email.'),
|
|
});
|
|
|
|
export const ZDeleteTeamEmailMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
});
|
|
|
|
export const ZDeleteTeamEmailVerificationMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
});
|
|
|
|
export const ZGetTeamMembersQuerySchema = z.object({
|
|
teamId: z.number(),
|
|
});
|
|
|
|
export const ZUpdateTeamEmailMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
data: z.object({
|
|
name: ZNameSchema,
|
|
}),
|
|
});
|
|
|
|
export const ZUpdateTeamMemberMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
teamMemberId: z.number(),
|
|
data: z.object({
|
|
role: z.nativeEnum(TeamMemberRole),
|
|
}),
|
|
});
|
|
|
|
export const ZResendTeamEmailVerificationMutationSchema = z.object({
|
|
teamId: z.number(),
|
|
});
|
|
|
|
export type TCreateTeamEmailVerificationMutationSchema = z.infer<typeof ZCreateTeamEmailVerificationMutationSchema>;
|
|
|
|
export type TDeleteTeamEmailMutationSchema = z.infer<typeof ZDeleteTeamEmailMutationSchema>;
|
|
export type TGetTeamMembersQuerySchema = z.infer<typeof ZGetTeamMembersQuerySchema>;
|
|
export type TUpdateTeamEmailMutationSchema = z.infer<typeof ZUpdateTeamEmailMutationSchema>;
|
|
export type TResendTeamEmailVerificationMutationSchema = z.infer<typeof ZResendTeamEmailVerificationMutationSchema>;
|