From a021eafaf235dd08c0835d91ee714aca24c4605e Mon Sep 17 00:00:00 2001 From: Svend Date: Sat, 22 Aug 2026 10:19:03 +0200 Subject: [PATCH] fix(client): a client with more plugins fits a narrower client type again (#10907) Co-authored-by: Taesu --- .changeset/hydrate-session-variance.md | 5 +++++ packages/better-auth/src/client/client.test.ts | 14 ++++++++++++++ packages/better-auth/src/client/lynx/index.ts | 4 +--- packages/better-auth/src/client/react/index.ts | 4 +--- packages/better-auth/src/client/solid/index.ts | 4 +--- packages/better-auth/src/client/svelte/index.ts | 4 +--- packages/better-auth/src/client/vanilla.ts | 4 +--- packages/better-auth/src/client/vue/index.ts | 4 +--- 8 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 .changeset/hydrate-session-variance.md diff --git a/.changeset/hydrate-session-variance.md b/.changeset/hydrate-session-variance.md new file mode 100644 index 0000000000..69f9b2d4e9 --- /dev/null +++ b/.changeset/hydrate-session-variance.md @@ -0,0 +1,5 @@ +--- +"better-auth": patch +--- + +A client created with more plugins is again assignable to a client type declaring fewer plugins, as in 1.6. diff --git a/packages/better-auth/src/client/client.test.ts b/packages/better-auth/src/client/client.test.ts index 7cb8f6b2aa..8fe9124bb5 100644 --- a/packages/better-auth/src/client/client.test.ts +++ b/packages/better-auth/src/client/client.test.ts @@ -17,6 +17,7 @@ import { organizationClient, twoFactorClient, } from "./plugins"; +import type { ReactAuthClient } from "./react"; import { createAuthClient as createReactClient } from "./react"; import { createAuthClient as createSolidClient } from "./solid"; import { createAuthClient as createSvelteClient } from "./svelte"; @@ -419,6 +420,19 @@ describe("run time proxy", async () => { }); describe("type", () => { + /** + * @see https://github.com/better-auth/better-auth/issues/10897 + */ + it("keeps a client with more plugins assignable to a client type with fewer plugins", () => { + type EmailOtpClient = ReactAuthClient<{ + plugins: [ReturnType]; + }>; + const client = createReactClient({ + plugins: [emailOTPClient(), adminClient()], + }); + expectTypeOf(client).toMatchTypeOf(); + }); + it("should not infer non-action endpoints", () => { const client = createReactClient({ plugins: [testClientPlugin()], diff --git a/packages/better-auth/src/client/lynx/index.ts b/packages/better-auth/src/client/lynx/index.ts index afa9decdc1..22390a8298 100644 --- a/packages/better-auth/src/client/lynx/index.ts +++ b/packages/better-auth/src/client/lynx/index.ts @@ -60,9 +60,7 @@ export type LynxAuthClient