@masheev/better-auth 0.0.0-stage → 1.7.5

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 (465) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +31 -2
  3. package/TYPE-PATCH-NOTICE.md +9 -0
  4. package/TYPE-PATCH-PROVENANCE.json +267 -0
  5. package/dist/_virtual/_rolldown/runtime.mjs +27 -0
  6. package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
  7. package/dist/adapters/drizzle-adapter/index.mjs +2 -0
  8. package/dist/adapters/index.d.mts +26 -0
  9. package/dist/adapters/index.mjs +9 -0
  10. package/dist/adapters/kysely-adapter/index.d.mts +1 -0
  11. package/dist/adapters/kysely-adapter/index.mjs +2 -0
  12. package/dist/adapters/memory-adapter/index.d.mts +1 -0
  13. package/dist/adapters/memory-adapter/index.mjs +2 -0
  14. package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
  15. package/dist/adapters/mongodb-adapter/index.mjs +2 -0
  16. package/dist/adapters/prisma-adapter/index.d.mts +1 -0
  17. package/dist/adapters/prisma-adapter/index.mjs +2 -0
  18. package/dist/api/dispatch.d.mts +34 -0
  19. package/dist/api/dispatch.mjs +275 -0
  20. package/dist/api/index.d.mts +4053 -0
  21. package/dist/api/index.mjs +220 -0
  22. package/dist/api/middlewares/authorization.d.mts +69 -0
  23. package/dist/api/middlewares/authorization.mjs +78 -0
  24. package/dist/api/middlewares/index.d.mts +2 -0
  25. package/dist/api/middlewares/origin-check.d.mts +17 -0
  26. package/dist/api/middlewares/origin-check.mjs +155 -0
  27. package/dist/api/rate-limiter/index.mjs +318 -0
  28. package/dist/api/routes/account.d.mts +413 -0
  29. package/dist/api/routes/account.mjs +619 -0
  30. package/dist/api/routes/callback.d.mts +32 -0
  31. package/dist/api/routes/callback.mjs +261 -0
  32. package/dist/api/routes/email-verification.d.mts +160 -0
  33. package/dist/api/routes/email-verification.mjs +324 -0
  34. package/dist/api/routes/error.d.mts +27 -0
  35. package/dist/api/routes/error.mjs +387 -0
  36. package/dist/api/routes/index.d.mts +12 -0
  37. package/dist/api/routes/ok.d.mts +35 -0
  38. package/dist/api/routes/ok.mjs +27 -0
  39. package/dist/api/routes/password.d.mts +182 -0
  40. package/dist/api/routes/password.mjs +206 -0
  41. package/dist/api/routes/session.d.mts +450 -0
  42. package/dist/api/routes/session.mjs +481 -0
  43. package/dist/api/routes/sign-in.d.mts +186 -0
  44. package/dist/api/routes/sign-in.mjs +368 -0
  45. package/dist/api/routes/sign-out.d.mts +51 -0
  46. package/dist/api/routes/sign-out.mjs +96 -0
  47. package/dist/api/routes/sign-up.d.mts +159 -0
  48. package/dist/api/routes/sign-up.mjs +275 -0
  49. package/dist/api/routes/update-session.d.mts +74 -0
  50. package/dist/api/routes/update-session.mjs +57 -0
  51. package/dist/api/routes/update-user.d.mts +428 -0
  52. package/dist/api/routes/update-user.mjs +522 -0
  53. package/dist/api/state/oauth.d.mts +53 -0
  54. package/dist/api/state/oauth.mjs +38 -0
  55. package/dist/api/state/should-session-refresh.d.mts +12 -0
  56. package/dist/api/state/should-session-refresh.mjs +13 -0
  57. package/dist/api/to-auth-endpoints.mjs +60 -0
  58. package/dist/auth/base.mjs +66 -0
  59. package/dist/auth/full.d.mts +28 -0
  60. package/dist/auth/full.mjs +29 -0
  61. package/dist/auth/minimal.d.mts +10 -0
  62. package/dist/auth/minimal.mjs +11 -0
  63. package/dist/auth/trusted-origins.mjs +106 -0
  64. package/dist/client/broadcast-channel.d.mts +19 -0
  65. package/dist/client/broadcast-channel.mjs +44 -0
  66. package/dist/client/config.d.mts +90 -0
  67. package/dist/client/config.mjs +113 -0
  68. package/dist/client/equality.d.mts +19 -0
  69. package/dist/client/equality.mjs +42 -0
  70. package/dist/client/fetch-plugins.mjs +17 -0
  71. package/dist/client/focus-manager.d.mts +10 -0
  72. package/dist/client/focus-manager.mjs +30 -0
  73. package/dist/client/index.d.mts +35 -0
  74. package/dist/client/index.mjs +22 -0
  75. package/dist/client/lynx/index.d.mts +43 -0
  76. package/dist/client/lynx/index.mjs +22 -0
  77. package/dist/client/lynx/lynx-store.d.mts +46 -0
  78. package/dist/client/lynx/lynx-store.mjs +44 -0
  79. package/dist/client/online-manager.d.mts +11 -0
  80. package/dist/client/online-manager.mjs +33 -0
  81. package/dist/client/parser.d.mts +10 -0
  82. package/dist/client/parser.mjs +70 -0
  83. package/dist/client/path-to-object.d.mts +113 -0
  84. package/dist/client/plugins/index.d.mts +44 -0
  85. package/dist/client/plugins/index.mjs +30 -0
  86. package/dist/client/plugins/infer-plugin.d.mts +16 -0
  87. package/dist/client/plugins/infer-plugin.mjs +11 -0
  88. package/dist/client/proxy.mjs +78 -0
  89. package/dist/client/query.d.mts +23 -0
  90. package/dist/client/query.mjs +124 -0
  91. package/dist/client/react/index.d.mts +44 -0
  92. package/dist/client/react/index.mjs +22 -0
  93. package/dist/client/react/react-store.d.mts +46 -0
  94. package/dist/client/react/react-store.mjs +44 -0
  95. package/dist/client/session-atom.d.mts +11 -0
  96. package/dist/client/session-atom.mjs +178 -0
  97. package/dist/client/session-refresh.d.mts +20 -0
  98. package/dist/client/session-refresh.mjs +131 -0
  99. package/dist/client/solid/index.d.mts +44 -0
  100. package/dist/client/solid/index.mjs +22 -0
  101. package/dist/client/solid/solid-store.mjs +21 -0
  102. package/dist/client/svelte/index.d.mts +44 -0
  103. package/dist/client/svelte/index.mjs +18 -0
  104. package/dist/client/types.d.mts +51 -0
  105. package/dist/client/vanilla.d.mts +42 -0
  106. package/dist/client/vanilla.mjs +18 -0
  107. package/dist/client/vue/index.d.mts +67 -0
  108. package/dist/client/vue/index.mjs +54 -0
  109. package/dist/client/vue/vue-store.mjs +23 -0
  110. package/dist/context/create-context.mjs +235 -0
  111. package/dist/context/helpers.mjs +158 -0
  112. package/dist/context/init-minimal.mjs +17 -0
  113. package/dist/context/init.mjs +19 -0
  114. package/dist/context/secret-utils.mjs +53 -0
  115. package/dist/context/store-capabilities.mjs +12 -0
  116. package/dist/cookies/cache.mjs +33 -0
  117. package/dist/cookies/cookie-utils.d.mts +72 -0
  118. package/dist/cookies/cookie-utils.mjs +203 -0
  119. package/dist/cookies/index.d.mts +124 -0
  120. package/dist/cookies/index.mjs +350 -0
  121. package/dist/cookies/jwt.mjs +44 -0
  122. package/dist/cookies/session-store.d.mts +32 -0
  123. package/dist/cookies/session-store.mjs +183 -0
  124. package/dist/crypto/buffer.d.mts +7 -0
  125. package/dist/crypto/buffer.mjs +16 -0
  126. package/dist/crypto/index.d.mts +32 -0
  127. package/dist/crypto/index.mjs +69 -0
  128. package/dist/crypto/jwt.d.mts +9 -0
  129. package/dist/crypto/jwt.mjs +141 -0
  130. package/dist/crypto/password.d.mts +13 -0
  131. package/dist/crypto/password.mjs +14 -0
  132. package/dist/crypto/random.d.mts +4 -0
  133. package/dist/crypto/random.mjs +5 -0
  134. package/dist/db/adapter-base.d.mts +7 -0
  135. package/dist/db/adapter-base.mjs +25 -0
  136. package/dist/db/adapter-kysely.d.mts +7 -0
  137. package/dist/db/adapter-kysely.mjs +17 -0
  138. package/dist/db/field-converter.d.mts +7 -0
  139. package/dist/db/field-converter.mjs +19 -0
  140. package/dist/db/field.d.mts +41 -0
  141. package/dist/db/get-migration.d.mts +56 -0
  142. package/dist/db/get-migration.mjs +685 -0
  143. package/dist/db/get-schema.d.mts +13 -0
  144. package/dist/db/get-schema.mjs +39 -0
  145. package/dist/db/index.d.mts +10 -0
  146. package/dist/db/index.mjs +35 -0
  147. package/dist/db/internal-adapter.d.mts +14 -0
  148. package/dist/db/internal-adapter.mjs +951 -0
  149. package/dist/db/revoke-unproven-account-access.d.mts +21 -0
  150. package/dist/db/revoke-unproven-account-access.mjs +58 -0
  151. package/dist/db/schema.d.mts +62 -0
  152. package/dist/db/schema.mjs +161 -0
  153. package/dist/db/to-zod.d.mts +35 -0
  154. package/dist/db/to-zod.mjs +23 -0
  155. package/dist/db/verification-token-storage.mjs +25 -0
  156. package/dist/db/with-hooks.d.mts +37 -0
  157. package/dist/db/with-hooks.mjs +255 -0
  158. package/dist/index.d.mts +30 -0
  159. package/dist/index.mjs +17 -0
  160. package/dist/integrations/cookie-plugin-guard.mjs +18 -0
  161. package/dist/integrations/next-js.d.mts +29 -0
  162. package/dist/integrations/next-js.mjs +105 -0
  163. package/dist/integrations/node.d.mts +11 -0
  164. package/dist/integrations/node.mjs +13 -0
  165. package/dist/integrations/solid-start.d.mts +22 -0
  166. package/dist/integrations/solid-start.mjs +15 -0
  167. package/dist/integrations/svelte-kit.d.mts +38 -0
  168. package/dist/integrations/svelte-kit.mjs +57 -0
  169. package/dist/integrations/tanstack-start-solid.d.mts +33 -0
  170. package/dist/integrations/tanstack-start-solid.mjs +57 -0
  171. package/dist/integrations/tanstack-start.d.mts +33 -0
  172. package/dist/integrations/tanstack-start.mjs +57 -0
  173. package/dist/oauth2/account-key.mjs +43 -0
  174. package/dist/oauth2/errors.mjs +49 -0
  175. package/dist/oauth2/index.d.mts +5 -0
  176. package/dist/oauth2/index.mjs +5 -0
  177. package/dist/oauth2/link-account.d.mts +96 -0
  178. package/dist/oauth2/link-account.mjs +329 -0
  179. package/dist/oauth2/state.d.mts +54 -0
  180. package/dist/oauth2/state.mjs +67 -0
  181. package/dist/oauth2/utils.d.mts +11 -0
  182. package/dist/oauth2/utils.mjs +33 -0
  183. package/dist/package.mjs +4 -0
  184. package/dist/plugins/access/access.d.mts +17 -0
  185. package/dist/plugins/access/access.mjs +78 -0
  186. package/dist/plugins/access/index.d.mts +3 -0
  187. package/dist/plugins/access/index.mjs +2 -0
  188. package/dist/plugins/access/types.d.mts +24 -0
  189. package/dist/plugins/additional-fields/client.d.mts +100 -0
  190. package/dist/plugins/additional-fields/client.mjs +11 -0
  191. package/dist/plugins/admin/access/index.d.mts +2 -0
  192. package/dist/plugins/admin/access/index.mjs +2 -0
  193. package/dist/plugins/admin/access/statement.d.mts +51 -0
  194. package/dist/plugins/admin/access/statement.mjs +52 -0
  195. package/dist/plugins/admin/admin.d.mts +911 -0
  196. package/dist/plugins/admin/admin.mjs +89 -0
  197. package/dist/plugins/admin/client.d.mts +81 -0
  198. package/dist/plugins/admin/client.mjs +39 -0
  199. package/dist/plugins/admin/error-codes.d.mts +30 -0
  200. package/dist/plugins/admin/error-codes.mjs +29 -0
  201. package/dist/plugins/admin/has-permission.mjs +12 -0
  202. package/dist/plugins/admin/index.d.mts +3 -0
  203. package/dist/plugins/admin/index.mjs +2 -0
  204. package/dist/plugins/admin/routes.mjs +919 -0
  205. package/dist/plugins/admin/schema.d.mts +40 -0
  206. package/dist/plugins/admin/schema.mjs +33 -0
  207. package/dist/plugins/admin/types.d.mts +88 -0
  208. package/dist/plugins/anonymous/client.d.mts +32 -0
  209. package/dist/plugins/anonymous/client.mjs +21 -0
  210. package/dist/plugins/anonymous/error-codes.d.mts +15 -0
  211. package/dist/plugins/anonymous/error-codes.mjs +14 -0
  212. package/dist/plugins/anonymous/index.d.mts +175 -0
  213. package/dist/plugins/anonymous/index.mjs +219 -0
  214. package/dist/plugins/anonymous/schema.d.mts +15 -0
  215. package/dist/plugins/anonymous/schema.mjs +9 -0
  216. package/dist/plugins/anonymous/types.d.mts +65 -0
  217. package/dist/plugins/bearer/index.d.mts +45 -0
  218. package/dist/plugins/bearer/index.mjs +74 -0
  219. package/dist/plugins/captcha/constants.d.mts +9 -0
  220. package/dist/plugins/captcha/constants.mjs +27 -0
  221. package/dist/plugins/captcha/error-codes.mjs +13 -0
  222. package/dist/plugins/captcha/index.d.mts +27 -0
  223. package/dist/plugins/captcha/index.mjs +79 -0
  224. package/dist/plugins/captcha/types.d.mts +52 -0
  225. package/dist/plugins/captcha/utils.mjs +9 -0
  226. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
  227. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +47 -0
  228. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +32 -0
  229. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
  230. package/dist/plugins/custom-session/client.d.mts +17 -0
  231. package/dist/plugins/custom-session/client.mjs +7 -0
  232. package/dist/plugins/custom-session/index.d.mts +73 -0
  233. package/dist/plugins/custom-session/index.mjs +65 -0
  234. package/dist/plugins/device-authorization/client.d.mts +17 -0
  235. package/dist/plugins/device-authorization/client.mjs +18 -0
  236. package/dist/plugins/device-authorization/error-codes.mjs +19 -0
  237. package/dist/plugins/device-authorization/index.d.mts +558 -0
  238. package/dist/plugins/device-authorization/index.mjs +87 -0
  239. package/dist/plugins/device-authorization/routes.d.mts +32 -0
  240. package/dist/plugins/device-authorization/routes.mjs +725 -0
  241. package/dist/plugins/device-authorization/schema.d.mts +18 -0
  242. package/dist/plugins/device-authorization/schema.mjs +63 -0
  243. package/dist/plugins/email-otp/client.d.mts +21 -0
  244. package/dist/plugins/email-otp/client.mjs +17 -0
  245. package/dist/plugins/email-otp/error-codes.d.mts +10 -0
  246. package/dist/plugins/email-otp/error-codes.mjs +9 -0
  247. package/dist/plugins/email-otp/index.d.mts +551 -0
  248. package/dist/plugins/email-otp/index.mjs +145 -0
  249. package/dist/plugins/email-otp/otp-token.mjs +55 -0
  250. package/dist/plugins/email-otp/routes.mjs +784 -0
  251. package/dist/plugins/email-otp/types.d.mts +109 -0
  252. package/dist/plugins/email-otp/utils.mjs +17 -0
  253. package/dist/plugins/generic-oauth/error-codes.mjs +8 -0
  254. package/dist/plugins/generic-oauth/index.d.mts +52 -0
  255. package/dist/plugins/generic-oauth/index.mjs +279 -0
  256. package/dist/plugins/generic-oauth/providers/auth0.d.mts +36 -0
  257. package/dist/plugins/generic-oauth/providers/auth0.mjs +49 -0
  258. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +31 -0
  259. package/dist/plugins/generic-oauth/providers/gumroad.mjs +62 -0
  260. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +36 -0
  261. package/dist/plugins/generic-oauth/providers/hubspot.mjs +62 -0
  262. package/dist/plugins/generic-oauth/providers/index.d.mts +10 -0
  263. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +36 -0
  264. package/dist/plugins/generic-oauth/providers/keycloak.mjs +47 -0
  265. package/dist/plugins/generic-oauth/providers/line.d.mts +54 -0
  266. package/dist/plugins/generic-oauth/providers/line.mjs +93 -0
  267. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +39 -0
  268. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +104 -0
  269. package/dist/plugins/generic-oauth/providers/okta.d.mts +36 -0
  270. package/dist/plugins/generic-oauth/providers/okta.mjs +47 -0
  271. package/dist/plugins/generic-oauth/providers/patreon.d.mts +29 -0
  272. package/dist/plugins/generic-oauth/providers/patreon.mjs +61 -0
  273. package/dist/plugins/generic-oauth/providers/slack.d.mts +29 -0
  274. package/dist/plugins/generic-oauth/providers/slack.mjs +63 -0
  275. package/dist/plugins/generic-oauth/providers/yandex.d.mts +29 -0
  276. package/dist/plugins/generic-oauth/providers/yandex.mjs +67 -0
  277. package/dist/plugins/generic-oauth/types.d.mts +268 -0
  278. package/dist/plugins/haveibeenpwned/index.d.mts +63 -0
  279. package/dist/plugins/haveibeenpwned/index.mjs +81 -0
  280. package/dist/plugins/index.d.mts +69 -0
  281. package/dist/plugins/index.mjs +49 -0
  282. package/dist/plugins/jwt/adapter.mjs +68 -0
  283. package/dist/plugins/jwt/client.d.mts +41 -0
  284. package/dist/plugins/jwt/client.mjs +19 -0
  285. package/dist/plugins/jwt/cookie-cache.mjs +77 -0
  286. package/dist/plugins/jwt/index.d.mts +246 -0
  287. package/dist/plugins/jwt/index.mjs +214 -0
  288. package/dist/plugins/jwt/schema.d.mts +33 -0
  289. package/dist/plugins/jwt/schema.mjs +29 -0
  290. package/dist/plugins/jwt/sign.d.mts +128 -0
  291. package/dist/plugins/jwt/sign.mjs +130 -0
  292. package/dist/plugins/jwt/types.d.mts +256 -0
  293. package/dist/plugins/jwt/utils.d.mts +41 -0
  294. package/dist/plugins/jwt/utils.mjs +64 -0
  295. package/dist/plugins/jwt/verify.d.mts +11 -0
  296. package/dist/plugins/jwt/verify.mjs +45 -0
  297. package/dist/plugins/last-login-method/client.d.mts +48 -0
  298. package/dist/plugins/last-login-method/client.mjs +48 -0
  299. package/dist/plugins/last-login-method/index.d.mts +127 -0
  300. package/dist/plugins/last-login-method/index.mjs +98 -0
  301. package/dist/plugins/magic-link/client.d.mts +10 -0
  302. package/dist/plugins/magic-link/client.mjs +11 -0
  303. package/dist/plugins/magic-link/index.d.mts +213 -0
  304. package/dist/plugins/magic-link/index.mjs +208 -0
  305. package/dist/plugins/magic-link/utils.mjs +9 -0
  306. package/dist/plugins/multi-session/client.d.mts +19 -0
  307. package/dist/plugins/multi-session/client.mjs +19 -0
  308. package/dist/plugins/multi-session/error-codes.d.mts +8 -0
  309. package/dist/plugins/multi-session/error-codes.mjs +5 -0
  310. package/dist/plugins/multi-session/index.d.mts +212 -0
  311. package/dist/plugins/multi-session/index.mjs +217 -0
  312. package/dist/plugins/oauth-popup/client.d.mts +82 -0
  313. package/dist/plugins/oauth-popup/client.mjs +203 -0
  314. package/dist/plugins/oauth-popup/constants.d.mts +11 -0
  315. package/dist/plugins/oauth-popup/constants.mjs +11 -0
  316. package/dist/plugins/oauth-popup/error-codes.d.mts +11 -0
  317. package/dist/plugins/oauth-popup/error-codes.mjs +10 -0
  318. package/dist/plugins/oauth-popup/index.d.mts +67 -0
  319. package/dist/plugins/oauth-popup/index.mjs +232 -0
  320. package/dist/plugins/oauth-popup/types.d.mts +30 -0
  321. package/dist/plugins/oauth-proxy/index.d.mts +130 -0
  322. package/dist/plugins/oauth-proxy/index.mjs +407 -0
  323. package/dist/plugins/oauth-proxy/utils.mjs +55 -0
  324. package/dist/plugins/one-tap/client.d.mts +174 -0
  325. package/dist/plugins/one-tap/client.mjs +208 -0
  326. package/dist/plugins/one-tap/index.d.mts +82 -0
  327. package/dist/plugins/one-tap/index.mjs +100 -0
  328. package/dist/plugins/one-time-token/client.d.mts +10 -0
  329. package/dist/plugins/one-time-token/client.mjs +11 -0
  330. package/dist/plugins/one-time-token/index.d.mts +132 -0
  331. package/dist/plugins/one-time-token/index.mjs +107 -0
  332. package/dist/plugins/one-time-token/utils.mjs +9 -0
  333. package/dist/plugins/open-api/generator.d.mts +126 -0
  334. package/dist/plugins/open-api/generator.mjs +557 -0
  335. package/dist/plugins/open-api/index.d.mts +97 -0
  336. package/dist/plugins/open-api/index.mjs +65 -0
  337. package/dist/plugins/open-api/logo.mjs +13 -0
  338. package/dist/plugins/organization/access/index.d.mts +2 -0
  339. package/dist/plugins/organization/access/index.mjs +2 -0
  340. package/dist/plugins/organization/access/statement.d.mts +113 -0
  341. package/dist/plugins/organization/access/statement.mjs +77 -0
  342. package/dist/plugins/organization/adapter.d.mts +815 -0
  343. package/dist/plugins/organization/adapter.mjs +813 -0
  344. package/dist/plugins/organization/call.mjs +15 -0
  345. package/dist/plugins/organization/client.d.mts +375 -0
  346. package/dist/plugins/organization/client.mjs +104 -0
  347. package/dist/plugins/organization/error-codes.d.mts +66 -0
  348. package/dist/plugins/organization/error-codes.mjs +65 -0
  349. package/dist/plugins/organization/has-permission.d.mts +17 -0
  350. package/dist/plugins/organization/has-permission.mjs +34 -0
  351. package/dist/plugins/organization/index.d.mts +6 -0
  352. package/dist/plugins/organization/index.mjs +4 -0
  353. package/dist/plugins/organization/organization.d.mts +420 -0
  354. package/dist/plugins/organization/organization.mjs +886 -0
  355. package/dist/plugins/organization/permission.d.mts +15 -0
  356. package/dist/plugins/organization/permission.mjs +14 -0
  357. package/dist/plugins/organization/routes/crud-access-control.d.mts +511 -0
  358. package/dist/plugins/organization/routes/crud-access-control.mjs +674 -0
  359. package/dist/plugins/organization/routes/crud-invites.d.mts +1154 -0
  360. package/dist/plugins/organization/routes/crud-invites.mjs +602 -0
  361. package/dist/plugins/organization/routes/crud-members.d.mts +1057 -0
  362. package/dist/plugins/organization/routes/crud-members.mjs +518 -0
  363. package/dist/plugins/organization/routes/crud-org.d.mts +918 -0
  364. package/dist/plugins/organization/routes/crud-org.mjs +455 -0
  365. package/dist/plugins/organization/routes/crud-team.d.mts +1238 -0
  366. package/dist/plugins/organization/routes/crud-team.mjs +766 -0
  367. package/dist/plugins/organization/schema.d.mts +390 -0
  368. package/dist/plugins/organization/schema.mjs +65 -0
  369. package/dist/plugins/organization/types.d.mts +691 -0
  370. package/dist/plugins/phone-number/client.d.mts +31 -0
  371. package/dist/plugins/phone-number/client.mjs +19 -0
  372. package/dist/plugins/phone-number/error-codes.d.mts +19 -0
  373. package/dist/plugins/phone-number/error-codes.mjs +18 -0
  374. package/dist/plugins/phone-number/index.d.mts +360 -0
  375. package/dist/plugins/phone-number/index.mjs +57 -0
  376. package/dist/plugins/phone-number/routes.mjs +529 -0
  377. package/dist/plugins/phone-number/schema.d.mts +22 -0
  378. package/dist/plugins/phone-number/schema.mjs +18 -0
  379. package/dist/plugins/phone-number/types.d.mts +116 -0
  380. package/dist/plugins/siwe/client.d.mts +14 -0
  381. package/dist/plugins/siwe/client.mjs +15 -0
  382. package/dist/plugins/siwe/index.d.mts +62 -0
  383. package/dist/plugins/siwe/index.mjs +272 -0
  384. package/dist/plugins/siwe/parse-message.mjs +60 -0
  385. package/dist/plugins/siwe/schema.d.mts +35 -0
  386. package/dist/plugins/siwe/schema.mjs +30 -0
  387. package/dist/plugins/siwe/types.d.mts +43 -0
  388. package/dist/plugins/test-utils/auth-helpers.mjs +33 -0
  389. package/dist/plugins/test-utils/cookie-builder.mjs +55 -0
  390. package/dist/plugins/test-utils/db-helpers.mjs +65 -0
  391. package/dist/plugins/test-utils/factories.mjs +38 -0
  392. package/dist/plugins/test-utils/index.d.mts +73 -0
  393. package/dist/plugins/test-utils/index.mjs +97 -0
  394. package/dist/plugins/test-utils/otp-sink.mjs +21 -0
  395. package/dist/plugins/test-utils/types.d.mts +51 -0
  396. package/dist/plugins/two-factor/backup-codes/index.d.mts +291 -0
  397. package/dist/plugins/two-factor/backup-codes/index.mjs +341 -0
  398. package/dist/plugins/two-factor/client.d.mts +76 -0
  399. package/dist/plugins/two-factor/client.mjs +41 -0
  400. package/dist/plugins/two-factor/constant.mjs +6 -0
  401. package/dist/plugins/two-factor/error-code.d.mts +20 -0
  402. package/dist/plugins/two-factor/error-code.mjs +19 -0
  403. package/dist/plugins/two-factor/index.d.mts +720 -0
  404. package/dist/plugins/two-factor/index.mjs +349 -0
  405. package/dist/plugins/two-factor/otp/index.d.mts +216 -0
  406. package/dist/plugins/two-factor/otp/index.mjs +252 -0
  407. package/dist/plugins/two-factor/schema.d.mts +59 -0
  408. package/dist/plugins/two-factor/schema.mjs +53 -0
  409. package/dist/plugins/two-factor/totp/index.d.mts +219 -0
  410. package/dist/plugins/two-factor/totp/index.mjs +230 -0
  411. package/dist/plugins/two-factor/types.d.mts +111 -0
  412. package/dist/plugins/two-factor/utils.mjs +9 -0
  413. package/dist/plugins/two-factor/verify-two-factor.mjs +205 -0
  414. package/dist/plugins/username/client.d.mts +38 -0
  415. package/dist/plugins/username/client.mjs +17 -0
  416. package/dist/plugins/username/error-codes.d.mts +16 -0
  417. package/dist/plugins/username/error-codes.mjs +15 -0
  418. package/dist/plugins/username/index.d.mts +326 -0
  419. package/dist/plugins/username/index.mjs +312 -0
  420. package/dist/plugins/username/schema.d.mts +50 -0
  421. package/dist/plugins/username/schema.mjs +25 -0
  422. package/dist/social-providers/index.d.mts +1 -0
  423. package/dist/social-providers/index.mjs +2 -0
  424. package/dist/state.d.mts +48 -0
  425. package/dist/state.mjs +149 -0
  426. package/dist/test-utils/headers.d.mts +8 -0
  427. package/dist/test-utils/headers.mjs +17 -0
  428. package/dist/test-utils/http-test-instance.d.mts +413 -0
  429. package/dist/test-utils/http-test-instance.mjs +107 -0
  430. package/dist/test-utils/index.d.mts +4 -0
  431. package/dist/test-utils/index.mjs +4 -0
  432. package/dist/test-utils/test-instance.d.mts +56 -0
  433. package/dist/test-utils/test-instance.mjs +242 -0
  434. package/dist/types/adapter.d.mts +2 -0
  435. package/dist/types/api.d.mts +28 -0
  436. package/dist/types/auth.d.mts +32 -0
  437. package/dist/types/helper.d.mts +26 -0
  438. package/dist/types/index.d.mts +10 -0
  439. package/dist/types/index.mjs +1 -0
  440. package/dist/types/models.d.mts +10 -0
  441. package/dist/types/plugins.d.mts +19 -0
  442. package/dist/utils/boolean.mjs +6 -0
  443. package/dist/utils/constants.mjs +4 -0
  444. package/dist/utils/date.mjs +6 -0
  445. package/dist/utils/hashing.mjs +18 -0
  446. package/dist/utils/hide-metadata.d.mts +6 -0
  447. package/dist/utils/hide-metadata.mjs +4 -0
  448. package/dist/utils/index.d.mts +4 -0
  449. package/dist/utils/is-api-error.d.mts +2 -0
  450. package/dist/utils/is-api-error.mjs +2 -0
  451. package/dist/utils/is-atom.mjs +6 -0
  452. package/dist/utils/is-promise.mjs +6 -0
  453. package/dist/utils/middleware-response.mjs +7 -0
  454. package/dist/utils/password.mjs +32 -0
  455. package/dist/utils/plugin-helper.mjs +14 -0
  456. package/dist/utils/request.mjs +23 -0
  457. package/dist/utils/shim.mjs +22 -0
  458. package/dist/utils/time.d.mts +48 -0
  459. package/dist/utils/time.mjs +98 -0
  460. package/dist/utils/url.d.mts +78 -0
  461. package/dist/utils/url.mjs +238 -0
  462. package/dist/utils/validate-user-info.mjs +44 -0
  463. package/dist/utils/wildcard.mjs +106 -0
  464. package/dist/version.mjs +5 -0
  465. package/package.json +595 -3
@@ -0,0 +1,813 @@
1
+ import { getDate } from "../../utils/date.mjs";
2
+ import { parseJSON } from "../../client/parser.mjs";
3
+ import { getCurrentAdapter, runWithTransaction } from "@better-auth/core/context";
4
+ import { BetterAuthError } from "@better-auth/core/error";
5
+ import { filterOutputFields } from "@better-auth/core/utils/db";
6
+ import { base64Url } from "@better-auth/utils/base64";
7
+ import { createHash } from "@better-auth/utils/hash";
8
+ //#region src/plugins/organization/adapter.ts
9
+ async function computeTeamMembershipKey(data) {
10
+ const digest = await createHash("SHA-256").digest(new TextEncoder().encode(JSON.stringify([data.teamId, data.userId])));
11
+ return base64Url.encode(new Uint8Array(digest), { padding: false });
12
+ }
13
+ async function findTeamMemberByKeyOrPair(adapter, data) {
14
+ const memberByKey = await adapter.findOne({
15
+ model: "teamMember",
16
+ where: [{
17
+ field: "membershipKey",
18
+ value: data.membershipKey
19
+ }]
20
+ });
21
+ if (memberByKey) return memberByKey;
22
+ return adapter.findOne({
23
+ model: "teamMember",
24
+ where: [{
25
+ field: "teamId",
26
+ value: data.teamId
27
+ }, {
28
+ field: "userId",
29
+ value: data.userId
30
+ }]
31
+ });
32
+ }
33
+ async function syncTeamMemberCount(adapter, teamId) {
34
+ const memberCount = await adapter.count({
35
+ model: "teamMember",
36
+ where: [{
37
+ field: "teamId",
38
+ value: teamId
39
+ }]
40
+ });
41
+ await adapter.incrementOne({
42
+ model: "team",
43
+ where: [{
44
+ field: "id",
45
+ value: teamId
46
+ }, {
47
+ field: "memberCount",
48
+ operator: "lt",
49
+ value: memberCount
50
+ }],
51
+ increment: {},
52
+ set: { memberCount }
53
+ });
54
+ }
55
+ async function reserveTeamSeat(adapter, data) {
56
+ const team = await adapter.incrementOne({
57
+ model: "team",
58
+ where: [{
59
+ field: "id",
60
+ value: data.teamId
61
+ }, {
62
+ field: "memberCount",
63
+ operator: "lt",
64
+ value: data.maximumMembersPerTeam
65
+ }],
66
+ increment: { memberCount: 1 }
67
+ });
68
+ return Boolean(team);
69
+ }
70
+ async function incrementTeamMemberCount(adapter, teamId) {
71
+ await adapter.incrementOne({
72
+ model: "team",
73
+ where: [{
74
+ field: "id",
75
+ value: teamId
76
+ }],
77
+ increment: { memberCount: 1 }
78
+ });
79
+ }
80
+ async function releaseTeamSeats(adapter, teamId, count) {
81
+ if (count <= 0) return;
82
+ await adapter.incrementOne({
83
+ model: "team",
84
+ where: [{
85
+ field: "id",
86
+ value: teamId
87
+ }, {
88
+ field: "memberCount",
89
+ operator: "gte",
90
+ value: count
91
+ }],
92
+ increment: { memberCount: -count }
93
+ });
94
+ }
95
+ async function createTeamMemberWithKey(adapter, data) {
96
+ try {
97
+ return {
98
+ status: "created",
99
+ member: await adapter.create({
100
+ model: "teamMember",
101
+ data: {
102
+ teamId: data.teamId,
103
+ userId: data.userId,
104
+ membershipKey: data.membershipKey,
105
+ createdAt: /* @__PURE__ */ new Date()
106
+ }
107
+ })
108
+ };
109
+ } catch (error) {
110
+ const existing = await findTeamMemberByKeyOrPair(adapter, data);
111
+ if (existing) return {
112
+ status: "existing",
113
+ member: existing
114
+ };
115
+ throw error;
116
+ }
117
+ }
118
+ function stripTeamMembershipKey(member) {
119
+ const { membershipKey: _membershipKey, ...output } = member;
120
+ return output;
121
+ }
122
+ function stripTeamMembershipKeys(members) {
123
+ return members.map(stripTeamMembershipKey);
124
+ }
125
+ const getOrgAdapter = (context, options) => {
126
+ const baseAdapter = context.adapter;
127
+ const orgAdditionalFields = options?.schema?.organization?.additionalFields;
128
+ const memberAdditionalFields = options?.schema?.member?.additionalFields;
129
+ const invitationAdditionalFields = options?.schema?.invitation?.additionalFields;
130
+ const teamAdditionalFields = options?.schema?.team?.additionalFields;
131
+ return {
132
+ findOrganizationBySlug: async (slug) => {
133
+ return filterOutputFields(await (await getCurrentAdapter(baseAdapter)).findOne({
134
+ model: "organization",
135
+ where: [{
136
+ field: "slug",
137
+ value: slug
138
+ }]
139
+ }), orgAdditionalFields);
140
+ },
141
+ createOrganization: async (data) => {
142
+ const organization = await (await getCurrentAdapter(baseAdapter)).create({
143
+ model: "organization",
144
+ data: {
145
+ ...data.organization,
146
+ metadata: data.organization.metadata ? JSON.stringify(data.organization.metadata) : void 0
147
+ },
148
+ forceAllowId: true
149
+ });
150
+ return filterOutputFields({
151
+ ...organization,
152
+ metadata: organization.metadata && typeof organization.metadata === "string" ? JSON.parse(organization.metadata) : void 0
153
+ }, orgAdditionalFields);
154
+ },
155
+ findMemberByEmail: async (data) => {
156
+ const adapter = await getCurrentAdapter(baseAdapter);
157
+ const user = await adapter.findOne({
158
+ model: "user",
159
+ where: [{
160
+ field: "email",
161
+ value: data.email.toLowerCase()
162
+ }]
163
+ });
164
+ if (!user) return null;
165
+ const member = await adapter.findOne({
166
+ model: "member",
167
+ where: [{
168
+ field: "organizationId",
169
+ value: data.organizationId
170
+ }, {
171
+ field: "userId",
172
+ value: user.id
173
+ }]
174
+ });
175
+ if (!member) return null;
176
+ return {
177
+ ...member,
178
+ user: {
179
+ id: user.id,
180
+ name: user.name,
181
+ email: user.email,
182
+ image: user.image
183
+ }
184
+ };
185
+ },
186
+ listMembers: async (data) => {
187
+ const adapter = await getCurrentAdapter(baseAdapter);
188
+ const members = await Promise.all([adapter.findMany({
189
+ model: "member",
190
+ where: [{
191
+ field: "organizationId",
192
+ value: data.organizationId
193
+ }, ...data.filter?.field ? [{
194
+ field: data.filter?.field,
195
+ value: data.filter?.value,
196
+ ...data.filter.operator ? { operator: data.filter.operator } : {}
197
+ }] : []],
198
+ limit: data.limit || (typeof options?.membershipLimit === "number" ? options.membershipLimit : 100) || 100,
199
+ offset: data.offset || 0,
200
+ sortBy: data.sortBy ? {
201
+ field: data.sortBy,
202
+ direction: data.sortOrder || "asc"
203
+ } : void 0
204
+ }), adapter.count({
205
+ model: "member",
206
+ where: [{
207
+ field: "organizationId",
208
+ value: data.organizationId
209
+ }, ...data.filter?.field ? [{
210
+ field: data.filter?.field,
211
+ value: data.filter?.value,
212
+ ...data.filter.operator ? { operator: data.filter.operator } : {}
213
+ }] : []]
214
+ })]);
215
+ const users = await adapter.findMany({
216
+ model: "user",
217
+ where: [{
218
+ field: "id",
219
+ value: members[0].map((member) => member.userId),
220
+ operator: "in"
221
+ }],
222
+ limit: members[0].length
223
+ });
224
+ return {
225
+ members: members[0].map((member) => {
226
+ const user = users.find((user) => user.id === member.userId);
227
+ if (!user) throw new BetterAuthError("Unexpected error: User not found for member");
228
+ return {
229
+ ...member,
230
+ user: {
231
+ id: user.id,
232
+ name: user.name,
233
+ email: user.email,
234
+ image: user.image
235
+ }
236
+ };
237
+ }),
238
+ total: members[1]
239
+ };
240
+ },
241
+ findMemberByOrgId: async (data) => {
242
+ const result = await (await getCurrentAdapter(baseAdapter)).findOne({
243
+ model: "member",
244
+ where: [{
245
+ field: "userId",
246
+ value: data.userId
247
+ }, {
248
+ field: "organizationId",
249
+ value: data.organizationId
250
+ }],
251
+ join: { user: true }
252
+ });
253
+ if (!result || !result.user) return null;
254
+ const { user, ...member } = result;
255
+ return {
256
+ ...member,
257
+ user: {
258
+ id: user.id,
259
+ name: user.name,
260
+ email: user.email,
261
+ image: user.image
262
+ }
263
+ };
264
+ },
265
+ findMemberById: async (memberId) => {
266
+ const result = await (await getCurrentAdapter(baseAdapter)).findOne({
267
+ model: "member",
268
+ where: [{
269
+ field: "id",
270
+ value: memberId
271
+ }],
272
+ join: { user: true }
273
+ });
274
+ if (!result) return null;
275
+ const { user, ...member } = result;
276
+ return {
277
+ ...member,
278
+ user: {
279
+ id: user.id,
280
+ name: user.name,
281
+ email: user.email,
282
+ image: user.image
283
+ }
284
+ };
285
+ },
286
+ createMember: async (data) => {
287
+ return await (await getCurrentAdapter(baseAdapter)).create({
288
+ model: "member",
289
+ data: {
290
+ ...data,
291
+ createdAt: /* @__PURE__ */ new Date()
292
+ }
293
+ });
294
+ },
295
+ updateMember: async (memberId, role) => {
296
+ return await (await getCurrentAdapter(baseAdapter)).update({
297
+ model: "member",
298
+ where: [{
299
+ field: "id",
300
+ value: memberId
301
+ }],
302
+ update: { role }
303
+ });
304
+ },
305
+ deleteMember: async ({ memberId, organizationId, userId: _userId }) => {
306
+ return runWithTransaction(baseAdapter, async () => {
307
+ const adapter = await getCurrentAdapter(baseAdapter);
308
+ let userId;
309
+ if (!_userId) {
310
+ const member = await adapter.findOne({
311
+ model: "member",
312
+ where: [{
313
+ field: "id",
314
+ value: memberId
315
+ }]
316
+ });
317
+ if (!member) throw new BetterAuthError("Member not found");
318
+ userId = member.userId;
319
+ } else userId = _userId;
320
+ const member = await adapter.delete({
321
+ model: "member",
322
+ where: [{
323
+ field: "id",
324
+ value: memberId
325
+ }]
326
+ });
327
+ if (options?.teams?.enabled) {
328
+ const teams = await adapter.findMany({
329
+ model: "team",
330
+ where: [{
331
+ field: "organizationId",
332
+ value: organizationId
333
+ }]
334
+ });
335
+ for (const team of teams) {
336
+ const deleted = await adapter.deleteMany({
337
+ model: "teamMember",
338
+ where: [{
339
+ field: "userId",
340
+ value: userId
341
+ }, {
342
+ field: "teamId",
343
+ value: team.id
344
+ }]
345
+ });
346
+ await releaseTeamSeats(adapter, team.id, deleted);
347
+ }
348
+ }
349
+ return member;
350
+ });
351
+ },
352
+ updateOrganization: async (organizationId, data) => {
353
+ const organization = await (await getCurrentAdapter(baseAdapter)).update({
354
+ model: "organization",
355
+ where: [{
356
+ field: "id",
357
+ value: organizationId
358
+ }],
359
+ update: {
360
+ ...data,
361
+ metadata: typeof data.metadata === "object" ? JSON.stringify(data.metadata) : data.metadata
362
+ }
363
+ });
364
+ if (!organization) return null;
365
+ return filterOutputFields({
366
+ ...organization,
367
+ metadata: organization.metadata ? parseJSON(organization.metadata) : void 0
368
+ }, orgAdditionalFields);
369
+ },
370
+ deleteOrganization: async (organizationId) => {
371
+ return runWithTransaction(baseAdapter, async () => {
372
+ const adapter = await getCurrentAdapter(baseAdapter);
373
+ await adapter.deleteMany({
374
+ model: "member",
375
+ where: [{
376
+ field: "organizationId",
377
+ value: organizationId
378
+ }]
379
+ });
380
+ await adapter.deleteMany({
381
+ model: "invitation",
382
+ where: [{
383
+ field: "organizationId",
384
+ value: organizationId
385
+ }]
386
+ });
387
+ await adapter.delete({
388
+ model: "organization",
389
+ where: [{
390
+ field: "id",
391
+ value: organizationId
392
+ }]
393
+ });
394
+ return organizationId;
395
+ });
396
+ },
397
+ setActiveOrganization: async (sessionToken, organizationId, ctx) => {
398
+ return await context.internalAdapter.updateSession(sessionToken, { activeOrganizationId: organizationId });
399
+ },
400
+ findOrganizationById: async (organizationId) => {
401
+ return filterOutputFields(await (await getCurrentAdapter(baseAdapter)).findOne({
402
+ model: "organization",
403
+ where: [{
404
+ field: "id",
405
+ value: organizationId
406
+ }]
407
+ }), orgAdditionalFields);
408
+ },
409
+ checkMembership: async ({ userId, organizationId }) => {
410
+ return await (await getCurrentAdapter(baseAdapter)).findOne({
411
+ model: "member",
412
+ where: [{
413
+ field: "userId",
414
+ value: userId
415
+ }, {
416
+ field: "organizationId",
417
+ value: organizationId
418
+ }]
419
+ });
420
+ },
421
+ /**
422
+ * @requires db
423
+ */
424
+ findFullOrganization: async ({ organizationId, isSlug, includeTeams, membersLimit }) => {
425
+ const adapter = await getCurrentAdapter(baseAdapter);
426
+ const result = await adapter.findOne({
427
+ model: "organization",
428
+ where: [{
429
+ field: isSlug ? "slug" : "id",
430
+ value: organizationId
431
+ }],
432
+ join: {
433
+ invitation: true,
434
+ member: membersLimit ? { limit: membersLimit } : true,
435
+ ...includeTeams ? { team: true } : {}
436
+ }
437
+ });
438
+ if (!result) return null;
439
+ const { invitation: invitations, member: members, team: teams, ...org } = result;
440
+ const userIds = members.map((member) => member.userId);
441
+ const users = userIds.length > 0 ? await adapter.findMany({
442
+ model: "user",
443
+ where: [{
444
+ field: "id",
445
+ value: userIds,
446
+ operator: "in"
447
+ }],
448
+ limit: (typeof options?.membershipLimit === "number" ? options.membershipLimit : 100) || 100
449
+ }) : [];
450
+ const userMap = new Map(users.map((user) => [user.id, user]));
451
+ const membersWithUsers = members.map((member) => {
452
+ const user = userMap.get(member.userId);
453
+ if (!user) throw new BetterAuthError("Unexpected error: User not found for member");
454
+ return {
455
+ ...filterOutputFields(member, memberAdditionalFields),
456
+ user: {
457
+ id: user.id,
458
+ name: user.name,
459
+ email: user.email,
460
+ image: user.image
461
+ }
462
+ };
463
+ });
464
+ const filteredOrg = filterOutputFields(org, orgAdditionalFields);
465
+ const filteredInvitations = invitations.map((inv) => filterOutputFields(inv, invitationAdditionalFields));
466
+ const filteredTeams = teams?.map((team) => filterOutputFields(team, teamAdditionalFields));
467
+ return {
468
+ ...filteredOrg,
469
+ invitations: filteredInvitations,
470
+ members: membersWithUsers,
471
+ teams: filteredTeams
472
+ };
473
+ },
474
+ listOrganizations: async (userId) => {
475
+ const result = await (await getCurrentAdapter(baseAdapter)).findMany({
476
+ model: "member",
477
+ where: [{
478
+ field: "userId",
479
+ value: userId
480
+ }],
481
+ join: { organization: true }
482
+ });
483
+ if (!result || result.length === 0) return [];
484
+ return result.map((member) => filterOutputFields(member.organization, orgAdditionalFields));
485
+ },
486
+ createTeam: async (data) => {
487
+ const { memberCount: _memberCount, ...output } = await (await getCurrentAdapter(baseAdapter)).create({
488
+ model: "team",
489
+ data: {
490
+ ...data,
491
+ memberCount: 0
492
+ },
493
+ forceAllowId: true
494
+ });
495
+ return filterOutputFields(output, teamAdditionalFields);
496
+ },
497
+ findTeamById: async ({ teamId, organizationId, includeTeamMembers }) => {
498
+ const result = await (await getCurrentAdapter(baseAdapter)).findOne({
499
+ model: "team",
500
+ where: [{
501
+ field: "id",
502
+ value: teamId
503
+ }, ...organizationId ? [{
504
+ field: "organizationId",
505
+ value: organizationId
506
+ }] : []],
507
+ join: { ...includeTeamMembers ? { teamMember: true } : {} }
508
+ });
509
+ if (!result) return null;
510
+ const { teamMember, memberCount: _memberCount, ...team } = result;
511
+ return {
512
+ ...filterOutputFields(team, teamAdditionalFields),
513
+ ...includeTeamMembers ? { members: stripTeamMembershipKeys(teamMember ?? []) } : {}
514
+ };
515
+ },
516
+ updateTeam: async (teamId, data) => {
517
+ const adapter = await getCurrentAdapter(baseAdapter);
518
+ if ("id" in data) data.id = void 0;
519
+ const team = await adapter.update({
520
+ model: "team",
521
+ where: [{
522
+ field: "id",
523
+ value: teamId
524
+ }],
525
+ update: { ...data }
526
+ });
527
+ if (!team) return team;
528
+ const { memberCount: _memberCount, ...output } = team;
529
+ return filterOutputFields(output, teamAdditionalFields);
530
+ },
531
+ deleteTeam: async (teamId) => {
532
+ const adapter = await getCurrentAdapter(baseAdapter);
533
+ await adapter.deleteMany({
534
+ model: "teamMember",
535
+ where: [{
536
+ field: "teamId",
537
+ value: teamId
538
+ }]
539
+ });
540
+ return await adapter.delete({
541
+ model: "team",
542
+ where: [{
543
+ field: "id",
544
+ value: teamId
545
+ }]
546
+ });
547
+ },
548
+ listTeams: async (organizationId) => {
549
+ return (await (await getCurrentAdapter(baseAdapter)).findMany({
550
+ model: "team",
551
+ where: [{
552
+ field: "organizationId",
553
+ value: organizationId
554
+ }]
555
+ })).map((team) => {
556
+ const { memberCount: _memberCount, ...output } = team;
557
+ return filterOutputFields(output, teamAdditionalFields);
558
+ });
559
+ },
560
+ createTeamInvitation: async ({ email, role, teamId, organizationId, inviterId, expiresIn = 1e3 * 60 * 60 * 48 }) => {
561
+ const adapter = await getCurrentAdapter(baseAdapter);
562
+ const expiresAt = getDate(expiresIn);
563
+ return await adapter.create({
564
+ model: "invitation",
565
+ data: {
566
+ email,
567
+ role,
568
+ organizationId,
569
+ teamId,
570
+ inviterId,
571
+ status: "pending",
572
+ expiresAt
573
+ }
574
+ });
575
+ },
576
+ setActiveTeam: async (sessionToken, teamId, ctx) => {
577
+ return await context.internalAdapter.updateSession(sessionToken, { activeTeamId: teamId });
578
+ },
579
+ listTeamMembers: async (data) => {
580
+ return stripTeamMembershipKeys(await (await getCurrentAdapter(baseAdapter)).findMany({
581
+ model: "teamMember",
582
+ where: [{
583
+ field: "teamId",
584
+ value: data.teamId
585
+ }]
586
+ }));
587
+ },
588
+ countTeamMembers: async (data) => {
589
+ return await (await getCurrentAdapter(baseAdapter)).count({
590
+ model: "teamMember",
591
+ where: [{
592
+ field: "teamId",
593
+ value: data.teamId
594
+ }]
595
+ });
596
+ },
597
+ countMembers: async (data) => {
598
+ return await (await getCurrentAdapter(baseAdapter)).count({
599
+ model: "member",
600
+ where: [{
601
+ field: "organizationId",
602
+ value: data.organizationId
603
+ }]
604
+ });
605
+ },
606
+ listTeamsByUser: async (data) => {
607
+ return (await (await getCurrentAdapter(baseAdapter)).findMany({
608
+ model: "teamMember",
609
+ where: [{
610
+ field: "userId",
611
+ value: data.userId
612
+ }],
613
+ join: { team: true }
614
+ })).map((result) => {
615
+ const { memberCount: _memberCount, ...team } = result.team;
616
+ return filterOutputFields(team, teamAdditionalFields);
617
+ });
618
+ },
619
+ findTeamMember: async (data) => {
620
+ const member = await (await getCurrentAdapter(baseAdapter)).findOne({
621
+ model: "teamMember",
622
+ where: [{
623
+ field: "teamId",
624
+ value: data.teamId
625
+ }, {
626
+ field: "userId",
627
+ value: data.userId
628
+ }]
629
+ });
630
+ return member ? stripTeamMembershipKey(member) : null;
631
+ },
632
+ findOrCreateTeamMember: async (data) => {
633
+ return runWithTransaction(baseAdapter, async () => {
634
+ const adapter = await getCurrentAdapter(baseAdapter);
635
+ const membershipKey = await computeTeamMembershipKey(data);
636
+ const existing = await findTeamMemberByKeyOrPair(adapter, {
637
+ ...data,
638
+ membershipKey
639
+ });
640
+ if (existing) return stripTeamMembershipKey(existing);
641
+ await syncTeamMemberCount(adapter, data.teamId);
642
+ const result = await createTeamMemberWithKey(adapter, {
643
+ ...data,
644
+ membershipKey
645
+ });
646
+ if (result.status === "created") await incrementTeamMemberCount(adapter, data.teamId);
647
+ return stripTeamMembershipKey(result.member);
648
+ });
649
+ },
650
+ /**
651
+ * Adds a user to a team by reserving capacity on the team row before
652
+ * creating the membership row. The durable team counter is the aggregate
653
+ * capacity boundary; the membership key is the single-column uniqueness
654
+ * boundary for a user within a team.
655
+ */
656
+ addTeamMemberWithLimit: async (data) => {
657
+ return runWithTransaction(baseAdapter, async () => {
658
+ const adapter = await getCurrentAdapter(baseAdapter);
659
+ const membershipKey = await computeTeamMembershipKey(data);
660
+ const existing = await findTeamMemberByKeyOrPair(adapter, {
661
+ teamId: data.teamId,
662
+ userId: data.userId,
663
+ membershipKey
664
+ });
665
+ if (existing) return {
666
+ status: "added",
667
+ member: stripTeamMembershipKey(existing)
668
+ };
669
+ await syncTeamMemberCount(adapter, data.teamId);
670
+ if (!await reserveTeamSeat(adapter, {
671
+ teamId: data.teamId,
672
+ maximumMembersPerTeam: data.maximumMembersPerTeam
673
+ })) return { status: "limitReached" };
674
+ let result;
675
+ try {
676
+ result = await createTeamMemberWithKey(adapter, {
677
+ teamId: data.teamId,
678
+ userId: data.userId,
679
+ membershipKey
680
+ });
681
+ } catch (error) {
682
+ await releaseTeamSeats(adapter, data.teamId, 1);
683
+ throw error;
684
+ }
685
+ if (result.status === "existing") await releaseTeamSeats(adapter, data.teamId, 1);
686
+ return {
687
+ status: "added",
688
+ member: stripTeamMembershipKey(result.member)
689
+ };
690
+ });
691
+ },
692
+ removeTeamMember: async (data) => {
693
+ const adapter = await getCurrentAdapter(baseAdapter);
694
+ const deleted = await adapter.deleteMany({
695
+ model: "teamMember",
696
+ where: [{
697
+ field: "teamId",
698
+ value: data.teamId
699
+ }, {
700
+ field: "userId",
701
+ value: data.userId
702
+ }]
703
+ });
704
+ await releaseTeamSeats(adapter, data.teamId, deleted);
705
+ },
706
+ findInvitationsByTeamId: async (teamId) => {
707
+ return await (await getCurrentAdapter(baseAdapter)).findMany({
708
+ model: "invitation",
709
+ where: [{
710
+ field: "teamId",
711
+ value: teamId
712
+ }]
713
+ });
714
+ },
715
+ listUserInvitations: async (email) => {
716
+ return (await (await getCurrentAdapter(baseAdapter)).findMany({
717
+ model: "invitation",
718
+ where: [{
719
+ field: "email",
720
+ value: email.toLowerCase()
721
+ }],
722
+ join: { organization: true }
723
+ })).filter(Boolean).map(({ organization, ...inv }) => ({
724
+ ...inv,
725
+ organizationName: organization?.name
726
+ }));
727
+ },
728
+ createInvitation: async ({ invitation, user }) => {
729
+ const adapter = await getCurrentAdapter(baseAdapter);
730
+ const expiresAt = getDate(options?.invitationExpiresIn || 3600 * 48, "sec");
731
+ return await adapter.create({
732
+ model: "invitation",
733
+ data: {
734
+ status: "pending",
735
+ expiresAt,
736
+ createdAt: /* @__PURE__ */ new Date(),
737
+ inviterId: user.id,
738
+ ...invitation,
739
+ teamId: invitation.teamIds.length > 0 ? invitation.teamIds.join(",") : null
740
+ },
741
+ forceAllowId: true
742
+ });
743
+ },
744
+ findInvitationById: async (id) => {
745
+ return await (await getCurrentAdapter(baseAdapter)).findOne({
746
+ model: "invitation",
747
+ where: [{
748
+ field: "id",
749
+ value: id
750
+ }]
751
+ });
752
+ },
753
+ findPendingInvitation: async (data) => {
754
+ return (await (await getCurrentAdapter(baseAdapter)).findMany({
755
+ model: "invitation",
756
+ where: [
757
+ {
758
+ field: "email",
759
+ value: data.email.toLowerCase()
760
+ },
761
+ {
762
+ field: "organizationId",
763
+ value: data.organizationId
764
+ },
765
+ {
766
+ field: "status",
767
+ value: "pending"
768
+ }
769
+ ]
770
+ })).filter((invite) => new Date(invite.expiresAt) > /* @__PURE__ */ new Date());
771
+ },
772
+ findPendingInvitations: async (data) => {
773
+ return (await (await getCurrentAdapter(baseAdapter)).findMany({
774
+ model: "invitation",
775
+ where: [{
776
+ field: "organizationId",
777
+ value: data.organizationId
778
+ }, {
779
+ field: "status",
780
+ value: "pending"
781
+ }]
782
+ })).filter((invite) => new Date(invite.expiresAt) > /* @__PURE__ */ new Date());
783
+ },
784
+ listInvitations: async (data) => {
785
+ return await (await getCurrentAdapter(baseAdapter)).findMany({
786
+ model: "invitation",
787
+ where: [{
788
+ field: "organizationId",
789
+ value: data.organizationId
790
+ }]
791
+ });
792
+ },
793
+ updateInvitation: async (data) => {
794
+ const adapter = await getCurrentAdapter(baseAdapter);
795
+ const where = [{
796
+ field: "id",
797
+ value: data.invitationId
798
+ }];
799
+ if (data.fromStatus) where.push({
800
+ field: "status",
801
+ value: data.fromStatus
802
+ });
803
+ return await adapter.incrementOne({
804
+ model: "invitation",
805
+ where,
806
+ increment: {},
807
+ set: { status: data.status }
808
+ });
809
+ }
810
+ };
811
+ };
812
+ //#endregion
813
+ export { getOrgAdapter };