[PR #4062] [CLOSED] feat: database transaction support #30761

Closed
opened 2026-04-17 21:47:26 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/4062
Author: @jslno
Created: 8/18/2025
Status: Closed

Base: canaryHead: feat/database-transactions


📝 Commits (10+)

  • 4f7cd8b feat: add async context
  • c2d371c chore: update tests
  • d841e54 feat: add transactions to drizzle adapter
  • 0b1beaa feat: add transactions to kysely adapter
  • 920b7a8 feat: add transactions to mongodb adapter
  • 4ed6628 feat: add transactions to prisma adapter
  • 30036fb chore: fix linting
  • e3b97bd chore: add missing contexts to adapters
  • b898e3a chore: add jsdoc comments
  • c91370c chore: fix linting

📊 Changes

13 files changed (+1727 additions, -642 deletions)

View changed files

📝 docs/content/docs/adapters/mongo.mdx (+3 -2)
📝 docs/content/docs/guides/create-a-db-adapter.mdx (+96 -20)
📝 packages/better-auth/src/__snapshots__/init.test.ts.snap (+2 -0)
📝 packages/better-auth/src/adapters/create-adapter/index.ts (+207 -109)
📝 packages/better-auth/src/adapters/create-adapter/test/create-adapter.test.ts (+502 -16)
📝 packages/better-auth/src/adapters/create-adapter/types.ts (+115 -66)
📝 packages/better-auth/src/adapters/drizzle-adapter/drizzle-adapter.ts (+35 -16)
📝 packages/better-auth/src/adapters/kysely-adapter/kysely-adapter.ts (+46 -22)
📝 packages/better-auth/src/adapters/mongodb-adapter/mongodb-adapter.ts (+130 -22)
📝 packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts (+42 -23)
📝 packages/better-auth/src/db/internal-adapter.ts (+445 -291)
📝 packages/better-auth/src/db/with-hooks.ts (+28 -15)
📝 packages/better-auth/src/types/adapter.ts (+76 -40)

📄 Description

Summary by cubic

Add first-class database transactions to the adapter layer using an async context, so all CRUD calls inside a transaction use the correct tx-bound client. Exposes adapter.transaction(cb) and getContext() to enable nested transactions and safer multi-step operations.

  • New Features
    • Added Adapter.transaction(cb) to run operations atomically.
    • Introduced async context and getContext() to pass the tx-bound db through adapter methods.
    • Implemented transaction support for Drizzle, Prisma, Kysely, and MongoDB (via session).
    • Updated adapters to read db from context, and added tests for nested transactions and error handling.

Todo

  • opt-out transactions (D1 Compatibility)

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/4062 **Author:** [@jslno](https://github.com/jslno) **Created:** 8/18/2025 **Status:** ❌ Closed **Base:** `canary` ← **Head:** `feat/database-transactions` --- ### 📝 Commits (10+) - [`4f7cd8b`](https://github.com/better-auth/better-auth/commit/4f7cd8b153e32aa429bde4824f4e822631e5c1d9) feat: add async context - [`c2d371c`](https://github.com/better-auth/better-auth/commit/c2d371cfef3d7900079911d6a0006ccf3aecf1a5) chore: update tests - [`d841e54`](https://github.com/better-auth/better-auth/commit/d841e54a40a02c02475263f2745acd225786da7a) feat: add transactions to drizzle adapter - [`0b1beaa`](https://github.com/better-auth/better-auth/commit/0b1beaa2b91bf981c26ffd4320bce7ba47f77c20) feat: add transactions to kysely adapter - [`920b7a8`](https://github.com/better-auth/better-auth/commit/920b7a87478f41e132653722fca46e259b958dc7) feat: add transactions to mongodb adapter - [`4ed6628`](https://github.com/better-auth/better-auth/commit/4ed6628baa3a61cf93f10f15cda749f8b1fa2def) feat: add transactions to prisma adapter - [`30036fb`](https://github.com/better-auth/better-auth/commit/30036fb77ff1c8179787eacd08a811266c6a99a1) chore: fix linting - [`e3b97bd`](https://github.com/better-auth/better-auth/commit/e3b97bd6db967d026af3a0ffa35ce2a2b1bf3a8c) chore: add missing contexts to adapters - [`b898e3a`](https://github.com/better-auth/better-auth/commit/b898e3a342584d3f551774a84799478897784164) chore: add jsdoc comments - [`c91370c`](https://github.com/better-auth/better-auth/commit/c91370c9ed9c234b4b98c67840ced7050e5b89fb) chore: fix linting ### 📊 Changes **13 files changed** (+1727 additions, -642 deletions) <details> <summary>View changed files</summary> 📝 `docs/content/docs/adapters/mongo.mdx` (+3 -2) 📝 `docs/content/docs/guides/create-a-db-adapter.mdx` (+96 -20) 📝 `packages/better-auth/src/__snapshots__/init.test.ts.snap` (+2 -0) 📝 `packages/better-auth/src/adapters/create-adapter/index.ts` (+207 -109) 📝 `packages/better-auth/src/adapters/create-adapter/test/create-adapter.test.ts` (+502 -16) 📝 `packages/better-auth/src/adapters/create-adapter/types.ts` (+115 -66) 📝 `packages/better-auth/src/adapters/drizzle-adapter/drizzle-adapter.ts` (+35 -16) 📝 `packages/better-auth/src/adapters/kysely-adapter/kysely-adapter.ts` (+46 -22) 📝 `packages/better-auth/src/adapters/mongodb-adapter/mongodb-adapter.ts` (+130 -22) 📝 `packages/better-auth/src/adapters/prisma-adapter/prisma-adapter.ts` (+42 -23) 📝 `packages/better-auth/src/db/internal-adapter.ts` (+445 -291) 📝 `packages/better-auth/src/db/with-hooks.ts` (+28 -15) 📝 `packages/better-auth/src/types/adapter.ts` (+76 -40) </details> ### 📄 Description <!-- This is an auto-generated description by cubic. --> ## Summary by cubic Add first-class database transactions to the adapter layer using an async context, so all CRUD calls inside a transaction use the correct tx-bound client. Exposes adapter.transaction(cb) and getContext() to enable nested transactions and safer multi-step operations. - New Features - Added Adapter.transaction(cb) to run operations atomically. - Introduced async context and getContext() to pass the tx-bound db through adapter methods. - Implemented transaction support for Drizzle, Prisma, Kysely, and MongoDB (via session). - Updated adapters to read db from context, and added tests for nested transactions and error handling. <!-- End of auto-generated description by cubic. --> ## Todo - [x] opt-out transactions (D1 Compatibility) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-17 21:47:26 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#30761