* Implement secondary email * Fix already existing tests failing * Added tests for secondary email feature * Skip email verification if user is changing the primary email to a verified secondary email * Fix type errors in tests * Fix email becoming unverified when switched between primary and secondary email * Added a check to prevent prisma error from throwing up due to duplicate records * Improved error handling when adding a secondary email * Add test for resend verification email flow for secondary emails and validation of invite link * Add a new column to link secondary emails with verification tokens * Fix failing to update email to an unverified secondary email of the same user * Fix failing tests * Change text of resend verification email * Add ability to use the verified secondary emails to get the event details to * Fix type errors * Fix failing e2e tests * Fix failing unit tests * Fix failing type checks * Fix secondary verification email subject * Fix failing e2e tests --------- Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { FULL_NAME_LENGTH_MAX_LIMIT } from "@calcom/lib/constants";
|
|
import { bookerLayouts, userMetadata } from "@calcom/prisma/zod-utils";
|
|
|
|
export const updateUserMetadataAllowedKeys = z.object({
|
|
sessionTimeout: z.number().optional(), // Minutes
|
|
defaultBookerLayouts: bookerLayouts.optional(),
|
|
});
|
|
|
|
export const ZUpdateProfileInputSchema = z.object({
|
|
username: z.string().optional(),
|
|
name: z.string().max(FULL_NAME_LENGTH_MAX_LIMIT).optional(),
|
|
email: z.string().optional(),
|
|
bio: z.string().optional(),
|
|
avatar: z.string().nullable().optional(),
|
|
timeZone: z.string().optional(),
|
|
weekStart: z.string().optional(),
|
|
hideBranding: z.boolean().optional(),
|
|
allowDynamicBooking: z.boolean().optional(),
|
|
allowSEOIndexing: z.boolean().optional(),
|
|
receiveMonthlyDigestEmail: z.boolean().optional(),
|
|
brandColor: z.string().optional(),
|
|
darkBrandColor: z.string().optional(),
|
|
theme: z.string().optional().nullable(),
|
|
appTheme: z.string().optional().nullable(),
|
|
completedOnboarding: z.boolean().optional(),
|
|
locale: z.string().optional(),
|
|
timeFormat: z.number().optional(),
|
|
disableImpersonation: z.boolean().optional(),
|
|
metadata: userMetadata.optional(),
|
|
secondaryEmails: z
|
|
.array(
|
|
z.object({
|
|
id: z.number(),
|
|
email: z.string(),
|
|
isDeleted: z.boolean().default(false),
|
|
})
|
|
)
|
|
.optional(),
|
|
});
|
|
|
|
export type TUpdateProfileInputSchema = z.infer<typeof ZUpdateProfileInputSchema>;
|