chore(deps): update dependency better-auth to v1.6.29 - #284
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 12, 2026 21:45
43c4488 to
5bb26b5
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 14, 2026 12:52
5bb26b5 to
0665d53
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 16, 2026 22:53
0665d53 to
fc67f4c
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 22, 2026 17:42
fc67f4c to
8261bb6
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 24, 2026 10:42
8261bb6 to
1a7938c
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 26, 2026 07:02
1a7938c to
e3c758b
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 26, 2026 19:41
e3c758b to
4bc8c30
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
June 30, 2026 01:51
4bc8c30 to
9156555
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
July 4, 2026 04:42
9156555 to
b5b33e9
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
July 10, 2026 06:07
b5b33e9 to
6357357
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
July 10, 2026 15:10
6357357 to
e6a8542
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
July 13, 2026 23:01
e6a8542 to
340ad43
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 5, 2026 11:07
340ad43 to
d3bc835
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 6, 2026 18:59
d3bc835 to
3bad485
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 19, 2026 02:41
3bad485 to
504e4ab
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 25, 2026 20:43
504e4ab to
f49a677
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 28, 2026 00:01
f49a677 to
d2bdfef
Compare
renovate
Bot
force-pushed
the
renovate/better-auth-group
branch
from
August 28, 2026 22:50
d2bdfef to
196911e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.5.6→1.6.29Release Notes
better-auth/better-auth (better-auth)
v1.6.29Compare Source
Patch Changes
#10805
e6e1b4eThanks @Emmaccen! - Speed up batch session revocation when secondary storage is enabled by deleting sessions in parallel.Updated dependencies []:
v1.6.28Compare Source
Patch Changes
#10769
773de54Thanks @bytaesu! - Prevent duplicate session requests during transient remounts while ensuring incomplete refreshes are revalidated.#10794
2ad2928Thanks @bytaesu! - Restore client plugin declaration compatibility for downstream TypeScript consumers.Updated dependencies []:
v1.6.27Compare Source
Patch Changes
#10657
2ae491eThanks @bytaesu! - Aligned endpoint and middleware context types with runtime route parameters, and preserved response headers when resolving sessions from endpoint contexts.#10676
90b5093Thanks @bytaesu! - Deduplicate in-flight session requests when React retries a suspended component.Updated dependencies [
2ae491e]:v1.6.26Compare Source
Patch Changes
#10619
9ede805Thanks @jeroenvandermerwe! - Ensure database rate-limit cleanup completes when no background task handler is configured.#10608
5a811f1Thanks @bytaesu! - Pass the email verification type to custom OTP generators after email sign-up.#10605
d8327f1Thanks @XXMOHAMED012! - The email OTP verification check no longer reveals whether an email is registered before the OTP itself is verified.#10513
e2c73fbThanks @mrosberghaus! - FixjwtClient()collapsingcreateAuthClienttype inference when combined with other client plugins such asinferAdditionalFields. Additional user fields (for example onupdateUser) are preserved again.#10635
af50c45Thanks @krish-vachhani! - FixoneTapClient()collapsingcreateAuthClienttype inference when combined with other client plugins. TheoneTapaction is available on the client again.#10633
701cd43Thanks @gustavovalverde! - Minting or reading a JWKS signing key inside an active database transaction now uses the transaction-scoped adapter instead of the root connection. On a single-connection SQLite database with native transactions enabled, this no longer deadlocks, and on Postgres and MySQL the key commits with the surrounding transaction instead of independently of it.#10599
e7b0ebaThanks @bytaesu! - Preserve Apple user data fromform_postcallbacks when usingoAuthProxy.#10552
2b4a14fThanks @bytaesu! - Allow users to retry email OTP password resets after entering an invalid password.#10467
7552a3bThanks @jlucaso1! - ImprovenextCookiesperformance in instrumented Next.js applications.#10580
ea38fcaThanks @Emmaccen! - Skip invalid secondary-storage session entries without discarding other valid sessions.#10520
a03e4c1Thanks @bytaesu! - Ensure deleting a user also removes their sessions from secondary storage.Updated dependencies [
a30e274]:v1.6.25Compare Source
Patch Changes
#10479
5124c34Thanks @krish-vachhani! - Prevent Google One Tap from creating new users when sign-up is disabled for the Google provider.#10444
7439359Thanks @birkskyum! - Expose the real$fetchinstance and$storeatoms from the Solid client instead of resolving them as dynamic API routes.Updated dependencies [
0ffd1fb]:v1.6.24Compare Source
Patch Changes
#10235
03dc5a0Thanks @ping-maxwell! - Fixes silent foreign-key and adapter-join misrouting when a user remaps a built-in model name to a string that collides with another schema key#10357
7508940Thanks @c-nicol! - Fixes Kysely migration generation for new-table fields that are both unique: true and index: true.#10342
bae7198Thanks @ping-maxwell! - Fixorganization.listMembersfailing with "User not found for member" for orgs with more than ~100 members by applying the same membership limit to the users query.#10336
ef4d273Thanks @Tushar-Khandelwal-2004! - Prevent verification callbacks from failing auth requests when cloning the request throws.#10333
99dbdd7Thanks @c-nicol! - Fixes Drizzle schema generation for fields that are both unique: true and index: true.#10368
086ca91Thanks @gaurav0107! - Force-validate the requestOriginon the magic-link (/sign-in/magic-link) and email-otp (/email-otp/send-verification-otp) send endpoints, including cookieless requests, to match the built-in/sign-in/emailand/sign-up/emailroutes. A cookieless cross-origin POST can no longer trigger a magic-link or verification-OTP email to an arbitrary address. Cookieless requests that carry noOrigin(server-to-server) are unaffected.#10290
8f2deddThanks @GautamBytes! - Expose the remote MCP auth client's 401 challenge headers to browser clients using CORS.#10453
4e685eeThanks @ping-maxwell! - OpenAPI now includesuser.additionalFieldsand plugin user schema fields (e.g. username pluginusername/displayUsername) on/sign-up/emailand/update-userrequest bodies.#10190
3bf0e49Thanks @gaurav-init! - Pass the endpoint context as the second argument tobeforeDeleteOrganizationandafterDeleteOrganizationhooks in the organization plugin, matching the signature shown in the docs and the existingdatabaseHookspattern. The Stripe plugin'sbeforeDeleteOrganizationwrapper now forwards the context to user-supplied hooks instead of dropping it.#10040
f59a0eeThanks @shiminshen! - Organization invitations now let the database generate theiridwhen ID generation is delegated to the database (e.g.advanced.database.generateId: "uuid"with a UUID-capable adapter such as Postgres), matching every other model. PreviouslycreateInvitationalways generated the invitationidin application code, so invitation rows received an app-generated value instead of a database-generated one while organizations, members and teams correctly deferred to the database (better-auth/better-auth#10024). A caller-provided id (e.g. viabeforeCreateInvitation) is still honored.#10302
0f2cc1bThanks @momomuchu! - Prefer exact schema-key matches overmodelNamealiases ingetDefaultModelName, so remapping a built-in table onto another table's schema key (e.g.user.modelName = "account") does not reroute internal adapter queries to the wrong table.#9787
ae78109Thanks @ping-maxwell! - Fixes an issue whereuseSession({ throw: true })incorrectly excludednullfrom itsdatatype.#10222
46d2bf0Thanks @ping-maxwell! - fix: add no-store cache-control headers to get-session route#10316
29a373eThanks @vinay-oppuri! - Recognize SQLiteBIGINTas a valid number type in migration diffs so database-backed rate limiter columns likelastRequestno longer report spurious pending changes on every run.#10379
f6d18faThanks @ping-maxwell! - fix(client): restore auth query revalidation and signal listeners after remount#5753
f23ce50Thanks @ping-maxwell! - feat(last-login-method): beforeStoreCookie option for GDPR compliance#10376
c4d1ddaThanks @ping-maxwell! - Pass the request endpoint context as a third argument toverifyIdToken, so custom ID token verifiers can read request headers (for example Apple'suser-agentrequirement).Updated dependencies [
6758231,54fab08,c4d1dda]:v1.6.23Compare Source
Patch Changes
#9138
8581f97Thanks @vladflotsky! - Add a pre-configured Yandex provider helper for the generic OAuth plugin.Updated dependencies [
930b260]:v1.6.22Compare Source
Patch Changes
#10239
c06a56dThanks @gustavovalverde! - Magic-link and email-OTP sign-in now reset the credentials on an account whose email had never been confirmed. When verification resolves to such an account, any existing password on it is removed and its sessions are revoked before the user is signed in, so proven control of the mailbox is the source of truth for the account.If you signed up with email and password but first signed in through a magic link or email OTP rather than confirming the verification email, your password is cleared and you will need to set a new one through password reset.
#10240
3a035e9Thanks @gustavovalverde! - Add account-level lockout for two-factor verification. The attempt limit applies per account across sign-in challenges and across factors: TOTP, email-OTP, and backup codes share one counter, and a successful verification resets it.Enabled by default: an account locks for 15 minutes after 10 consecutive failed verifications, and locked attempts return
429with theACCOUNT_TEMPORARILY_LOCKEDerror code. Configure it withtwoFactor({ accountLockout: { enabled, maxFailedAttempts, durationSeconds } }).Run a database migration after upgrading: this adds
failedVerificationCountandlockedUntilcolumns to thetwoFactortable.Updated dependencies [
8bd43d9]:v1.6.21Compare Source
Patch Changes
#10212
e0762a1Thanks @bytaesu! - In root-mounted deployments, requests whose path does not start with the configuredbasePathnow return 404 instead of resolving to an endpoint.#10187
882cf9eThanks @ping-maxwell! - Admin permission changes and bans now take effect immediately for admin APIs, even when session cookie cache is enabled. Sensitive session checks also continue to work in stateless apps where signed cookies are the session record.#9939
f52e1abThanks @benpsnyder! - fixes a bug causing deviceAuthorization() throwing a ZodError at construction when called without a schema option#10196
b5bec19Thanks @Paola3stefania! - OAuth sign-up and account-link profile sync now ignore provider profile values for user fields markedinput: false. Input-allowed additional fields still persist frommapProfileToUser, and schema defaults still apply when OAuth creates a user. Apps that usedmapProfileToUserto fillinput: falsefields should set those fields in server-side provisioning code instead.#10197
816d7f9Thanks @Paola3stefania! - Google sign-in now acceptshd: "*"to allow any Google Workspace hosted domain while still rejecting tokens with no hosted-domain claim.Google One Tap now applies the configured Google hosted-domain restriction before creating a session.
#10192
239bcc8Thanks @bytaesu! - Validate PayPal user info against the verified ID token subject during social sign-in.#10228
1bc370aThanks @gustavovalverde! - The SIWE plugin no longer binds a provided email that already belongs to another account. Withanonymousset tofalse,/siwe/verifypreviously created the new account using that email even when it was already in use; it now keeps the wallet-derived address in that case, so one email cannot be attached to two accounts.#10198
570267cThanks @rachit367! - HonordisableMigrationon plugin schema tables. Tables flagged withdisableMigration: trueare now skipped bybetter-auth generate(Drizzle and Prisma output) and by the runtime migrator, instead of being emitted and created anyway. The flag was previously dropped while assembling the table list, so it had no effect.#10182
461ca6fThanks @bytaesu! - Only store display username fallbacks as usernames when they pass username validation during email sign-up.#10183
88409b0Thanks @bytaesu! - Require OAuth proxy profile callbacks to match an issued OAuth state before creating sessions.#10203
5953157Thanks @bytaesu! - Rate limiting no longer trusts multi-hopX-Forwarded-Forchains, preventing a client behind an appending proxy from spoofing the leftmost hop to bypass the per-IP rate limit. Single-value IP headers continue to work. To key the real client behind a proxy chain, setadvanced.ipAddress.trustedProxiesto your reverse-proxy IPs or CIDR ranges (the chain is walked right to left, skipping trusted hops), or pointadvanced.ipAddress.ipAddressHeadersat a single trusted client-IP header.#10191
b046f9eThanks @bytaesu! - Rate limit client requests before plugin request handlers run.#10210
ae647b4Thanks @gustavovalverde! - Two-factor verification now locks out after five wrong codes per sign-in challenge for TOTP and backup codes. Once the limit is reached the challenge is rejected withTOO_MANY_ATTEMPTS_REQUEST_NEW_CODE, and a new sign-in is required to try again.During a rolling deploy, two-factor challenges issued by the previous version may prompt the user to sign in again; this clears once the deploy completes.
Updated dependencies [
90d509e,816d7f9,570267c,5953157]:v1.6.20Compare Source
Patch Changes
#10121
21448b1Thanks @adityachaudhary99! - OAuth account-linking and create-user error logs now respect a customloggerconfigured inbetterAuth(), instead of always being written to the default console logger.#9621
8ecf238Thanks @dipan-ck! - Session refresh no longer emits a cookie Max-Age above the browser's 400-day ceiling when using a database without fractional-second precision.#8734
930f534Thanks @sleepe229! - declare inherited APIError properties to fix TypeScript inference errorsUpdated dependencies []:
v1.6.19Compare Source
Patch Changes
#10088
de4aa52Thanks @bytaesu! - Session and account cache cookies near the browser's per-cookie size limit (for example with a longcookiePrefixor many cached fields) are now split into chunks instead of being silently dropped by the browser. A cache too large to fit even when chunked is skipped with a warning rather than failing the request, so reads fall back to the database.#9995
b4b0266Thanks @ElGauchooooo! - The device authorization plugin now accepts an optionaluser_idwhen issuing a device code via/device/code, pre-binding the code to that user. Only the bound user can approve or deny the code, so a publicly visible user code can no longer be claimed by someone else.#10086
5bd5e1cThanks @gustavovalverde! - Refresh-token rotation and token revocation, two-factor backup-code regeneration, device-code claiming, and organization invitation acceptance now work on Prisma. Concurrent or repeat requests in these flows could previously return an error on Prisma instead of the expected result.On MongoDB servers older than 5.0, these flows and other guarded value updates (rate-limit window resets, API-key refills) no longer fail with an empty-update error.
@better-auth/core:incrementOnenow reports a clear error when called with noincrementand noset.#9319
581f827Thanks @ping-maxwell! - fix(last-login-method): include domain when clearing cross-subdomain cookies#10067
8407885Thanks @bytaesu! - Theoauth-popupplugin now ignores internal OAuth state fields passed through itsadditionalDataparameter, soadditionalDataonly ever carries your own custom values.#9555
c1a8a64Thanks @ChrisMGeo! - Fix invalid OpenAPI output for Better Auth callback, session, and passkey routes so client generators can consume the schema.#10071
635f190Thanks @gustavovalverde! - Auth clients exported from wrapper packages can now be emitted in TypeScript declaration builds without extra type annotations.#10070
a787e0bThanks @gustavovalverde! - Single-use verification flows no longer hang on database adapters that use a one-connection pool. This fixes magic-link verification and similar token checks in connection-limited serverless database setups.#9348
c2f718fThanks @ping-maxwell! - fix: cookie cache fallback lookup#8863
7d18175Thanks @ping-maxwell! -sendVerificationEmailwas invoked viarunInBackgroundOrAwait, which could defer work whenadvanced.backgroundTasks.handleris configured (so the handler could return 200 before the email callback finished) and, in the default path, caught and logged errors without rethrowing. User callbacks that throwAPIError(e.g. 429 from a rate limiter) were therefore not reliably reflected in the HTTP response (better-auth/better-auth#8757).Now we await
sendVerificationEmailFnso failures surface to the client with the correct status. The unauthenticated/send-verification-emailpath enforces a constant-time floor (500 ms) so that the response duration does not reveal whether the email belongs to a real unverified user.Updated dependencies [
0895993,5bd5e1c,a787e0b]:v1.6.18Compare Source
Patch Changes
#9315
9ef7240Thanks @GautamBytes! - fix OpenAPI requestBody generation for intersected and default-wrapped body schemas#9583
b21a5f7Thanks @GautamBytes! - Fix plugin-provided client methods and additional session fields not being inferred in composite monorepos.Updated dependencies [
b21a5f7]:v1.6.17Compare Source
Patch Changes
#9993
baeaa00Thanks @gustavovalverde! - When a team had a single open slot, accepting an invitation into it was wrongly rejected as over the member limit and left a dangling membership record. Two invitations accepted into a nearly-full team at the same time could also push it past its limit. Both are fixed.#9482
3e99e6cThanks @bytaesu! -admin.setUserPasswordnow creates a credential account when the target user does not have one, matching the behavior ofresetPassword. Previously the call returnedstatus: truewithout doing anything for users without an existing credential account (e.g., social-only or magic-link signups), so admins migrating users from another auth system or assigning an initial password to a social-only user can now do so directly without poking theaccounttable.96c78c3Thanks @GautamBytes! - Downgrade expected auth validation failures from error logs to warnings.#9993
baeaa00Thanks @gustavovalverde! - Captcha provider verification requests now time out after 10 seconds and fail closed, so a slow or unreachable captcha provider can no longer tie up a request indefinitely.#9993
baeaa00Thanks @gustavovalverde! - A delete-account confirmation link can no longer delete the account more than once when its callback is opened concurrently.#9991
0c3856fThanks @gustavovalverde! - Completing account deletion through/delete-user/callbacknow fails when the session has been revoked server-side, instead of proceeding within the cookie-cache window. Deployments that keep sessions only in the cookie are unaffected.#9993
baeaa00Thanks @gustavovalverde! - Polling for a device-authorization token can no longer redeem the same approved device code more than once when several polls arrive together.#9993
baeaa00Thanks @gustavovalverde! - Submitting the same email OTP from several requests at once can no longer sign in more than once or gain extra tries beyond the attempt limit.#10002
ed7b6c9Thanks @gustavovalverde! - Adding a member to a team that is already at itsmaximumMembersPerTeamlimit is now rejected on every path.addMemberwith ateamIdandadd-team-memberpreviously skipped the limit that invitation acceptance enforced, so they could push a team over its cap. A rejectedaddMemberno longer creates the organization member.#9677
e0a768cThanks @GautamBytes! - Refactorrole.authorizecontrol flow while preserving existing authorization behavior.#9987
7343284Thanks @bytaesu! - Generic OAuth sign-in works again for providers whose userinfo response has nosuboridfield whenmapProfileToUserderives the account id. An emptyidfield now falls back tosub.#9991
0c3856fThanks @gustavovalverde! -getCookieCachenow returnsnullfor an expired session instead of the stale session data. Middleware that calls it to gate access no longer treats an expired signed cookie as a live session.#9993
baeaa00Thanks @gustavovalverde! - The Have I Been Pwned plugin now checks submitted passwords against the breach database on more password-setting endpoints by default, including the email-OTP and phone-number reset-password routes and the admin create-user and set-user-password routes. A breached password can no longer be set through those routes when the plugin is enabled with its default paths.#9987
7343284Thanks @bytaesu! - Preserve the fresh account cookie issued while switching users in the same browser instead of expiring it from stale request cookie state.#9991
0c3856fThanks @gustavovalverde! - Expired MCP access tokens are no longer accepted. A protected MCP resource now rejects a bearer token once it has expired, both on the server and through the remote client. A refresh token is accepted only when the original authorization included theoffline_accessscope.#9991
0c3856fThanks @gustavovalverde! - The multi-sessionset-activeandrevokeendpoints now act only on the session the caller holds a signed cookie for. A request could previously activate or revoke a different session by naming its token in the request body without holding that session's cookie.#9890
d9c526bThanks @bytaesu! - Add an experimentaloauthPopupplugin (withoauthPopupClientandsignIn.popup) for popup-based OAuth sign-in. It lets an app sign in inside a cross-site iframe by completing OAuth in a popup and handing the session token back to the opener, where thebearerplugin authenticates with it. The API may change while it is experimental.#9991
0c3856fThanks @gustavovalverde! - The OIDC provider's RP-initiated logout endpoint (/oauth2/endsession) no longer logs a user out, or revokes their OAuth tokens, in response to a cross-site GET that carries only a session cookie. Logout authenticated by a validid_token_hintis unaffected.#10003
fdef997Thanks @gustavovalverde! - Google One Tap now requires a configured Google client ID and rejects the sign-in callback when none is set. A Google ID token issued for a different application is no longer accepted. Set the client ID on theoneTapplugin or onsocialProviders.google.#9993
baeaa00Thanks @gustavovalverde! - A one-time token can no longer be redeemed for a session more than once when redeemed concurrently.#9993
baeaa00Thanks @gustavovalverde! - A password reset token can no longer change the password more than once when used from several requests at the same time.#9993
baeaa00Thanks @gustavovalverde! - Submitting the same phone-number OTP from several requests at once can no longer sign in more than once or gain extra tries beyond the attempt limit.#9993
baeaa00Thanks @gustavovalverde! - Concurrent requests can no longer slip past the configured rate limit. The in-memory rate-limit store no longer grows without bound, and the database backend removes expired entries on its own. A custom rate-limit storage may implement a new optionalconsumemethod for strict enforcement; without it, the previous behavior is kept and a one-time warning is logged.#9987 [
7343284](https://redirect.github.coConfiguration
📅 Schedule: (in timezone America/Toronto)
* 0-3 1 * *)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.