better-auth 1.7.0-beta.2 → 1.7.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +14 -15
  2. package/dist/_virtual/_rolldown/runtime.mjs +10 -1
  3. package/dist/api/index.d.mts +18 -48
  4. package/dist/api/routes/account.d.mts +4 -23
  5. package/dist/api/routes/account.mjs +102 -75
  6. package/dist/api/routes/callback.mjs +42 -20
  7. package/dist/api/routes/email-verification.d.mts +1 -0
  8. package/dist/api/routes/email-verification.mjs +6 -5
  9. package/dist/api/routes/error.mjs +1 -1
  10. package/dist/api/routes/password.mjs +1 -1
  11. package/dist/api/routes/session.mjs +15 -10
  12. package/dist/api/routes/sign-in.d.mts +3 -1
  13. package/dist/api/routes/sign-in.mjs +13 -15
  14. package/dist/api/routes/sign-up.d.mts +1 -0
  15. package/dist/api/routes/sign-up.mjs +10 -8
  16. package/dist/api/routes/update-user.mjs +8 -8
  17. package/dist/api/to-auth-endpoints.mjs +7 -1
  18. package/dist/auth/base.mjs +30 -27
  19. package/dist/client/config.mjs +8 -1
  20. package/dist/client/fetch-plugins.mjs +2 -1
  21. package/dist/client/index.d.mts +2 -2
  22. package/dist/client/lynx/index.d.mts +13 -0
  23. package/dist/client/lynx/index.mjs +2 -1
  24. package/dist/client/parser.mjs +0 -1
  25. package/dist/client/plugins/index.d.mts +4 -17
  26. package/dist/client/plugins/index.mjs +1 -4
  27. package/dist/client/proxy.mjs +2 -1
  28. package/dist/client/react/index.d.mts +13 -0
  29. package/dist/client/react/index.mjs +2 -1
  30. package/dist/client/session-atom.mjs +12 -1
  31. package/dist/client/solid/index.d.mts +13 -0
  32. package/dist/client/solid/index.mjs +3 -2
  33. package/dist/client/svelte/index.d.mts +13 -0
  34. package/dist/client/svelte/index.mjs +2 -1
  35. package/dist/client/vanilla.d.mts +13 -0
  36. package/dist/client/vanilla.mjs +2 -1
  37. package/dist/client/vue/index.d.mts +13 -0
  38. package/dist/client/vue/index.mjs +2 -1
  39. package/dist/context/create-context.mjs +10 -14
  40. package/dist/context/helpers.mjs +3 -2
  41. package/dist/cookies/cookie-utils.d.mts +33 -1
  42. package/dist/cookies/cookie-utils.mjs +95 -14
  43. package/dist/cookies/index.d.mts +2 -3
  44. package/dist/cookies/index.mjs +39 -11
  45. package/dist/cookies/session-store.mjs +4 -23
  46. package/dist/db/get-migration.mjs +4 -4
  47. package/dist/db/index.d.mts +2 -2
  48. package/dist/db/index.mjs +3 -2
  49. package/dist/db/internal-adapter.mjs +129 -27
  50. package/dist/db/schema.d.mts +14 -1
  51. package/dist/db/schema.mjs +26 -1
  52. package/dist/db/with-hooks.d.mts +1 -0
  53. package/dist/db/with-hooks.mjs +58 -1
  54. package/dist/index.d.mts +2 -2
  55. package/dist/index.mjs +2 -2
  56. package/dist/integrations/cookie-plugin-guard.mjs +18 -0
  57. package/dist/integrations/next-js.mjs +6 -0
  58. package/dist/integrations/svelte-kit.mjs +6 -0
  59. package/dist/integrations/tanstack-start-solid.mjs +6 -0
  60. package/dist/integrations/tanstack-start.mjs +6 -0
  61. package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/index.mjs +32 -0
  62. package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/linux.mjs +55 -0
  63. package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/macos.mjs +26 -0
  64. package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/termux.mjs +39 -0
  65. package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/windows.mjs +19 -0
  66. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/chunks/prompt.mjs +845 -0
  67. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/core.mjs +386 -0
  68. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs +320 -0
  69. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +62 -0
  70. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +190 -0
  71. package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/utils.mjs +2 -0
  72. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.mjs +29 -0
  73. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.mjs +42 -0
  74. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.mjs +67 -0
  75. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.mjs +23 -0
  76. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.mjs +22 -0
  77. package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.mjs +36 -0
  78. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.d.mts +292 -0
  79. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs +127 -0
  80. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/index.d.mts +145 -0
  81. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.BQXMA5bH.d.mts +298 -0
  82. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs +9 -0
  83. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs +3549 -0
  84. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs +66 -0
  85. package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs +227 -0
  86. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/index.mjs +224 -0
  87. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/command.mjs +52 -0
  88. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/error.mjs +54 -0
  89. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/kill.mjs +62 -0
  90. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/pipe.mjs +26 -0
  91. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/promise.mjs +32 -0
  92. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/stdio.mjs +19 -0
  93. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/stream.mjs +98 -0
  94. package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/verbose.mjs +15 -0
  95. package/dist/node_modules/.pnpm/get-port-please@3.2.0/node_modules/get-port-please/dist/index.d.mts +15 -0
  96. package/dist/node_modules/.pnpm/get-port-please@3.2.0/node_modules/get-port-please/dist/index.mjs +220 -0
  97. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/array-buffer.mjs +54 -0
  98. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/array.mjs +2 -0
  99. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/buffer.mjs +14 -0
  100. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/contents.mjs +76 -0
  101. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/index.mjs +6 -0
  102. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/string.mjs +35 -0
  103. package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/utils.mjs +10 -0
  104. package/dist/node_modules/.pnpm/http-shutdown@1.2.2/node_modules/http-shutdown/index.mjs +76 -0
  105. package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/core.mjs +274 -0
  106. package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/main.mjs +44 -0
  107. package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/realtime.mjs +15 -0
  108. package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/signals.mjs +23 -0
  109. package/dist/node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.mjs +24 -0
  110. package/dist/node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.mjs +18 -0
  111. package/dist/node_modules/.pnpm/is-stream@3.0.0/node_modules/is-stream/index.mjs +9 -0
  112. package/dist/node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/index.mjs +20 -0
  113. package/dist/node_modules/.pnpm/is64bit@2.0.0/node_modules/is64bit/index.mjs +13 -0
  114. package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.mjs +47 -0
  115. package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.mjs +33 -0
  116. package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.mjs +33 -0
  117. package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/chunks/xdg-open.mjs +1070 -0
  118. package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/index.mjs +619 -0
  119. package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/shared/listhen.1c46e31d.d.mts +83 -0
  120. package/dist/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.mjs +38 -0
  121. package/dist/node_modules/.pnpm/mimic-fn@4.0.0/node_modules/mimic-fn/index.mjs +38 -0
  122. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/aes.mjs +597 -0
  123. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/aesCipherSuites.mjs +195 -0
  124. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/asn1-validator.mjs +76 -0
  125. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/asn1.mjs +967 -0
  126. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/baseN.mjs +137 -0
  127. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/cipher.mjs +186 -0
  128. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/cipherModes.mjs +597 -0
  129. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/des.mjs +1187 -0
  130. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/ed25519.mjs +1029 -0
  131. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/forge.mjs +15 -0
  132. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/hmac.mjs +107 -0
  133. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/index.mjs +66 -0
  134. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/jsbn.mjs +1334 -0
  135. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/kem.mjs +146 -0
  136. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/log.mjs +241 -0
  137. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md.all.mjs +24 -0
  138. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md.mjs +18 -0
  139. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md5.mjs +324 -0
  140. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/mgf.mjs +20 -0
  141. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/mgf1.mjs +44 -0
  142. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/oids.mjs +154 -0
  143. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pbe.mjs +815 -0
  144. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pbkdf2.mjs +125 -0
  145. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pem.mjs +175 -0
  146. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs1.mjs +200 -0
  147. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs12.mjs +724 -0
  148. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs7.mjs +642 -0
  149. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs7asn1.mjs +405 -0
  150. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pki.mjs +101 -0
  151. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/prime.mjs +193 -0
  152. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/prng.mjs +290 -0
  153. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pss.mjs +141 -0
  154. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/random.mjs +141 -0
  155. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/rc2.mjs +538 -0
  156. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/rsa.mjs +1309 -0
  157. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha1.mjs +230 -0
  158. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha256.mjs +267 -0
  159. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha512.mjs +413 -0
  160. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/ssh.mjs +194 -0
  161. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/tls.mjs +3655 -0
  162. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/util.mjs +2117 -0
  163. package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/x509.mjs +2168 -0
  164. package/dist/node_modules/.pnpm/npm-run-path@5.3.0/node_modules/npm-run-path/index.mjs +34 -0
  165. package/dist/node_modules/.pnpm/onetime@6.0.0/node_modules/onetime/index.mjs +26 -0
  166. package/dist/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.mjs +14 -0
  167. package/dist/node_modules/.pnpm/path-key@4.0.0/node_modules/path-key/index.mjs +8 -0
  168. package/dist/node_modules/.pnpm/pathe@1.1.2/node_modules/pathe/dist/shared/pathe.ff20891b.mjs +176 -0
  169. package/dist/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.mjs +17 -0
  170. package/dist/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.mjs +8 -0
  171. package/dist/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.mjs +169 -0
  172. package/dist/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.mjs +33 -0
  173. package/dist/node_modules/.pnpm/std-env@3.10.0/node_modules/std-env/dist/index.mjs +171 -0
  174. package/dist/node_modules/.pnpm/strip-final-newline@3.0.0/node_modules/strip-final-newline/index.mjs +10 -0
  175. package/dist/node_modules/.pnpm/system-architecture@0.1.0/node_modules/system-architecture/index.mjs +16 -0
  176. package/dist/node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs +7 -0
  177. package/dist/node_modules/.pnpm/untun@0.1.3/node_modules/untun/dist/chunks/index.mjs +154 -0
  178. package/dist/node_modules/.pnpm/untun@0.1.3/node_modules/untun/dist/index.mjs +34 -0
  179. package/dist/node_modules/.pnpm/uqr@0.1.2/node_modules/uqr/dist/index.mjs +896 -0
  180. package/dist/node_modules/.pnpm/which@2.0.2/node_modules/which/which.mjs +76 -0
  181. package/dist/oauth2/errors.mjs +27 -0
  182. package/dist/oauth2/index.d.mts +2 -2
  183. package/dist/oauth2/index.mjs +3 -3
  184. package/dist/oauth2/link-account.d.mts +27 -1
  185. package/dist/oauth2/link-account.mjs +30 -5
  186. package/dist/oauth2/state.mjs +8 -2
  187. package/dist/{package.mjs → packages/better-auth/package.mjs} +1 -1
  188. package/dist/plugins/access/access.d.mts +3 -15
  189. package/dist/plugins/access/access.mjs +11 -6
  190. package/dist/plugins/access/index.d.mts +2 -2
  191. package/dist/plugins/access/types.d.mts +11 -4
  192. package/dist/plugins/admin/access/statement.d.mts +29 -93
  193. package/dist/plugins/admin/admin.mjs +0 -4
  194. package/dist/plugins/admin/client.d.mts +6 -1
  195. package/dist/plugins/admin/client.mjs +5 -0
  196. package/dist/plugins/admin/routes.mjs +3 -2
  197. package/dist/plugins/anonymous/client.d.mts +1 -0
  198. package/dist/plugins/anonymous/error-codes.d.mts +1 -0
  199. package/dist/plugins/anonymous/error-codes.mjs +1 -0
  200. package/dist/plugins/anonymous/index.d.mts +1 -0
  201. package/dist/plugins/anonymous/index.mjs +16 -2
  202. package/dist/plugins/bearer/index.mjs +5 -12
  203. package/dist/plugins/captcha/index.mjs +14 -1
  204. package/dist/plugins/device-authorization/error-codes.mjs +1 -0
  205. package/dist/plugins/device-authorization/index.d.mts +1 -0
  206. package/dist/plugins/device-authorization/routes.mjs +34 -3
  207. package/dist/plugins/email-otp/routes.mjs +4 -4
  208. package/dist/plugins/generic-oauth/error-codes.mjs +0 -1
  209. package/dist/plugins/generic-oauth/index.d.mts +2 -4
  210. package/dist/plugins/generic-oauth/index.mjs +23 -17
  211. package/dist/plugins/generic-oauth/providers/auth0.mjs +1 -0
  212. package/dist/plugins/generic-oauth/providers/gumroad.mjs +1 -0
  213. package/dist/plugins/generic-oauth/providers/hubspot.mjs +1 -0
  214. package/dist/plugins/generic-oauth/providers/keycloak.mjs +1 -0
  215. package/dist/plugins/generic-oauth/providers/line.mjs +1 -0
  216. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +1 -0
  217. package/dist/plugins/generic-oauth/providers/okta.mjs +1 -0
  218. package/dist/plugins/generic-oauth/providers/patreon.mjs +1 -0
  219. package/dist/plugins/generic-oauth/providers/slack.mjs +1 -0
  220. package/dist/plugins/generic-oauth/types.d.mts +30 -8
  221. package/dist/plugins/index.d.mts +2 -2
  222. package/dist/plugins/jwt/utils.d.mts +1 -1
  223. package/dist/plugins/last-login-method/client.mjs +2 -2
  224. package/dist/plugins/magic-link/index.d.mts +8 -1
  225. package/dist/plugins/magic-link/index.mjs +4 -17
  226. package/dist/plugins/mcp/authorize.mjs +8 -2
  227. package/dist/plugins/mcp/index.mjs +75 -35
  228. package/dist/plugins/multi-session/index.mjs +2 -2
  229. package/dist/plugins/oauth-proxy/index.mjs +45 -32
  230. package/dist/plugins/oauth-proxy/utils.mjs +3 -10
  231. package/dist/plugins/oidc-provider/authorize.mjs +8 -2
  232. package/dist/plugins/oidc-provider/index.mjs +65 -38
  233. package/dist/plugins/one-tap/client.mjs +9 -2
  234. package/dist/plugins/one-tap/index.mjs +19 -36
  235. package/dist/plugins/open-api/generator.mjs +25 -5
  236. package/dist/plugins/organization/access/statement.d.mts +68 -201
  237. package/dist/plugins/organization/adapter.d.mts +1 -1
  238. package/dist/plugins/organization/adapter.mjs +65 -58
  239. package/dist/plugins/organization/client.d.mts +3 -1
  240. package/dist/plugins/organization/client.mjs +1 -1
  241. package/dist/plugins/organization/error-codes.d.mts +2 -0
  242. package/dist/plugins/organization/error-codes.mjs +3 -1
  243. package/dist/plugins/organization/routes/crud-access-control.d.mts +2 -2
  244. package/dist/plugins/organization/routes/crud-invites.d.mts +8 -1
  245. package/dist/plugins/organization/routes/crud-invites.mjs +8 -3
  246. package/dist/plugins/organization/routes/crud-org.d.mts +4 -4
  247. package/dist/plugins/organization/routes/crud-org.mjs +2 -2
  248. package/dist/plugins/organization/routes/crud-team.mjs +7 -2
  249. package/dist/plugins/organization/schema.d.mts +1 -1
  250. package/dist/plugins/organization/types.d.mts +15 -5
  251. package/dist/plugins/phone-number/routes.mjs +1 -1
  252. package/dist/plugins/siwe/client.d.mts +4 -0
  253. package/dist/plugins/siwe/client.mjs +5 -1
  254. package/dist/plugins/siwe/index.d.mts +13 -2
  255. package/dist/plugins/siwe/index.mjs +179 -165
  256. package/dist/plugins/two-factor/backup-codes/index.d.mts +4 -3
  257. package/dist/plugins/two-factor/client.mjs +2 -1
  258. package/dist/plugins/two-factor/index.mjs +3 -2
  259. package/dist/plugins/username/client.d.mts +1 -0
  260. package/dist/plugins/username/error-codes.d.mts +1 -0
  261. package/dist/plugins/username/error-codes.mjs +2 -1
  262. package/dist/plugins/username/index.d.mts +43 -2
  263. package/dist/plugins/username/index.mjs +73 -6
  264. package/dist/state.d.mts +2 -2
  265. package/dist/state.mjs +18 -4
  266. package/dist/test-utils/headers.mjs +2 -7
  267. package/dist/test-utils/http-test-instance.d.mts +397 -0
  268. package/dist/test-utils/http-test-instance.mjs +54 -0
  269. package/dist/test-utils/index.d.mts +2 -1
  270. package/dist/test-utils/index.mjs +2 -1
  271. package/dist/test-utils/test-instance.d.mts +4110 -224
  272. package/dist/test-utils/test-instance.mjs +11 -2
  273. package/dist/types/auth.d.mts +4 -0
  274. package/dist/utils/index.d.mts +1 -1
  275. package/dist/utils/url.d.mts +2 -1
  276. package/dist/utils/url.mjs +9 -3
  277. package/dist/version.mjs +1 -1
  278. package/package.json +14 -14
  279. package/dist/oauth2/error-codes.d.mts +0 -20
  280. package/dist/plugins/generic-oauth/client.d.mts +0 -32
  281. package/dist/plugins/generic-oauth/client.mjs +0 -19
  282. package/dist/plugins/generic-oauth/error-codes.d.mts +0 -10
@@ -1,5 +1,6 @@
1
1
  import { parseUserOutput } from "../../db/schema.mjs";
2
2
  import { setSessionCookie } from "../../cookies/index.mjs";
3
+ import { handleOAuthUserInfo } from "../../oauth2/link-account.mjs";
3
4
  import { APIError } from "../../api/index.mjs";
4
5
  import { PACKAGE_VERSION } from "../../version.mjs";
5
6
  import { toBoolean } from "../../utils/boolean.mjs";
@@ -45,47 +46,29 @@ const oneTap = (options) => ({
45
46
  } catch {
46
47
  throw new APIError("BAD_REQUEST", { message: "invalid id token" });
47
48
  }
48
- const { email, email_verified, name, picture, sub } = payload;
49
- if (!email) return ctx.json({ error: "Email not available in token" });
50
- const user = await ctx.context.internalAdapter.findUserByEmail(email);
51
- if (!user) {
52
- if (options?.disableSignup) throw new APIError("BAD_GATEWAY", { message: "User not found" });
53
- const newUser = await ctx.context.internalAdapter.createOAuthUser({
54
- email,
49
+ const { email: rawEmail, email_verified, name, picture, sub } = payload;
50
+ if (!rawEmail) return ctx.json({ error: "Email not available in token" });
51
+ const result = await handleOAuthUserInfo(ctx, {
52
+ userInfo: {
53
+ id: sub,
54
+ email: rawEmail.toLowerCase(),
55
55
  emailVerified: typeof email_verified === "boolean" ? email_verified : toBoolean(email_verified),
56
- name,
56
+ name: name ?? "",
57
57
  image: picture
58
- }, {
58
+ },
59
+ account: {
59
60
  providerId: "google",
60
- accountId: sub
61
- });
62
- if (!newUser) throw new APIError("INTERNAL_SERVER_ERROR", { message: "Could not create user" });
63
- const session = await ctx.context.internalAdapter.createSession(newUser.user.id);
64
- await setSessionCookie(ctx, {
65
- user: newUser.user,
66
- session
67
- });
68
- return ctx.json({
69
- token: session.token,
70
- user: parseUserOutput(ctx.context.options, newUser.user)
71
- });
72
- }
73
- if (!await ctx.context.internalAdapter.findAccount(sub)) if ((ctx.context.options.account?.accountLinking)?.enabled !== false && (ctx.context.trustedProviders.includes("google") || email_verified)) await ctx.context.internalAdapter.linkAccount({
74
- userId: user.user.id,
75
- providerId: "google",
76
- accountId: sub,
77
- scope: "openid,profile,email",
78
- idToken
79
- });
80
- else throw new APIError("UNAUTHORIZED", { message: "Google sub doesn't match" });
81
- const session = await ctx.context.internalAdapter.createSession(user.user.id);
82
- await setSessionCookie(ctx, {
83
- user: user.user,
84
- session
61
+ accountId: sub,
62
+ idToken,
63
+ scope: "openid,profile,email"
64
+ },
65
+ disableSignUp: options?.disableSignup
85
66
  });
67
+ if (result.error) throw new APIError("UNAUTHORIZED", { message: result.error });
68
+ await setSessionCookie(ctx, result.data);
86
69
  return ctx.json({
87
- token: session.token,
88
- user: parseUserOutput(ctx.context.options, user.user)
70
+ token: result.data.session.token,
71
+ user: parseUserOutput(ctx.context.options, result.data.user)
89
72
  });
90
73
  }) },
91
74
  options
@@ -1,6 +1,7 @@
1
1
  import { db_exports } from "../../db/index.mjs";
2
2
  import { getEndpoints } from "../../api/index.mjs";
3
3
  import * as z from "zod";
4
+ import { toPascalCase } from "@better-auth/core/utils/string";
4
5
  //#region src/plugins/open-api/generator.ts
5
6
  const allowedType = new Set([
6
7
  "string",
@@ -86,6 +87,15 @@ function processZodType(zodType) {
86
87
  default: defaultValue
87
88
  };
88
89
  }
90
+ if (zodType instanceof z.ZodRecord) {
91
+ const valueType = zodType._zod?.def?.valueType;
92
+ return {
93
+ type: "object",
94
+ additionalProperties: valueType instanceof z.ZodType ? processZodType(valueType) : {},
95
+ description: zodType.description
96
+ };
97
+ }
98
+ if (zodType instanceof z.ZodAny || zodType instanceof z.ZodUnknown) return { description: zodType.description };
89
99
  if (zodType instanceof z.ZodObject) {
90
100
  const shape = zodType.shape;
91
101
  if (shape) {
@@ -156,7 +166,7 @@ function getResponse(responses) {
156
166
  } } },
157
167
  description: "Internal Server Error. This is a problem with the server that you cannot fix."
158
168
  },
159
- ...responses
169
+ ...responses ? structuredClone(responses) : {}
160
170
  };
161
171
  }
162
172
  function toOpenApiPath(path) {
@@ -196,6 +206,16 @@ async function generator(ctx, options) {
196
206
  return acc;
197
207
  }, {}) } };
198
208
  const paths = {};
209
+ const seenOperationIds = /* @__PURE__ */ new Set();
210
+ const uniqueOperationId = (operationId, method) => {
211
+ if (!operationId) return void 0;
212
+ const base = seenOperationIds.has(operationId) ? `${operationId}${toPascalCase(method)}` : operationId;
213
+ let result = base;
214
+ let n = 2;
215
+ while (seenOperationIds.has(result)) result = `${base}${n++}`;
216
+ seenOperationIds.add(result);
217
+ return result;
218
+ };
199
219
  Object.entries(baseEndpoints.api).forEach(([_, value]) => {
200
220
  if (!value.path || ctx.options.disabledPaths?.includes(value.path)) return;
201
221
  const options = value.options;
@@ -207,7 +227,7 @@ async function generator(ctx, options) {
207
227
  [method.toLowerCase()]: {
208
228
  tags: ["Default", ...options.metadata?.openapi?.tags || []],
209
229
  description: options.metadata?.openapi?.description,
210
- operationId: options.metadata?.openapi?.operationId,
230
+ operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
211
231
  security: [{ bearerAuth: [] }],
212
232
  parameters: getParameters(options),
213
233
  responses: getResponse(options.metadata?.openapi?.responses)
@@ -220,7 +240,7 @@ async function generator(ctx, options) {
220
240
  [method.toLowerCase()]: {
221
241
  tags: ["Default", ...options.metadata?.openapi?.tags || []],
222
242
  description: options.metadata?.openapi?.description,
223
- operationId: options.metadata?.openapi?.operationId,
243
+ operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
224
244
  security: [{ bearerAuth: [] }],
225
245
  parameters: getParameters(options),
226
246
  ...body ? { requestBody: body } : { requestBody: { content: { "application/json": { schema: {
@@ -253,7 +273,7 @@ async function generator(ctx, options) {
253
273
  [method.toLowerCase()]: {
254
274
  tags: options.metadata?.openapi?.tags || [plugin.id.charAt(0).toUpperCase() + plugin.id.slice(1)],
255
275
  description: options.metadata?.openapi?.description,
256
- operationId: options.metadata?.openapi?.operationId,
276
+ operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
257
277
  security: [{ bearerAuth: [] }],
258
278
  parameters: getParameters(options),
259
279
  responses: getResponse(options.metadata?.openapi?.responses)
@@ -264,7 +284,7 @@ async function generator(ctx, options) {
264
284
  [method.toLowerCase()]: {
265
285
  tags: options.metadata?.openapi?.tags || [plugin.id.charAt(0).toUpperCase() + plugin.id.slice(1)],
266
286
  description: options.metadata?.openapi?.description,
267
- operationId: options.metadata?.openapi?.operationId,
287
+ operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
268
288
  security: [{ bearerAuth: [] }],
269
289
  parameters: getParameters(options),
270
290
  requestBody: getRequestBody(options),
@@ -1,5 +1,4 @@
1
- import { Subset } from "../../access/types.mjs";
2
- import { AuthorizeResponse } from "../../access/access.mjs";
1
+ import { ExactRoleStatements, Role, RoleInput, Statements } from "../../access/types.mjs";
3
2
  //#region src/plugins/organization/access/statement.d.ts
4
3
  declare const defaultStatements: {
5
4
  readonly organization: readonly ["update", "delete"];
@@ -9,137 +8,100 @@ declare const defaultStatements: {
9
8
  readonly ac: readonly ["create", "read", "update", "delete"];
10
9
  };
11
10
  declare const defaultAc: {
12
- newRole<K extends "organization" | "member" | "team" | "ac" | "invitation">(statements: Subset<K, {
11
+ newRole<const TRoleStatements extends Statements>(statements: RoleInput<{
13
12
  readonly organization: readonly ["update", "delete"];
14
13
  readonly member: readonly ["create", "update", "delete"];
15
14
  readonly invitation: readonly ["create", "cancel"];
16
15
  readonly team: readonly ["create", "update", "delete"];
17
16
  readonly ac: readonly ["create", "read", "update", "delete"];
18
- }>): {
19
- authorize<K_1 extends K>(request: K_1 extends infer T extends keyof Subset<K, {
20
- readonly organization: readonly ["update", "delete"];
21
- readonly member: readonly ["create", "update", "delete"];
22
- readonly invitation: readonly ["create", "cancel"];
23
- readonly team: readonly ["create", "update", "delete"];
24
- readonly ac: readonly ["create", "read", "update", "delete"];
25
- }> ? { [key in T]?: Subset<K, {
26
- readonly organization: readonly ["update", "delete"];
27
- readonly member: readonly ["create", "update", "delete"];
28
- readonly invitation: readonly ["create", "cancel"];
29
- readonly team: readonly ["create", "update", "delete"];
30
- readonly ac: readonly ["create", "read", "update", "delete"];
31
- }>[key] | {
32
- actions: Subset<K, {
33
- readonly organization: readonly ["update", "delete"];
34
- readonly member: readonly ["create", "update", "delete"];
35
- readonly invitation: readonly ["create", "cancel"];
36
- readonly team: readonly ["create", "update", "delete"];
37
- readonly ac: readonly ["create", "read", "update", "delete"];
38
- }>[key];
39
- connector: "OR" | "AND";
40
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
41
- statements: Subset<K, {
42
- readonly organization: readonly ["update", "delete"];
43
- readonly member: readonly ["create", "update", "delete"];
44
- readonly invitation: readonly ["create", "cancel"];
45
- readonly team: readonly ["create", "update", "delete"];
46
- readonly ac: readonly ["create", "read", "update", "delete"];
47
- }>;
48
- };
49
- statements: {
50
- readonly organization: readonly ["update", "delete"];
51
- readonly member: readonly ["create", "update", "delete"];
52
- readonly invitation: readonly ["create", "cancel"];
53
- readonly team: readonly ["create", "update", "delete"];
54
- readonly ac: readonly ["create", "read", "update", "delete"];
55
- };
56
- };
57
- declare const adminAc: {
58
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
59
- readonly organization: readonly ["update", "delete"];
60
- readonly member: readonly ["create", "update", "delete"];
61
- readonly invitation: readonly ["create", "cancel"];
62
- readonly team: readonly ["create", "update", "delete"];
63
- readonly ac: readonly ["create", "read", "update", "delete"];
64
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
65
- readonly organization: readonly ["update", "delete"];
66
- readonly member: readonly ["create", "update", "delete"];
67
- readonly invitation: readonly ["create", "cancel"];
68
- readonly team: readonly ["create", "update", "delete"];
69
- readonly ac: readonly ["create", "read", "update", "delete"];
70
- }>[key] | {
71
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
72
- readonly organization: readonly ["update", "delete"];
73
- readonly member: readonly ["create", "update", "delete"];
74
- readonly invitation: readonly ["create", "cancel"];
75
- readonly team: readonly ["create", "update", "delete"];
76
- readonly ac: readonly ["create", "read", "update", "delete"];
77
- }>[key];
78
- connector: "OR" | "AND";
79
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
80
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
17
+ }, TRoleStatements>): Role<ExactRoleStatements<TRoleStatements>, {
81
18
  readonly organization: readonly ["update", "delete"];
82
19
  readonly member: readonly ["create", "update", "delete"];
83
20
  readonly invitation: readonly ["create", "cancel"];
84
21
  readonly team: readonly ["create", "update", "delete"];
85
22
  readonly ac: readonly ["create", "read", "update", "delete"];
86
23
  }>;
87
- };
88
- declare const ownerAc: {
89
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
90
- readonly organization: readonly ["update", "delete"];
91
- readonly member: readonly ["create", "update", "delete"];
92
- readonly invitation: readonly ["create", "cancel"];
93
- readonly team: readonly ["create", "update", "delete"];
94
- readonly ac: readonly ["create", "read", "update", "delete"];
95
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
96
- readonly organization: readonly ["update", "delete"];
97
- readonly member: readonly ["create", "update", "delete"];
98
- readonly invitation: readonly ["create", "cancel"];
99
- readonly team: readonly ["create", "update", "delete"];
100
- readonly ac: readonly ["create", "read", "update", "delete"];
101
- }>[key] | {
102
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
103
- readonly organization: readonly ["update", "delete"];
104
- readonly member: readonly ["create", "update", "delete"];
105
- readonly invitation: readonly ["create", "cancel"];
106
- readonly team: readonly ["create", "update", "delete"];
107
- readonly ac: readonly ["create", "read", "update", "delete"];
108
- }>[key];
109
- connector: "OR" | "AND";
110
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
111
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
24
+ statements: {
112
25
  readonly organization: readonly ["update", "delete"];
113
26
  readonly member: readonly ["create", "update", "delete"];
114
27
  readonly invitation: readonly ["create", "cancel"];
115
28
  readonly team: readonly ["create", "update", "delete"];
116
29
  readonly ac: readonly ["create", "read", "update", "delete"];
117
- }>;
30
+ };
118
31
  };
119
- declare const memberAc: {
120
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
32
+ declare const adminAc: Role<ExactRoleStatements<{
33
+ readonly organization: ["update"];
34
+ readonly invitation: ["create", "cancel"];
35
+ readonly member: ["create", "update", "delete"];
36
+ readonly team: ["create", "update", "delete"];
37
+ readonly ac: ["create", "read", "update", "delete"];
38
+ }>, {
39
+ readonly organization: readonly ["update", "delete"];
40
+ readonly member: readonly ["create", "update", "delete"];
41
+ readonly invitation: readonly ["create", "cancel"];
42
+ readonly team: readonly ["create", "update", "delete"];
43
+ readonly ac: readonly ["create", "read", "update", "delete"];
44
+ }>;
45
+ declare const ownerAc: Role<ExactRoleStatements<{
46
+ readonly organization: ["update", "delete"];
47
+ readonly member: ["create", "update", "delete"];
48
+ readonly invitation: ["create", "cancel"];
49
+ readonly team: ["create", "update", "delete"];
50
+ readonly ac: ["create", "read", "update", "delete"];
51
+ }>, {
52
+ readonly organization: readonly ["update", "delete"];
53
+ readonly member: readonly ["create", "update", "delete"];
54
+ readonly invitation: readonly ["create", "cancel"];
55
+ readonly team: readonly ["create", "update", "delete"];
56
+ readonly ac: readonly ["create", "read", "update", "delete"];
57
+ }>;
58
+ declare const memberAc: Role<ExactRoleStatements<{
59
+ readonly organization: [];
60
+ readonly member: [];
61
+ readonly invitation: [];
62
+ readonly team: [];
63
+ readonly ac: ["read"];
64
+ }>, {
65
+ readonly organization: readonly ["update", "delete"];
66
+ readonly member: readonly ["create", "update", "delete"];
67
+ readonly invitation: readonly ["create", "cancel"];
68
+ readonly team: readonly ["create", "update", "delete"];
69
+ readonly ac: readonly ["create", "read", "update", "delete"];
70
+ }>;
71
+ declare const defaultRoles: {
72
+ admin: Role<ExactRoleStatements<{
73
+ readonly organization: ["update"];
74
+ readonly invitation: ["create", "cancel"];
75
+ readonly member: ["create", "update", "delete"];
76
+ readonly team: ["create", "update", "delete"];
77
+ readonly ac: ["create", "read", "update", "delete"];
78
+ }>, {
121
79
  readonly organization: readonly ["update", "delete"];
122
80
  readonly member: readonly ["create", "update", "delete"];
123
81
  readonly invitation: readonly ["create", "cancel"];
124
82
  readonly team: readonly ["create", "update", "delete"];
125
83
  readonly ac: readonly ["create", "read", "update", "delete"];
126
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
84
+ }>;
85
+ owner: Role<ExactRoleStatements<{
86
+ readonly organization: ["update", "delete"];
87
+ readonly member: ["create", "update", "delete"];
88
+ readonly invitation: ["create", "cancel"];
89
+ readonly team: ["create", "update", "delete"];
90
+ readonly ac: ["create", "read", "update", "delete"];
91
+ }>, {
127
92
  readonly organization: readonly ["update", "delete"];
128
93
  readonly member: readonly ["create", "update", "delete"];
129
94
  readonly invitation: readonly ["create", "cancel"];
130
95
  readonly team: readonly ["create", "update", "delete"];
131
96
  readonly ac: readonly ["create", "read", "update", "delete"];
132
- }>[key] | {
133
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
134
- readonly organization: readonly ["update", "delete"];
135
- readonly member: readonly ["create", "update", "delete"];
136
- readonly invitation: readonly ["create", "cancel"];
137
- readonly team: readonly ["create", "update", "delete"];
138
- readonly ac: readonly ["create", "read", "update", "delete"];
139
- }>[key];
140
- connector: "OR" | "AND";
141
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
142
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
97
+ }>;
98
+ member: Role<ExactRoleStatements<{
99
+ readonly organization: [];
100
+ readonly member: [];
101
+ readonly invitation: [];
102
+ readonly team: [];
103
+ readonly ac: ["read"];
104
+ }>, {
143
105
  readonly organization: readonly ["update", "delete"];
144
106
  readonly member: readonly ["create", "update", "delete"];
145
107
  readonly invitation: readonly ["create", "cancel"];
@@ -147,100 +109,5 @@ declare const memberAc: {
147
109
  readonly ac: readonly ["create", "read", "update", "delete"];
148
110
  }>;
149
111
  };
150
- declare const defaultRoles: {
151
- admin: {
152
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
153
- readonly organization: readonly ["update", "delete"];
154
- readonly member: readonly ["create", "update", "delete"];
155
- readonly invitation: readonly ["create", "cancel"];
156
- readonly team: readonly ["create", "update", "delete"];
157
- readonly ac: readonly ["create", "read", "update", "delete"];
158
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
159
- readonly organization: readonly ["update", "delete"];
160
- readonly member: readonly ["create", "update", "delete"];
161
- readonly invitation: readonly ["create", "cancel"];
162
- readonly team: readonly ["create", "update", "delete"];
163
- readonly ac: readonly ["create", "read", "update", "delete"];
164
- }>[key] | {
165
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
166
- readonly organization: readonly ["update", "delete"];
167
- readonly member: readonly ["create", "update", "delete"];
168
- readonly invitation: readonly ["create", "cancel"];
169
- readonly team: readonly ["create", "update", "delete"];
170
- readonly ac: readonly ["create", "read", "update", "delete"];
171
- }>[key];
172
- connector: "OR" | "AND";
173
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
174
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
175
- readonly organization: readonly ["update", "delete"];
176
- readonly member: readonly ["create", "update", "delete"];
177
- readonly invitation: readonly ["create", "cancel"];
178
- readonly team: readonly ["create", "update", "delete"];
179
- readonly ac: readonly ["create", "read", "update", "delete"];
180
- }>;
181
- };
182
- owner: {
183
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
184
- readonly organization: readonly ["update", "delete"];
185
- readonly member: readonly ["create", "update", "delete"];
186
- readonly invitation: readonly ["create", "cancel"];
187
- readonly team: readonly ["create", "update", "delete"];
188
- readonly ac: readonly ["create", "read", "update", "delete"];
189
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
190
- readonly organization: readonly ["update", "delete"];
191
- readonly member: readonly ["create", "update", "delete"];
192
- readonly invitation: readonly ["create", "cancel"];
193
- readonly team: readonly ["create", "update", "delete"];
194
- readonly ac: readonly ["create", "read", "update", "delete"];
195
- }>[key] | {
196
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
197
- readonly organization: readonly ["update", "delete"];
198
- readonly member: readonly ["create", "update", "delete"];
199
- readonly invitation: readonly ["create", "cancel"];
200
- readonly team: readonly ["create", "update", "delete"];
201
- readonly ac: readonly ["create", "read", "update", "delete"];
202
- }>[key];
203
- connector: "OR" | "AND";
204
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
205
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
206
- readonly organization: readonly ["update", "delete"];
207
- readonly member: readonly ["create", "update", "delete"];
208
- readonly invitation: readonly ["create", "cancel"];
209
- readonly team: readonly ["create", "update", "delete"];
210
- readonly ac: readonly ["create", "read", "update", "delete"];
211
- }>;
212
- };
213
- member: {
214
- authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
215
- readonly organization: readonly ["update", "delete"];
216
- readonly member: readonly ["create", "update", "delete"];
217
- readonly invitation: readonly ["create", "cancel"];
218
- readonly team: readonly ["create", "update", "delete"];
219
- readonly ac: readonly ["create", "read", "update", "delete"];
220
- }> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
221
- readonly organization: readonly ["update", "delete"];
222
- readonly member: readonly ["create", "update", "delete"];
223
- readonly invitation: readonly ["create", "cancel"];
224
- readonly team: readonly ["create", "update", "delete"];
225
- readonly ac: readonly ["create", "read", "update", "delete"];
226
- }>[key] | {
227
- actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
228
- readonly organization: readonly ["update", "delete"];
229
- readonly member: readonly ["create", "update", "delete"];
230
- readonly invitation: readonly ["create", "cancel"];
231
- readonly team: readonly ["create", "update", "delete"];
232
- readonly ac: readonly ["create", "read", "update", "delete"];
233
- }>[key];
234
- connector: "OR" | "AND";
235
- } | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
236
- statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
237
- readonly organization: readonly ["update", "delete"];
238
- readonly member: readonly ["create", "update", "delete"];
239
- readonly invitation: readonly ["create", "cancel"];
240
- readonly team: readonly ["create", "update", "delete"];
241
- readonly ac: readonly ["create", "read", "update", "delete"];
242
- }>;
243
- };
244
- };
245
112
  //#endregion
246
113
  export { adminAc, defaultAc, defaultRoles, defaultStatements, memberAc, ownerAc };
@@ -396,7 +396,7 @@ declare const getOrgAdapter: <O extends OrganizationOptions>(context: AuthContex
396
396
  } ? FieldAttributeToObject<RemoveFieldsWithReturnedFalse<Field>> : {}) extends infer T_3 ? { [K_3 in keyof T_3]: T_3[K_3] } : never)[] | undefined;
397
397
  }) | null>;
398
398
  listOrganizations: (userId: string) => Promise<InferOrganization<O>[]>;
399
- createTeam: (data: Omit<TeamInput, "id">) => Promise<{
399
+ createTeam: (data: TeamInput) => Promise<{
400
400
  id: string;
401
401
  name: string;
402
402
  organizationId: string;
@@ -1,6 +1,6 @@
1
1
  import { getDate } from "../../utils/date.mjs";
2
2
  import { parseJSON } from "../../client/parser.mjs";
3
- import { getCurrentAdapter } from "@better-auth/core/context";
3
+ import { getCurrentAdapter, runWithTransaction } from "@better-auth/core/context";
4
4
  import { BetterAuthError } from "@better-auth/core/error";
5
5
  import { filterOutputFields } from "@better-auth/core/utils/db";
6
6
  //#region src/plugins/organization/adapter.ts
@@ -184,46 +184,49 @@ const getOrgAdapter = (context, options) => {
184
184
  });
185
185
  },
186
186
  deleteMember: async ({ memberId, organizationId, userId: _userId }) => {
187
- const adapter = await getCurrentAdapter(baseAdapter);
188
- let userId;
189
- if (!_userId) {
190
- const member = await adapter.findOne({
187
+ return runWithTransaction(baseAdapter, async () => {
188
+ const adapter = await getCurrentAdapter(baseAdapter);
189
+ let userId;
190
+ if (!_userId) {
191
+ const member = await adapter.findOne({
192
+ model: "member",
193
+ where: [{
194
+ field: "id",
195
+ value: memberId
196
+ }]
197
+ });
198
+ if (!member) throw new BetterAuthError("Member not found");
199
+ userId = member.userId;
200
+ } else userId = _userId;
201
+ const member = await adapter.delete({
191
202
  model: "member",
192
203
  where: [{
193
204
  field: "id",
194
205
  value: memberId
195
206
  }]
196
207
  });
197
- if (!member) throw new BetterAuthError("Member not found");
198
- userId = member.userId;
199
- } else userId = _userId;
200
- const member = await adapter.delete({
201
- model: "member",
202
- where: [{
203
- field: "id",
204
- value: memberId
205
- }]
208
+ if (options?.teams?.enabled) {
209
+ const teams = await adapter.findMany({
210
+ model: "team",
211
+ where: [{
212
+ field: "organizationId",
213
+ value: organizationId
214
+ }]
215
+ });
216
+ if (teams.length > 0) await adapter.deleteMany({
217
+ model: "teamMember",
218
+ where: [{
219
+ field: "userId",
220
+ value: userId
221
+ }, {
222
+ field: "teamId",
223
+ value: teams.map((team) => team.id),
224
+ operator: "in"
225
+ }]
226
+ });
227
+ }
228
+ return member;
206
229
  });
207
- if (options?.teams?.enabled) {
208
- const teams = await adapter.findMany({
209
- model: "team",
210
- where: [{
211
- field: "organizationId",
212
- value: organizationId
213
- }]
214
- });
215
- await Promise.all(teams.map((team) => adapter.deleteMany({
216
- model: "teamMember",
217
- where: [{
218
- field: "teamId",
219
- value: team.id
220
- }, {
221
- field: "userId",
222
- value: userId
223
- }]
224
- })));
225
- }
226
- return member;
227
230
  },
228
231
  updateOrganization: async (organizationId, data) => {
229
232
  const organization = await (await getCurrentAdapter(baseAdapter)).update({
@@ -244,29 +247,31 @@ const getOrgAdapter = (context, options) => {
244
247
  }, orgAdditionalFields);
245
248
  },
246
249
  deleteOrganization: async (organizationId) => {
247
- const adapter = await getCurrentAdapter(baseAdapter);
248
- await adapter.deleteMany({
249
- model: "member",
250
- where: [{
251
- field: "organizationId",
252
- value: organizationId
253
- }]
254
- });
255
- await adapter.deleteMany({
256
- model: "invitation",
257
- where: [{
258
- field: "organizationId",
259
- value: organizationId
260
- }]
261
- });
262
- await adapter.delete({
263
- model: "organization",
264
- where: [{
265
- field: "id",
266
- value: organizationId
267
- }]
250
+ return runWithTransaction(baseAdapter, async () => {
251
+ const adapter = await getCurrentAdapter(baseAdapter);
252
+ await adapter.deleteMany({
253
+ model: "member",
254
+ where: [{
255
+ field: "organizationId",
256
+ value: organizationId
257
+ }]
258
+ });
259
+ await adapter.deleteMany({
260
+ model: "invitation",
261
+ where: [{
262
+ field: "organizationId",
263
+ value: organizationId
264
+ }]
265
+ });
266
+ await adapter.delete({
267
+ model: "organization",
268
+ where: [{
269
+ field: "id",
270
+ value: organizationId
271
+ }]
272
+ });
273
+ return organizationId;
268
274
  });
269
- return organizationId;
270
275
  },
271
276
  setActiveOrganization: async (sessionToken, organizationId, ctx) => {
272
277
  return await context.internalAdapter.updateSession(sessionToken, { activeOrganizationId: organizationId });
@@ -357,7 +362,8 @@ const getOrgAdapter = (context, options) => {
357
362
  createTeam: async (data) => {
358
363
  return await (await getCurrentAdapter(baseAdapter)).create({
359
364
  model: "team",
360
- data
365
+ data,
366
+ forceAllowId: true
361
367
  });
362
368
  },
363
369
  findTeamById: async ({ teamId, organizationId, includeTeamMembers }) => {
@@ -553,7 +559,8 @@ const getOrgAdapter = (context, options) => {
553
559
  inviterId: user.id,
554
560
  ...invitation,
555
561
  teamId: invitation.teamIds.length > 0 ? invitation.teamIds.join(",") : null
556
- }
562
+ },
563
+ forceAllowId: true
557
564
  });
558
565
  },
559
566
  findInvitationById: async (id) => {