From 69fa6b73aba4e7ef1c8a8d0207a557d162745430 Mon Sep 17 00:00:00 2001 From: Taesu <166604494+bytaesu@users.noreply.github.com> Date: Mon, 17 Nov 2025 02:14:59 +0900 Subject: [PATCH] chore: update zod email chaining (#6017) --- .../better-auth/src/api/routes/email-verification.ts | 2 +- packages/better-auth/src/api/routes/sign-in.ts | 2 +- packages/better-auth/src/plugins/admin/admin.ts | 2 +- packages/better-auth/src/plugins/email-otp/index.ts | 6 +++--- packages/better-auth/src/plugins/magic-link/index.ts | 9 +++------ .../src/plugins/organization/routes/crud-invites.ts | 2 +- packages/better-auth/src/plugins/siwe/index.ts | 2 +- 7 files changed, 11 insertions(+), 14 deletions(-) diff --git a/packages/better-auth/src/api/routes/email-verification.ts b/packages/better-auth/src/api/routes/email-verification.ts index 8a6d155e6e..9e31d68321 100644 --- a/packages/better-auth/src/api/routes/email-verification.ts +++ b/packages/better-auth/src/api/routes/email-verification.ts @@ -285,7 +285,7 @@ export const verifyEmail = createAuthEndpoint( return redirectOnError("invalid_token"); } const schema = z.object({ - email: z.string().email(), + email: z.email(), updateTo: z.string().optional(), }); const parsed = schema.parse(jwt.payload); diff --git a/packages/better-auth/src/api/routes/sign-in.ts b/packages/better-auth/src/api/routes/sign-in.ts index 085e03ff34..fbec6ac2c2 100644 --- a/packages/better-auth/src/api/routes/sign-in.ts +++ b/packages/better-auth/src/api/routes/sign-in.ts @@ -407,7 +407,7 @@ export const signInEmail = createAuthEndpoint( }); } const { email, password } = ctx.body; - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw new APIError("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, diff --git a/packages/better-auth/src/plugins/admin/admin.ts b/packages/better-auth/src/plugins/admin/admin.ts index 5b1579a89c..792e85755c 100644 --- a/packages/better-auth/src/plugins/admin/admin.ts +++ b/packages/better-auth/src/plugins/admin/admin.ts @@ -466,7 +466,7 @@ export const admin = (options?: O | undefined) => { } const email = ctx.body.email.toLowerCase(); - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw new APIError("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, diff --git a/packages/better-auth/src/plugins/email-otp/index.ts b/packages/better-auth/src/plugins/email-otp/index.ts index ebb3c7571a..16c656e5bf 100644 --- a/packages/better-auth/src/plugins/email-otp/index.ts +++ b/packages/better-auth/src/plugins/email-otp/index.ts @@ -227,7 +227,7 @@ export const emailOTP = (options: EmailOTPOptions) => { }); } const email = ctx.body.email.toLowerCase(); - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw ctx.error("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, @@ -511,7 +511,7 @@ export const emailOTP = (options: EmailOTPOptions) => { }, async (ctx) => { const email = ctx.body.email.toLowerCase(); - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw new APIError("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, @@ -636,7 +636,7 @@ export const emailOTP = (options: EmailOTPOptions) => { }, async (ctx) => { const email = ctx.body.email.toLowerCase(); - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw new APIError("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, diff --git a/packages/better-auth/src/plugins/magic-link/index.ts b/packages/better-auth/src/plugins/magic-link/index.ts index 707dcc768f..4fb1b9941b 100644 --- a/packages/better-auth/src/plugins/magic-link/index.ts +++ b/packages/better-auth/src/plugins/magic-link/index.ts @@ -112,12 +112,9 @@ export const magicLink = (options: MagicLinkopts) => { method: "POST", requireHeaders: true, body: z.object({ - email: z - .string() - .meta({ - description: "Email address to send the magic link", - }) - .email(), + email: z.email().meta({ + description: "Email address to send the magic link", + }), name: z .string() .meta({ diff --git a/packages/better-auth/src/plugins/organization/routes/crud-invites.ts b/packages/better-auth/src/plugins/organization/routes/crud-invites.ts index 20dc065f2b..d38644b46d 100644 --- a/packages/better-auth/src/plugins/organization/routes/crud-invites.ts +++ b/packages/better-auth/src/plugins/organization/routes/crud-invites.ts @@ -185,7 +185,7 @@ export const createInvitation = (option: O) => { } const email = ctx.body.email.toLowerCase(); - const isValidEmail = z.string().email().safeParse(email); + const isValidEmail = z.email().safeParse(email); if (!isValidEmail.success) { throw new APIError("BAD_REQUEST", { message: BASE_ERROR_CODES.INVALID_EMAIL, diff --git a/packages/better-auth/src/plugins/siwe/index.ts b/packages/better-auth/src/plugins/siwe/index.ts index 641e97512b..9cd159ae53 100644 --- a/packages/better-auth/src/plugins/siwe/index.ts +++ b/packages/better-auth/src/plugins/siwe/index.ts @@ -82,7 +82,7 @@ export const siwe = (options: SIWEPluginOptions) => .max(2147483647) .optional() .default(1), - email: z.string().email().optional(), + email: z.email().optional(), }) .refine((data) => options.anonymous !== false || !!data.email, { message: