feat(shared): add auth types and zod schemas
This commit is contained in:
@@ -43,3 +43,68 @@ export type CardCreateInput = z.infer<typeof cardCreateSchema>;
|
||||
export type CardUpdateInput = z.infer<typeof cardUpdateSchema>;
|
||||
export type SessionStartInput = z.infer<typeof sessionStartSchema>;
|
||||
export type AttemptCreateInput = z.infer<typeof attemptCreateSchema>;
|
||||
|
||||
export const emailSchema = z.string().email().max(320).transform((v) => v.trim().toLowerCase());
|
||||
|
||||
export const registerSchema = z.object({
|
||||
email: emailSchema,
|
||||
displayName: z.string().trim().min(1).max(120),
|
||||
password: z.string().min(8).max(200),
|
||||
});
|
||||
|
||||
export const loginSchema = z.object({
|
||||
email: emailSchema,
|
||||
password: z.string().min(1).max(200),
|
||||
});
|
||||
|
||||
export const forgotPasswordSchema = z.object({ email: emailSchema });
|
||||
|
||||
export const resetPasswordSchema = z.object({
|
||||
token: z.string().min(20).max(200),
|
||||
password: z.string().min(8).max(200),
|
||||
});
|
||||
|
||||
export const verifyEmailSchema = z.object({
|
||||
token: z.string().min(20).max(200),
|
||||
});
|
||||
|
||||
export const resendVerificationSchema = z.object({ email: emailSchema });
|
||||
|
||||
export const profileUpdateSchema = z.object({
|
||||
displayName: z.string().trim().min(1).max(120).optional(),
|
||||
email: emailSchema.optional(),
|
||||
});
|
||||
|
||||
export const changePasswordSchema = z.object({
|
||||
currentPassword: z.string().min(1).max(200),
|
||||
newPassword: z.string().min(8).max(200),
|
||||
});
|
||||
|
||||
export const acceptInviteSchema = z.object({
|
||||
token: z.string().min(20).max(200),
|
||||
displayName: z.string().trim().min(1).max(120),
|
||||
password: z.string().min(8).max(200),
|
||||
});
|
||||
|
||||
export const inviteUserSchema = z.object({
|
||||
email: emailSchema,
|
||||
role: z.enum(['user', 'sysadmin']).default('user'),
|
||||
});
|
||||
|
||||
export const adminUserUpdateSchema = z.object({
|
||||
displayName: z.string().trim().min(1).max(120).optional(),
|
||||
role: z.enum(['user', 'sysadmin']).optional(),
|
||||
isActive: z.boolean().optional(),
|
||||
});
|
||||
|
||||
export type RegisterInput = z.infer<typeof registerSchema>;
|
||||
export type LoginInput = z.infer<typeof loginSchema>;
|
||||
export type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>;
|
||||
export type ResetPasswordInput = z.infer<typeof resetPasswordSchema>;
|
||||
export type VerifyEmailInput = z.infer<typeof verifyEmailSchema>;
|
||||
export type ResendVerificationInput = z.infer<typeof resendVerificationSchema>;
|
||||
export type ProfileUpdateInput = z.infer<typeof profileUpdateSchema>;
|
||||
export type ChangePasswordInput = z.infer<typeof changePasswordSchema>;
|
||||
export type AcceptInviteInput = z.infer<typeof acceptInviteSchema>;
|
||||
export type InviteUserInput = z.infer<typeof inviteUserSchema>;
|
||||
export type AdminUserUpdateInput = z.infer<typeof adminUserUpdateSchema>;
|
||||
|
||||
@@ -71,3 +71,24 @@ export interface SessionSettings {
|
||||
shuffle: boolean;
|
||||
direction: 'forward' | 'backward' | 'both';
|
||||
}
|
||||
|
||||
export type Role = 'user' | 'sysadmin';
|
||||
|
||||
export interface User {
|
||||
id: number;
|
||||
email: string;
|
||||
displayName: string;
|
||||
role: Role;
|
||||
isActive: boolean;
|
||||
emailVerifiedAt: number | null;
|
||||
pendingEmail: string | null;
|
||||
createdAt: number;
|
||||
updatedAt: number;
|
||||
}
|
||||
|
||||
export interface PublicUser {
|
||||
id: number;
|
||||
email: string;
|
||||
displayName: string;
|
||||
role: Role;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user