From a37532bcf90b7a73402ddbc14729d22e61cb4f10 Mon Sep 17 00:00:00 2001 From: Bereket Engida Date: Mon, 21 Oct 2024 10:07:19 +0300 Subject: [PATCH] fix(adapter): handle delete gracefully --- .../src/adapters/prisma-adapter/index.ts | 4 +++- packages/better-auth/src/adapters/test.ts | 12 ++++++++++++ .../src/plugins/multi-session/index.ts | 18 +++++++++--------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/better-auth/src/adapters/prisma-adapter/index.ts b/packages/better-auth/src/adapters/prisma-adapter/index.ts index 9ab06e4c1c..a2733da28e 100644 --- a/packages/better-auth/src/adapters/prisma-adapter/index.ts +++ b/packages/better-auth/src/adapters/prisma-adapter/index.ts @@ -164,7 +164,9 @@ export const prismaAdapter = ( const { model, where } = data; const whereClause = whereConvertor(where); - return await db[model].delete({ where: whereClause }); + return await db[model].delete({ where: whereClause }).catch((e) => { + //handle delete gracefully (if not found) + }); }, async deleteMany(data) { const { model, where } = data; diff --git a/packages/better-auth/src/adapters/test.ts b/packages/better-auth/src/adapters/test.ts index 278e0decc2..9e6c48db03 100644 --- a/packages/better-auth/src/adapters/test.ts +++ b/packages/better-auth/src/adapters/test.ts @@ -293,6 +293,18 @@ export async function runAdapterTest(opts: AdapterTestOptions) { expect(findRes.length).toBe(0); }); + test("shouldn't throw on delete record not found", async () => { + await adapter.delete({ + model: "user", + where: [ + { + field: "id", + value: "5", + }, + ], + }); + }); + test("shouldn't throw on record not found", async () => { const res = await adapter.findOne({ model: "user", diff --git a/packages/better-auth/src/plugins/multi-session/index.ts b/packages/better-auth/src/plugins/multi-session/index.ts index 9fbb547bf1..6804738c48 100644 --- a/packages/better-auth/src/plugins/multi-session/index.ts +++ b/packages/better-auth/src/plugins/multi-session/index.ts @@ -119,7 +119,7 @@ export const multiSession = (options?: MultiSessionConfig) => { return ctx.json(session); }, ), - DeviceSession: createAuthEndpoint( + revokeDeviceSession: createAuthEndpoint( "/multi-session/revoke", { method: "POST", @@ -143,7 +143,7 @@ export const multiSession = (options?: MultiSessionConfig) => { } const session = await ctx.context.internalAdapter.findSession(sessionId); - if (!session || session.session.expiresAt < new Date()) { + if (!session) { ctx.setCookie(multiSessionCookieName, "", { ...ctx.context.authCookies.sessionToken.options, maxAge: 0, @@ -228,13 +228,13 @@ export const multiSession = (options?: MultiSessionConfig) => { Object.entries(cookies).map(async ([key, value]) => { if (isMultiSessionCookie(key)) { ctx.setCookie(key, "", { maxAge: 0 }); - try { - await ctx.context.internalAdapter.deleteSession( - key.split("_multi-")[1], - ); - } catch (e) { - // ignore - } + const id = key.split("_multi-")[1]; + /** + * Adapter fails if deleting a session that doesn't exist + */ + await ctx.context.internalAdapter + .deleteSession(id) + .catch((e) => {}); } }), );