diff --git a/docs/content/docs/adapters/drizzle.mdx b/docs/content/docs/adapters/drizzle.mdx index 889d69d8b2..0a6e323d97 100644 --- a/docs/content/docs/adapters/drizzle.mdx +++ b/docs/content/docs/adapters/drizzle.mdx @@ -61,7 +61,7 @@ To generate and apply the migration, run the following commands: ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/mongo.mdx b/docs/content/docs/adapters/mongo.mdx index 064e62a2fe..5f37e05d25 100644 --- a/docs/content/docs/adapters/mongo.mdx +++ b/docs/content/docs/adapters/mongo.mdx @@ -41,7 +41,7 @@ For MongoDB, we don't need to generate or migrate the schema. ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/mssql.mdx b/docs/content/docs/adapters/mssql.mdx index c190de911b..80d49ebc70 100644 --- a/docs/content/docs/adapters/mssql.mdx +++ b/docs/content/docs/adapters/mssql.mdx @@ -105,7 +105,7 @@ your database schema based on your Better Auth configuration and plugins. ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/mysql.mdx b/docs/content/docs/adapters/mysql.mdx index 076ec949d8..de36af7bd6 100644 --- a/docs/content/docs/adapters/mysql.mdx +++ b/docs/content/docs/adapters/mysql.mdx @@ -83,7 +83,7 @@ your database schema based on your Better Auth configuration and plugins. ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/postgresql.mdx b/docs/content/docs/adapters/postgresql.mdx index 3e6b4e0ff6..5f6b180dbb 100644 --- a/docs/content/docs/adapters/postgresql.mdx +++ b/docs/content/docs/adapters/postgresql.mdx @@ -69,7 +69,7 @@ your database schema based on your Better Auth configuration and plugins. ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/prisma.mdx b/docs/content/docs/adapters/prisma.mdx index 5b5ff4274f..d916a2e023 100644 --- a/docs/content/docs/adapters/prisma.mdx +++ b/docs/content/docs/adapters/prisma.mdx @@ -69,7 +69,7 @@ npx auth@latest generate ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/docs/content/docs/adapters/sqlite.mdx b/docs/content/docs/adapters/sqlite.mdx index 22884a6819..161b0938a3 100644 --- a/docs/content/docs/adapters/sqlite.mdx +++ b/docs/content/docs/adapters/sqlite.mdx @@ -110,7 +110,7 @@ your database schema based on your Better Auth configuration and plugins. ## Joins -Database joins is useful when Better-Auth needs to fetch related data from multiple tables in a single query. +Database joins are useful when Better-Auth needs to fetch related data from multiple tables in a single query. Endpoints like `/get-session`, `/get-full-organization` and many others benefit greatly from this feature, seeing upwards of 2x to 3x performance improvements depending on database latency. diff --git a/packages/api-key/CHANGELOG.md b/packages/api-key/CHANGELOG.md index feaab089ff..ab0fce1ab8 100644 --- a/packages/api-key/CHANGELOG.md +++ b/packages/api-key/CHANGELOG.md @@ -58,6 +58,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/better-auth/CHANGELOG.md b/packages/better-auth/CHANGELOG.md index 6867e619df..0ecf9b3ed2 100644 --- a/packages/better-auth/CHANGELOG.md +++ b/packages/better-auth/CHANGELOG.md @@ -416,6 +416,34 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - @better-auth/drizzle-adapter@1.6.30 + - @better-auth/kysely-adapter@1.6.30 + - @better-auth/memory-adapter@1.6.30 + - @better-auth/mongo-adapter@1.6.30 + - @better-auth/prisma-adapter@1.6.30 + - @better-auth/telemetry@1.6.30 + +## 1.6.29 + +### Patch Changes + +- [#10805](https://github.com/better-auth/better-auth/pull/10805) [`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3) Thanks [@Emmaccen](https://github.com/Emmaccen)! - Speed up batch session revocation when secondary storage is enabled by deleting sessions in parallel. + +- Updated dependencies []: + - @better-auth/core@1.6.29 + - @better-auth/drizzle-adapter@1.6.29 + - @better-auth/kysely-adapter@1.6.29 + - @better-auth/memory-adapter@1.6.29 + - @better-auth/mongo-adapter@1.6.29 + - @better-auth/prisma-adapter@1.6.29 + - @better-auth/telemetry@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/better-auth/src/db/internal-adapter.ts b/packages/better-auth/src/db/internal-adapter.ts index 7446f07daa..0dc914c258 100644 --- a/packages/better-auth/src/db/internal-adapter.ts +++ b/packages/better-auth/src/db/internal-adapter.ts @@ -973,12 +973,9 @@ export const createInternalAdapter = ( }, deleteSessions: async (sessionTokens: string[]) => { if (secondaryStorage) { - for (const sessionToken of sessionTokens) { - const session = await secondaryStorage.get(sessionToken); - if (session) { - await secondaryStorage.delete(sessionToken); - } - } + await Promise.all( + sessionTokens.map((token) => secondaryStorage.delete(token)), + ); if (!options.session?.storeSessionInDatabase) { return; diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b213118061..36605bb7b2 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -133,6 +133,24 @@ - [#9547](https://github.com/better-auth/better-auth/pull/9547) [`15bb169`](https://github.com/better-auth/better-auth/commit/15bb1690b274b9f1e2a58c5db039bd240dc5e99b) Thanks [@GautamBytes](https://github.com/GautamBytes)! - Add a `create-admin` CLI command for creating an initial admin user through the configured Better Auth instance. +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + - @better-auth/telemetry@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + - @better-auth/telemetry@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 4da5badb37..2b98302de2 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -167,6 +167,14 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- [#10833](https://github.com/better-auth/better-auth/pull/10833) [`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99) Thanks [@bytaesu](https://github.com/bytaesu)! - Prevent concurrent cold-start requests from intermittently losing authentication or transaction context. + +## 1.6.29 + ## 1.6.28 ## 1.6.27 diff --git a/packages/core/src/context/endpoint-context.test.ts b/packages/core/src/context/endpoint-context.test.ts new file mode 100644 index 0000000000..bfeea96f1b --- /dev/null +++ b/packages/core/src/context/endpoint-context.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it, onTestFinished, vi } from "vitest"; +import type { AuthEndpointContext } from "./endpoint-context"; +import { __getBetterAuthGlobal } from "./global"; + +describe("runWithEndpointContext", () => { + /** + * @see https://github.com/better-auth/better-auth/issues/10832 + */ + it("preserves each endpoint context across concurrent first calls", async () => { + vi.resetModules(); + const globalContext = __getBetterAuthGlobal().context; + const previousStorageDescriptor = Object.getOwnPropertyDescriptor( + globalContext, + "endpointContextAsyncStorage", + ); + onTestFinished(() => { + if (previousStorageDescriptor) { + Object.defineProperty( + globalContext, + "endpointContextAsyncStorage", + previousStorageDescriptor, + ); + } else { + Reflect.deleteProperty(globalContext, "endpointContextAsyncStorage"); + } + }); + Reflect.deleteProperty(globalContext, "endpointContextAsyncStorage"); + const mod = await import("./endpoint-context"); + + const contexts = Array.from( + { length: 32 }, + () => ({}) as AuthEndpointContext, + ); + const currentContexts = await Promise.all( + contexts.map((context) => + mod.runWithEndpointContext(context, async () => { + await Promise.resolve(); + return mod.getCurrentAuthContext(); + }), + ), + ); + + const matchingContextCount = currentContexts.filter( + (currentContext, index) => currentContext === contexts[index], + ).length; + expect(matchingContextCount).toBe(contexts.length); + }); +}); diff --git a/packages/core/src/context/endpoint-context.ts b/packages/core/src/context/endpoint-context.ts index 1c1ba1b3af..6545dd29c8 100644 --- a/packages/core/src/context/endpoint-context.ts +++ b/packages/core/src/context/endpoint-context.ts @@ -12,11 +12,13 @@ export type AuthEndpointContext = Partial< const ensureAsyncStorage = async () => { const betterAuthGlobal = __getBetterAuthGlobal(); - if (!betterAuthGlobal.context.endpointContextAsyncStorage) { - const AsyncLocalStorage = await getAsyncLocalStorage(); - betterAuthGlobal.context.endpointContextAsyncStorage = - new AsyncLocalStorage(); + const existing = betterAuthGlobal.context.endpointContextAsyncStorage; + if (existing) { + return existing as AsyncLocalStorage; } + const AsyncLocalStorage = await getAsyncLocalStorage(); + betterAuthGlobal.context.endpointContextAsyncStorage ??= + new AsyncLocalStorage(); return betterAuthGlobal.context .endpointContextAsyncStorage as AsyncLocalStorage; }; diff --git a/packages/core/src/context/request-state.test.ts b/packages/core/src/context/request-state.test.ts index 4d09e5cf26..92bda6f2f6 100644 --- a/packages/core/src/context/request-state.test.ts +++ b/packages/core/src/context/request-state.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, it, vi } from "vitest"; +import { describe, expect, it, onTestFinished, vi } from "vitest"; +import { __getBetterAuthGlobal } from "./global"; import type { RequestStateWeakMap } from "./request-state"; import { defineRequestState, @@ -92,40 +93,48 @@ describe("request-state", () => { }); }); - describe("AsyncLocalStorage init race", () => { - it("shares one AsyncLocalStorage across concurrent first-callers", async () => { - // Force a cold start: reset the module (clears the memoized init) and - // clear the global singleton, so the concurrent burst below all races - // through ensureAsyncStorage()'s lazy initialization. + describe("concurrent first calls", () => { + /** + * @see https://github.com/better-auth/better-auth/issues/10832 + */ + it("preserves each request state", async () => { vi.resetModules(); - const betterAuthGlobalSymbol = Symbol.for("better-auth:global"); - const betterAuthGlobal = (globalThis as any)[betterAuthGlobalSymbol]; - if (betterAuthGlobal?.context) { - betterAuthGlobal.context.requestStateAsyncStorage = undefined; - } + const globalContext = __getBetterAuthGlobal().context; + const previousStorageDescriptor = Object.getOwnPropertyDescriptor( + globalContext, + "requestStateAsyncStorage", + ); + onTestFinished(() => { + if (previousStorageDescriptor) { + Object.defineProperty( + globalContext, + "requestStateAsyncStorage", + previousStorageDescriptor, + ); + } else { + Reflect.deleteProperty(globalContext, "requestStateAsyncStorage"); + } + }); + Reflect.deleteProperty(globalContext, "requestStateAsyncStorage"); const mod = await import("./request-state"); - const N = 32; - const outcomes = await Promise.all( - Array.from({ length: N }, () => - mod - .runWithRequestState(new WeakMap(), async () => { - // Yield so every caller interleaves through the cold init - // window before any of them reads its state back. - await Promise.resolve(); - await new Promise((resolve) => setTimeout(resolve, 0)); - // Throws "No request state found" if this caller's run() - // executed on a different instance than the one resolved here. - await mod.getCurrentRequestState(); - }) - .then( - () => true, - () => false, - ), + const stores: RequestStateWeakMap[] = Array.from( + { length: 32 }, + () => new WeakMap(), + ); + const currentStores = await Promise.all( + stores.map((store) => + mod.runWithRequestState(store, async () => { + await Promise.resolve(); + return mod.getCurrentRequestState(); + }), ), ); - expect(outcomes.every(Boolean)).toBe(true); + const matchingStoreCount = currentStores.filter( + (currentStore, index) => currentStore === stores[index], + ).length; + expect(matchingStoreCount).toBe(stores.length); }); }); }); diff --git a/packages/core/src/context/request-state.ts b/packages/core/src/context/request-state.ts index be5af622a7..2e9df4fccd 100644 --- a/packages/core/src/context/request-state.ts +++ b/packages/core/src/context/request-state.ts @@ -4,35 +4,17 @@ import { __getBetterAuthGlobal } from "./global"; export type RequestStateWeakMap = WeakMap; -// Memoizes the in-flight AsyncLocalStorage initialization so concurrent -// first-callers share a single instance instead of each constructing one. -let asyncStorageInit: Promise> | null = - null; - const ensureAsyncStorage = async () => { const betterAuthGlobal = __getBetterAuthGlobal(); const existing = betterAuthGlobal.context.requestStateAsyncStorage; if (existing) { return existing as AsyncLocalStorage; } - // Without memoizing the init, several concurrent callers can each pass the - // check above, each `await getAsyncLocalStorage()`, and each assign a fresh - // instance — last write wins. `runWithRequestState().run()` then executes on - // one instance while a nested `getCurrentRequestState()` reads the - // overwritten one, throwing "No request state found". This shows up - // intermittently on serverless cold start (e.g. Cloudflare Workers), where - // the first requests hit before the lazy `node:async_hooks` import settles. - // The idempotent `??=` keeps the global singleton stable even if multiple - // BetterAuth copies (Dual Module Hazard) race here. - if (!asyncStorageInit) { - asyncStorageInit = getAsyncLocalStorage().then((AsyncLocalStorage) => { - betterAuthGlobal.context.requestStateAsyncStorage ??= - new AsyncLocalStorage(); - return betterAuthGlobal.context - .requestStateAsyncStorage as AsyncLocalStorage; - }); - } - return asyncStorageInit; + const AsyncLocalStorage = await getAsyncLocalStorage(); + betterAuthGlobal.context.requestStateAsyncStorage ??= + new AsyncLocalStorage(); + return betterAuthGlobal.context + .requestStateAsyncStorage as AsyncLocalStorage; }; export async function getRequestStateAsyncLocalStorage() { diff --git a/packages/core/src/context/transaction.test.ts b/packages/core/src/context/transaction.test.ts index a7d142b568..44eea2156b 100644 --- a/packages/core/src/context/transaction.test.ts +++ b/packages/core/src/context/transaction.test.ts @@ -1,5 +1,6 @@ -import { describe, expect, it, vi } from "vitest"; +import { describe, expect, it, onTestFinished, vi } from "vitest"; import type { DBAdapter, DBTransactionAdapter } from "../db/adapter"; +import { __getBetterAuthGlobal } from "./global"; import { getCurrentAdapter, queueAfterTransactionHook, @@ -187,4 +188,53 @@ describe("runWithTransaction", () => { ); expect(hook).toHaveBeenCalledOnce(); }); + + /** + * @see https://github.com/better-auth/better-auth/issues/10832 + */ + it("preserves each transaction adapter across concurrent first calls", async () => { + vi.resetModules(); + const globalContext = __getBetterAuthGlobal().context; + const previousStorageDescriptor = Object.getOwnPropertyDescriptor( + globalContext, + "adapterAsyncStorage", + ); + onTestFinished(() => { + if (previousStorageDescriptor) { + Object.defineProperty( + globalContext, + "adapterAsyncStorage", + previousStorageDescriptor, + ); + } else { + Reflect.deleteProperty(globalContext, "adapterAsyncStorage"); + } + }); + Reflect.deleteProperty(globalContext, "adapterAsyncStorage"); + const mod = await import("./transaction"); + const harnesses = Array.from({ length: 32 }, () => { + const transactionAdapter = {} as DBTransactionAdapter; + const adapter = { + transaction: async ( + callback: (trx: DBTransactionAdapter) => Promise, + ) => callback(transactionAdapter), + } as DBAdapter; + return { adapter, transactionAdapter }; + }); + + const currentAdapters = await Promise.all( + harnesses.map(({ adapter }) => + mod.runWithTransaction(adapter, async () => { + await Promise.resolve(); + return mod.getCurrentAdapter(adapter); + }), + ), + ); + + const transactionAdapterCount = currentAdapters.filter( + (currentAdapter, index) => + currentAdapter === harnesses[index]?.transactionAdapter, + ).length; + expect(transactionAdapterCount).toBe(harnesses.length); + }); }); diff --git a/packages/core/src/context/transaction.ts b/packages/core/src/context/transaction.ts index 1b2e0454e9..a1b2c66284 100644 --- a/packages/core/src/context/transaction.ts +++ b/packages/core/src/context/transaction.ts @@ -1,4 +1,4 @@ -import type { AsyncLocalStorage } from "node:async_hooks"; +import type { AsyncLocalStorage } from "@better-auth/core/async_hooks"; import { getAsyncLocalStorage } from "@better-auth/core/async_hooks"; import type { DBAdapter, DBTransactionAdapter } from "../db/adapter"; import type { BetterAuthOptions } from "../types"; @@ -14,10 +14,12 @@ type HookContext = { const ensureAsyncStorage = async () => { const betterAuthGlobal = __getBetterAuthGlobal(); - if (!betterAuthGlobal.context.adapterAsyncStorage) { - const AsyncLocalStorage = await getAsyncLocalStorage(); - betterAuthGlobal.context.adapterAsyncStorage = new AsyncLocalStorage(); + const existing = betterAuthGlobal.context.adapterAsyncStorage; + if (existing) { + return existing as AsyncLocalStorage; } + const AsyncLocalStorage = await getAsyncLocalStorage(); + betterAuthGlobal.context.adapterAsyncStorage ??= new AsyncLocalStorage(); return betterAuthGlobal.context .adapterAsyncStorage as AsyncLocalStorage; }; diff --git a/packages/drizzle-adapter/CHANGELOG.md b/packages/drizzle-adapter/CHANGELOG.md index 170a4cf52f..e021c1c0c7 100644 --- a/packages/drizzle-adapter/CHANGELOG.md +++ b/packages/drizzle-adapter/CHANGELOG.md @@ -81,6 +81,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/electron/CHANGELOG.md b/packages/electron/CHANGELOG.md index acfaac52a3..710f3f7ba3 100644 --- a/packages/electron/CHANGELOG.md +++ b/packages/electron/CHANGELOG.md @@ -74,6 +74,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md index 9c22f2a4fb..7131fd9c07 100644 --- a/packages/expo/CHANGELOG.md +++ b/packages/expo/CHANGELOG.md @@ -70,6 +70,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/i18n/CHANGELOG.md b/packages/i18n/CHANGELOG.md index b87651794a..527efdecb4 100644 --- a/packages/i18n/CHANGELOG.md +++ b/packages/i18n/CHANGELOG.md @@ -58,6 +58,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/kysely-adapter/CHANGELOG.md b/packages/kysely-adapter/CHANGELOG.md index 7b0ea8ffdd..d5f61de2ad 100644 --- a/packages/kysely-adapter/CHANGELOG.md +++ b/packages/kysely-adapter/CHANGELOG.md @@ -63,6 +63,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/memory-adapter/CHANGELOG.md b/packages/memory-adapter/CHANGELOG.md index b9c55f400c..07ab3beeb8 100644 --- a/packages/memory-adapter/CHANGELOG.md +++ b/packages/memory-adapter/CHANGELOG.md @@ -53,6 +53,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/mongo-adapter/CHANGELOG.md b/packages/mongo-adapter/CHANGELOG.md index 885c7ac5b1..b963ca2400 100644 --- a/packages/mongo-adapter/CHANGELOG.md +++ b/packages/mongo-adapter/CHANGELOG.md @@ -57,6 +57,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/oauth-provider/CHANGELOG.md b/packages/oauth-provider/CHANGELOG.md index b34f2a2287..5d77b0d57a 100644 --- a/packages/oauth-provider/CHANGELOG.md +++ b/packages/oauth-provider/CHANGELOG.md @@ -253,6 +253,22 @@ Migration: run the schema migration (`npx @better-auth/cli migrate`, or `generate` if you manage the schema yourself) to add the new resource columns. +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/passkey/CHANGELOG.md b/packages/passkey/CHANGELOG.md index d5da0f9f5f..3cf9a56110 100644 --- a/packages/passkey/CHANGELOG.md +++ b/packages/passkey/CHANGELOG.md @@ -62,6 +62,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/prisma-adapter/CHANGELOG.md b/packages/prisma-adapter/CHANGELOG.md index 590ee14cea..a9a4bbe80c 100644 --- a/packages/prisma-adapter/CHANGELOG.md +++ b/packages/prisma-adapter/CHANGELOG.md @@ -53,6 +53,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/redis-storage/CHANGELOG.md b/packages/redis-storage/CHANGELOG.md index 53a70a9818..63ffe6b3b1 100644 --- a/packages/redis-storage/CHANGELOG.md +++ b/packages/redis-storage/CHANGELOG.md @@ -53,6 +53,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/scim/CHANGELOG.md b/packages/scim/CHANGELOG.md index 455e2a8f85..b3e8298ff9 100644 --- a/packages/scim/CHANGELOG.md +++ b/packages/scim/CHANGELOG.md @@ -129,6 +129,22 @@ Connections created before this release carry no owner. Access now fails closed, so those connections are no longer reachable through the management endpoints, including token regeneration. Reclaim them at the database level: delete `scimProvider` rows that have neither `organizationId` nor `userId`, or set `userId` to the intended owner, then regenerate tokens as needed. Organization-scoped connections are not affected. +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/sso/CHANGELOG.md b/packages/sso/CHANGELOG.md index 2d9d0fb174..bb79b92abc 100644 --- a/packages/sso/CHANGELOG.md +++ b/packages/sso/CHANGELOG.md @@ -164,6 +164,22 @@ Closes [#5604](https://github.com/better-auth/better-auth/issues/5604). Supersedes [#4992](https://github.com/better-auth/better-auth/issues/4992) and [#5443](https://github.com/better-auth/better-auth/issues/5443). +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/stripe/CHANGELOG.md b/packages/stripe/CHANGELOG.md index 39cae4161a..b24a38d129 100644 --- a/packages/stripe/CHANGELOG.md +++ b/packages/stripe/CHANGELOG.md @@ -70,6 +70,22 @@ ## 1.7.0-beta.3 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/telemetry/CHANGELOG.md b/packages/telemetry/CHANGELOG.md index a9681bcbd8..f0104b173a 100644 --- a/packages/telemetry/CHANGELOG.md +++ b/packages/telemetry/CHANGELOG.md @@ -53,6 +53,20 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies []: + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 64b164b67a..6f7fc6ad4b 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -58,6 +58,22 @@ ## 1.7.0-beta.4 +## 1.6.30 + +### Patch Changes + +- Updated dependencies [[`07c1718`](https://github.com/better-auth/better-auth/commit/07c17189f58502bf038e5f22766f8a99df60ac99)]: + - @better-auth/core@1.6.30 + - better-auth@1.6.30 + +## 1.6.29 + +### Patch Changes + +- Updated dependencies [[`e6e1b4e`](https://github.com/better-auth/better-auth/commit/e6e1b4e8146a84d2a2c5fe2c497c81d03dfc2ad3)]: + - better-auth@1.6.29 + - @better-auth/core@1.6.29 + ## 1.6.28 ### Patch Changes