From 95fd56823152aaaadf3987145f950fd08527fe2f Mon Sep 17 00:00:00 2001 From: Bereket Engida <86073083+Bekacru@users.noreply.github.com> Date: Sun, 8 Dec 2024 10:54:58 +0300 Subject: [PATCH] feat: error codes (#771) --- .../better-auth/src/api/routes/account.ts | 5 +- .../src/api/routes/email-verification.ts | 3 +- .../src/api/routes/forget-password.ts | 5 +- .../better-auth/src/api/routes/session.ts | 3 +- .../better-auth/src/api/routes/sign-in.ts | 28 +++++------ .../better-auth/src/api/routes/sign-out.ts | 3 +- .../better-auth/src/api/routes/sign-up.ts | 48 +++++++++--------- .../better-auth/src/api/routes/update-user.ts | 23 ++++----- packages/better-auth/src/auth.ts | 17 ++++++- .../better-auth/src/client/react/index.ts | 7 ++- .../better-auth/src/client/solid/index.ts | 9 ++-- .../better-auth/src/client/svelte/index.ts | 7 ++- packages/better-auth/src/client/types.ts | 11 +++++ packages/better-auth/src/client/vanilla.ts | 9 ++-- packages/better-auth/src/client/vue/index.ts | 7 ++- packages/better-auth/src/error/codes.ts | 22 +++++++++ .../src/plugins/admin/admin.test.ts | 49 +++++++++---------- .../better-auth/src/plugins/admin/index.ts | 17 +++++-- .../src/plugins/anonymous/anon.test.ts | 29 +++++------ .../src/plugins/anonymous/index.ts | 15 ++++-- .../src/plugins/email-otp/index.ts | 17 +++++-- .../src/plugins/generic-oauth/index.ts | 6 ++- .../src/plugins/magic-link/index.ts | 13 +++-- .../src/plugins/multi-session/index.ts | 11 +++-- .../src/plugins/organization/error-codes.ts | 34 +++++++++++++ .../src/plugins/organization/organization.ts | 7 ++- .../organization/routes/crud-invites.ts | 43 +++++++++------- .../organization/routes/crud-members.ts | 35 +++++++------ .../plugins/organization/routes/crud-org.ts | 30 +++++++----- .../better-auth/src/plugins/passkey/index.ts | 36 +++++++++----- .../src/plugins/phone-number/index.ts | 33 ++++++++----- .../plugins/two-factor/backup-codes/index.ts | 9 ++-- .../src/plugins/two-factor/error-code.ts | 8 +++ .../src/plugins/two-factor/index.ts | 4 +- .../src/plugins/two-factor/otp/index.ts | 7 +-- .../src/plugins/two-factor/totp/index.ts | 7 +-- .../better-auth/src/plugins/username/index.ts | 20 +++++--- packages/better-auth/src/types/plugins.ts | 17 ++++++- 38 files changed, 443 insertions(+), 211 deletions(-) create mode 100644 packages/better-auth/src/error/codes.ts create mode 100644 packages/better-auth/src/plugins/organization/error-codes.ts create mode 100644 packages/better-auth/src/plugins/two-factor/error-code.ts diff --git a/packages/better-auth/src/api/routes/account.ts b/packages/better-auth/src/api/routes/account.ts index cb74d496e5..2df6307771 100644 --- a/packages/better-auth/src/api/routes/account.ts +++ b/packages/better-auth/src/api/routes/account.ts @@ -4,6 +4,7 @@ import { socialProviderList } from "../../social-providers"; import { APIError } from "better-call"; import { generateState } from "../../oauth2"; import { sessionMiddleware } from "./session"; +import { BASE_ERROR_CODES } from "../../error/codes"; export const listUserAccounts = createAuthEndpoint( "/list-accounts", @@ -123,7 +124,7 @@ export const linkSocialAccount = createAuthEndpoint( ); if (existingAccount) { throw new APIError("BAD_REQUEST", { - message: "Social Account is already linked.", + message: BASE_ERROR_CODES.SOCIAL_ACCOUNT_ALREADY_LINKED, }); } const provider = c.context.socialProviders.find( @@ -137,7 +138,7 @@ export const linkSocialAccount = createAuthEndpoint( }, ); throw new APIError("NOT_FOUND", { - message: "Provider not found", + message: BASE_ERROR_CODES.PROVIDER_NOT_FOUND, }); } const state = await generateState(c, { diff --git a/packages/better-auth/src/api/routes/email-verification.ts b/packages/better-auth/src/api/routes/email-verification.ts index eb1fd945fd..c1b0297797 100644 --- a/packages/better-auth/src/api/routes/email-verification.ts +++ b/packages/better-auth/src/api/routes/email-verification.ts @@ -6,6 +6,7 @@ import { APIError } from "better-call"; import { getSessionFromCtx } from "./session"; import { setSessionCookie } from "../../cookies"; import type { GenericEndpointContext, User } from "../../types"; +import { BASE_ERROR_CODES } from "../../error/codes"; export async function createEmailVerificationToken( secret: string, @@ -143,7 +144,7 @@ export const sendVerificationEmail = createAuthEndpoint( const user = await ctx.context.internalAdapter.findUserByEmail(email); if (!user) { throw new APIError("BAD_REQUEST", { - message: "User not found", + message: BASE_ERROR_CODES.USER_NOT_FOUND, }); } await sendVerificationEmailFn(ctx, user.user); diff --git a/packages/better-auth/src/api/routes/forget-password.ts b/packages/better-auth/src/api/routes/forget-password.ts index 46b878a652..839334440c 100644 --- a/packages/better-auth/src/api/routes/forget-password.ts +++ b/packages/better-auth/src/api/routes/forget-password.ts @@ -4,6 +4,7 @@ import { APIError } from "better-call"; import type { AuthContext } from "../../init"; import { getDate } from "../../utils/date"; import { generateId } from "../../utils"; +import { BASE_ERROR_CODES } from "../../error/codes"; function redirectError( ctx: AuthContext, @@ -241,7 +242,7 @@ export const resetPassword = createAuthEndpoint( : ""); if (!token) { throw new APIError("BAD_REQUEST", { - message: "Token not found", + message: BASE_ERROR_CODES.INVALID_TOKEN, }); } @@ -252,7 +253,7 @@ export const resetPassword = createAuthEndpoint( await ctx.context.internalAdapter.findVerificationValue(id); if (!verification || verification.expiresAt < new Date()) { throw new APIError("BAD_REQUEST", { - message: "Invalid token", + message: BASE_ERROR_CODES.INVALID_TOKEN, }); } await ctx.context.internalAdapter.deleteVerificationValue(verification.id); diff --git a/packages/better-auth/src/api/routes/session.ts b/packages/better-auth/src/api/routes/session.ts index 4ae9f46f6e..bbebca4edf 100644 --- a/packages/better-auth/src/api/routes/session.ts +++ b/packages/better-auth/src/api/routes/session.ts @@ -14,6 +14,7 @@ import type { } from "../../types"; import { hmac } from "../../crypto/hash"; import { safeJSONParse } from "../../utils/json"; +import { BASE_ERROR_CODES } from "../../error/codes"; export const getSession =