@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,455 @@
1
+ import { setSessionCookie } from "../../../cookies/index.mjs";
2
+ import { toZodSchema } from "../../../db/to-zod.mjs";
3
+ import { getSessionFromCtx, requestOnlySessionMiddleware } from "../../../api/routes/session.mjs";
4
+ import { ORGANIZATION_ERROR_CODES } from "../error-codes.mjs";
5
+ import { getOrgAdapter } from "../adapter.mjs";
6
+ import { orgMiddleware, orgSessionMiddleware } from "../call.mjs";
7
+ import { hasPermission } from "../has-permission.mjs";
8
+ import { APIError } from "@better-auth/core/error";
9
+ import { createAuthEndpoint } from "@better-auth/core/api";
10
+ import * as z from "zod";
11
+ //#region src/plugins/organization/routes/crud-org.ts
12
+ const baseOrganizationSchema = z.object({
13
+ name: z.string().min(1).meta({ description: "The name of the organization" }),
14
+ slug: z.string().min(1).meta({ description: "The slug of the organization" }),
15
+ userId: z.coerce.string().meta({ description: "The user id of the organization creator. If not provided, the current user will be used. Should only be used by admins or when called by the server. server-only. Eg: \"user-id\"" }).optional(),
16
+ logo: z.string().meta({ description: "The logo of the organization" }).nullish(),
17
+ metadata: z.record(z.string(), z.any()).meta({ description: "The metadata of the organization" }).optional(),
18
+ keepCurrentActiveOrganization: z.boolean().meta({ description: "Whether to keep the current active organization active after creating a new one. Eg: true" }).optional()
19
+ });
20
+ const createOrganization = (options) => {
21
+ const additionalFieldsSchema = toZodSchema({
22
+ fields: options?.schema?.organization?.additionalFields || {},
23
+ isClientSide: true
24
+ });
25
+ return createAuthEndpoint("/organization/create", {
26
+ method: "POST",
27
+ body: z.object({
28
+ ...baseOrganizationSchema.shape,
29
+ ...additionalFieldsSchema.shape
30
+ }),
31
+ use: [orgMiddleware],
32
+ metadata: {
33
+ $Infer: { body: {} },
34
+ openapi: {
35
+ description: "Create an organization",
36
+ responses: { "200": {
37
+ description: "Success",
38
+ content: { "application/json": { schema: {
39
+ type: "object",
40
+ description: "The organization that was created",
41
+ $ref: "#/components/schemas/Organization"
42
+ } } }
43
+ } }
44
+ }
45
+ }
46
+ }, async (ctx) => {
47
+ const session = await getSessionFromCtx(ctx);
48
+ if (!session && (ctx.request || ctx.headers)) throw APIError.fromStatus("UNAUTHORIZED");
49
+ let user = session?.user || null;
50
+ if (!user) {
51
+ if (!ctx.body.userId) throw APIError.fromStatus("UNAUTHORIZED");
52
+ user = await ctx.context.internalAdapter.findUserById(ctx.body.userId);
53
+ }
54
+ if (!user) throw APIError.fromStatus("UNAUTHORIZED");
55
+ const options = ctx.context.orgOptions;
56
+ const canCreateOrg = typeof options?.allowUserToCreateOrganization === "function" ? await options.allowUserToCreateOrganization(user) : options?.allowUserToCreateOrganization === void 0 ? true : options.allowUserToCreateOrganization;
57
+ const isSystemAction = !session && ctx.body.userId;
58
+ if (!canCreateOrg && !isSystemAction) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION);
59
+ const adapter = getOrgAdapter(ctx.context, options);
60
+ const userOrganizations = await adapter.listOrganizations(user.id);
61
+ if (typeof options.organizationLimit === "number" ? userOrganizations.length >= options.organizationLimit : typeof options.organizationLimit === "function" ? await options.organizationLimit(user) : false) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS);
62
+ if (await adapter.findOrganizationBySlug(ctx.body.slug)) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_ALREADY_EXISTS);
63
+ let { keepCurrentActiveOrganization: _, userId: __, ...orgData } = ctx.body;
64
+ if (options?.organizationHooks?.beforeCreateOrganization) {
65
+ const response = await options?.organizationHooks.beforeCreateOrganization({
66
+ organization: orgData,
67
+ user
68
+ });
69
+ if (response && typeof response === "object" && "data" in response) orgData = {
70
+ ...ctx.body,
71
+ ...response.data
72
+ };
73
+ }
74
+ const organization = await adapter.createOrganization({ organization: {
75
+ ...orgData,
76
+ createdAt: /* @__PURE__ */ new Date()
77
+ } });
78
+ let member;
79
+ let teamMember = null;
80
+ let data = {
81
+ userId: user.id,
82
+ organizationId: organization.id,
83
+ role: ctx.context.orgOptions.creatorRole || "owner"
84
+ };
85
+ if (options?.organizationHooks?.beforeAddMember) {
86
+ const response = await options?.organizationHooks.beforeAddMember({
87
+ member: {
88
+ userId: user.id,
89
+ organizationId: organization.id,
90
+ role: ctx.context.orgOptions.creatorRole || "owner"
91
+ },
92
+ user,
93
+ organization
94
+ });
95
+ if (response && typeof response === "object" && "data" in response) data = {
96
+ ...data,
97
+ ...response.data
98
+ };
99
+ }
100
+ member = await adapter.createMember(data);
101
+ if (options?.organizationHooks?.afterAddMember) await options?.organizationHooks.afterAddMember({
102
+ member,
103
+ user,
104
+ organization
105
+ });
106
+ if (options?.teams?.enabled && options.teams.defaultTeam?.enabled !== false) {
107
+ let teamData = {
108
+ organizationId: organization.id,
109
+ name: `${organization.name}`,
110
+ createdAt: /* @__PURE__ */ new Date()
111
+ };
112
+ if (options?.organizationHooks?.beforeCreateTeam) {
113
+ const response = await options?.organizationHooks.beforeCreateTeam({
114
+ team: {
115
+ organizationId: organization.id,
116
+ name: `${organization.name}`
117
+ },
118
+ user,
119
+ organization
120
+ });
121
+ if (response && typeof response === "object" && "data" in response) teamData = {
122
+ ...teamData,
123
+ ...response.data
124
+ };
125
+ }
126
+ const defaultTeam = await options.teams.defaultTeam?.customCreateDefaultTeam?.(organization, ctx) || await adapter.createTeam(teamData);
127
+ teamMember = await adapter.findOrCreateTeamMember({
128
+ teamId: defaultTeam.id,
129
+ userId: user.id
130
+ });
131
+ if (options?.organizationHooks?.afterCreateTeam) await options?.organizationHooks.afterCreateTeam({
132
+ team: defaultTeam,
133
+ user,
134
+ organization
135
+ });
136
+ }
137
+ if (options?.organizationHooks?.afterCreateOrganization) await options?.organizationHooks.afterCreateOrganization({
138
+ organization,
139
+ user,
140
+ member
141
+ });
142
+ if (ctx.context.session && !ctx.body.keepCurrentActiveOrganization) await adapter.setActiveOrganization(ctx.context.session.session.token, organization.id, ctx);
143
+ if (teamMember && ctx.context.session && !ctx.body.keepCurrentActiveOrganization) await adapter.setActiveTeam(ctx.context.session.session.token, teamMember.teamId, ctx);
144
+ return ctx.json({
145
+ ...organization,
146
+ metadata: organization.metadata && typeof organization.metadata === "string" ? JSON.parse(organization.metadata) : organization.metadata,
147
+ members: [member]
148
+ });
149
+ });
150
+ };
151
+ const checkOrganizationSlugBodySchema = z.object({ slug: z.string().meta({ description: "The organization slug to check. Eg: \"my-org\"" }) });
152
+ const checkOrganizationSlug = (options) => createAuthEndpoint("/organization/check-slug", {
153
+ method: "POST",
154
+ body: checkOrganizationSlugBodySchema,
155
+ use: [requestOnlySessionMiddleware, orgMiddleware]
156
+ }, async (ctx) => {
157
+ if (!await getOrgAdapter(ctx.context, options).findOrganizationBySlug(ctx.body.slug)) return ctx.json({ status: true });
158
+ throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN);
159
+ });
160
+ const baseUpdateOrganizationSchema = z.object({
161
+ name: z.string().min(1).meta({ description: "The name of the organization" }).optional(),
162
+ slug: z.string().min(1).meta({ description: "The slug of the organization" }).optional(),
163
+ logo: z.string().meta({ description: "The logo of the organization" }).nullish(),
164
+ metadata: z.record(z.string(), z.any()).meta({ description: "The metadata of the organization" }).optional()
165
+ });
166
+ const updateOrganization = (options) => {
167
+ const additionalFieldsSchema = toZodSchema({
168
+ fields: options?.schema?.organization?.additionalFields || {},
169
+ isClientSide: true
170
+ });
171
+ return createAuthEndpoint("/organization/update", {
172
+ method: "POST",
173
+ body: z.object({
174
+ data: z.object({
175
+ ...additionalFieldsSchema.shape,
176
+ ...baseUpdateOrganizationSchema.shape
177
+ }).partial(),
178
+ organizationId: z.string().meta({ description: "The organization ID. Eg: \"org-id\"" }).optional()
179
+ }),
180
+ requireHeaders: true,
181
+ use: [orgMiddleware],
182
+ metadata: {
183
+ $Infer: { body: {} },
184
+ openapi: {
185
+ description: "Update an organization",
186
+ responses: { "200": {
187
+ description: "Success",
188
+ content: { "application/json": { schema: {
189
+ type: "object",
190
+ description: "The updated organization",
191
+ $ref: "#/components/schemas/Organization"
192
+ } } }
193
+ } }
194
+ }
195
+ }
196
+ }, async (ctx) => {
197
+ const session = await ctx.context.getSession(ctx);
198
+ if (!session) throw APIError.fromStatus("UNAUTHORIZED", { message: "User not found" });
199
+ const organizationId = ctx.body.organizationId || session.session.activeOrganizationId;
200
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
201
+ const adapter = getOrgAdapter(ctx.context, options);
202
+ const member = await adapter.findMemberByOrgId({
203
+ userId: session.user.id,
204
+ organizationId
205
+ });
206
+ if (!member) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
207
+ if (!await hasPermission({
208
+ permissions: { organization: ["update"] },
209
+ role: member.role,
210
+ options: ctx.context.orgOptions,
211
+ organizationId
212
+ }, ctx)) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION);
213
+ if (typeof ctx.body.data.slug === "string") {
214
+ const existingOrganization = await adapter.findOrganizationBySlug(ctx.body.data.slug);
215
+ if (existingOrganization && existingOrganization.id !== organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN);
216
+ }
217
+ if (options?.organizationHooks?.beforeUpdateOrganization) {
218
+ const response = await options.organizationHooks.beforeUpdateOrganization({
219
+ organization: ctx.body.data,
220
+ user: session.user,
221
+ member
222
+ });
223
+ if (response && typeof response === "object" && "data" in response) ctx.body.data = {
224
+ ...ctx.body.data,
225
+ ...response.data
226
+ };
227
+ }
228
+ const updatedOrg = await adapter.updateOrganization(organizationId, ctx.body.data);
229
+ if (options?.organizationHooks?.afterUpdateOrganization) await options.organizationHooks.afterUpdateOrganization({
230
+ organization: updatedOrg,
231
+ user: session.user,
232
+ member
233
+ });
234
+ return ctx.json(updatedOrg);
235
+ });
236
+ };
237
+ const deleteOrganizationBodySchema = z.object({ organizationId: z.string().meta({ description: "The organization id to delete" }) });
238
+ const deleteOrganization = (options) => {
239
+ return createAuthEndpoint("/organization/delete", {
240
+ method: "POST",
241
+ body: deleteOrganizationBodySchema,
242
+ requireHeaders: true,
243
+ use: [orgMiddleware],
244
+ metadata: { openapi: {
245
+ description: "Delete an organization",
246
+ responses: { "200": {
247
+ description: "Success",
248
+ content: { "application/json": { schema: {
249
+ type: "string",
250
+ description: "The organization id that was deleted"
251
+ } } }
252
+ } }
253
+ } }
254
+ }, async (ctx) => {
255
+ if (ctx.context.orgOptions.disableOrganizationDeletion) throw APIError.from("NOT_FOUND", {
256
+ message: "Organization deletion is disabled",
257
+ code: "ORGANIZATION_DELETION_DISABLED"
258
+ });
259
+ const session = await ctx.context.getSession(ctx);
260
+ if (!session) throw APIError.fromStatus("UNAUTHORIZED");
261
+ const organizationId = ctx.body.organizationId;
262
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
263
+ const adapter = getOrgAdapter(ctx.context, options);
264
+ const member = await adapter.findMemberByOrgId({
265
+ userId: session.user.id,
266
+ organizationId
267
+ });
268
+ if (!member) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
269
+ if (!await hasPermission({
270
+ role: member.role,
271
+ permissions: { organization: ["delete"] },
272
+ organizationId,
273
+ options: ctx.context.orgOptions
274
+ }, ctx)) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION);
275
+ if (organizationId === session.session.activeOrganizationId)
276
+ /**
277
+ * If the organization is deleted, we set the active organization to null
278
+ */
279
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
280
+ const org = await adapter.findOrganizationById(organizationId);
281
+ if (!org) throw APIError.fromStatus("BAD_REQUEST");
282
+ if (options?.organizationHooks?.beforeDeleteOrganization) await options.organizationHooks.beforeDeleteOrganization({
283
+ organization: org,
284
+ user: session.user
285
+ }, ctx);
286
+ await adapter.deleteOrganization(organizationId);
287
+ if (options?.organizationHooks?.afterDeleteOrganization) await options.organizationHooks.afterDeleteOrganization({
288
+ organization: org,
289
+ user: session.user
290
+ }, ctx);
291
+ return ctx.json(org);
292
+ });
293
+ };
294
+ const getOrganizationQuerySchema = z.optional(z.object({
295
+ organizationId: z.string().meta({ description: "The organization id to get" }).optional(),
296
+ organizationSlug: z.string().meta({ description: "The organization slug to get" }).optional()
297
+ }));
298
+ const getOrganization = (options) => createAuthEndpoint("/organization/get-organization", {
299
+ method: "GET",
300
+ query: getOrganizationQuerySchema,
301
+ requireHeaders: true,
302
+ use: [orgMiddleware, orgSessionMiddleware],
303
+ metadata: { openapi: {
304
+ operationId: "getOrganization",
305
+ description: "Get the organization metadata",
306
+ responses: { "200": {
307
+ description: "Success",
308
+ content: { "application/json": { schema: {
309
+ type: "object",
310
+ description: "The organization",
311
+ $ref: "#/components/schemas/Organization"
312
+ } } }
313
+ } }
314
+ } }
315
+ }, async (ctx) => {
316
+ const session = ctx.context.session;
317
+ const organizationId = ctx.query?.organizationSlug || ctx.query?.organizationId || session.session.activeOrganizationId;
318
+ if (!organizationId) return ctx.json(null, { status: 200 });
319
+ const adapter = getOrgAdapter(ctx.context, options);
320
+ const organization = ctx.query?.organizationSlug ? await adapter.findOrganizationBySlug(organizationId) : await adapter.findOrganizationById(organizationId);
321
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
322
+ if (!await adapter.checkMembership({
323
+ userId: session.user.id,
324
+ organizationId: organization.id
325
+ })) {
326
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
327
+ throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
328
+ }
329
+ return ctx.json(organization);
330
+ });
331
+ const getFullOrganizationQuerySchema = z.optional(z.object({
332
+ organizationId: z.string().meta({ description: "The organization id to get" }).optional(),
333
+ organizationSlug: z.string().meta({ description: "The organization slug to get" }).optional(),
334
+ membersLimit: z.number().or(z.string().transform((val) => parseInt(val))).meta({ description: "The limit of members to get. By default, it uses the membershipLimit option." }).optional()
335
+ }));
336
+ const getFullOrganization = (options) => createAuthEndpoint("/organization/get-full-organization", {
337
+ method: "GET",
338
+ query: getFullOrganizationQuerySchema,
339
+ requireHeaders: true,
340
+ use: [orgMiddleware, orgSessionMiddleware],
341
+ metadata: { openapi: {
342
+ operationId: "getFullOrganization",
343
+ description: "Get the full organization",
344
+ responses: { "200": {
345
+ description: "Success",
346
+ content: { "application/json": { schema: {
347
+ type: "object",
348
+ description: "The organization",
349
+ $ref: "#/components/schemas/Organization"
350
+ } } }
351
+ } }
352
+ } }
353
+ }, async (ctx) => {
354
+ const session = ctx.context.session;
355
+ const organizationId = ctx.query?.organizationSlug || ctx.query?.organizationId || session.session.activeOrganizationId;
356
+ if (!organizationId) return ctx.json(null, { status: 200 });
357
+ const adapter = getOrgAdapter(ctx.context, options);
358
+ const organization = await adapter.findFullOrganization({
359
+ organizationId,
360
+ isSlug: !!ctx.query?.organizationSlug,
361
+ includeTeams: ctx.context.orgOptions.teams?.enabled,
362
+ membersLimit: ctx.query?.membersLimit
363
+ });
364
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
365
+ if (!await adapter.checkMembership({
366
+ userId: session.user.id,
367
+ organizationId: organization.id
368
+ })) {
369
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
370
+ throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
371
+ }
372
+ return ctx.json(organization);
373
+ });
374
+ const setActiveOrganizationBodySchema = z.object({
375
+ organizationId: z.string().meta({ description: "The organization id to set as active. It can be null to unset the active organization. Eg: \"org-id\"" }).nullable().optional(),
376
+ organizationSlug: z.string().meta({ description: "The organization slug to set as active. It can be null to unset the active organization if organizationId is not provided. Eg: \"org-slug\"" }).optional()
377
+ });
378
+ const setActiveOrganization = (options) => {
379
+ return createAuthEndpoint("/organization/set-active", {
380
+ method: "POST",
381
+ body: setActiveOrganizationBodySchema,
382
+ use: [orgSessionMiddleware, orgMiddleware],
383
+ requireHeaders: true,
384
+ metadata: { openapi: {
385
+ operationId: "setActiveOrganization",
386
+ description: "Set the active organization",
387
+ responses: { "200": {
388
+ description: "Success",
389
+ content: { "application/json": { schema: {
390
+ type: "object",
391
+ description: "The organization",
392
+ $ref: "#/components/schemas/Organization"
393
+ } } }
394
+ } }
395
+ } }
396
+ }, async (ctx) => {
397
+ const adapter = getOrgAdapter(ctx.context, options);
398
+ const session = ctx.context.session;
399
+ let organizationId = ctx.body.organizationId;
400
+ const organizationSlug = ctx.body.organizationSlug;
401
+ if (organizationId === null) {
402
+ if (!session.session.activeOrganizationId) return ctx.json(null);
403
+ await setSessionCookie(ctx, {
404
+ session: await adapter.setActiveOrganization(session.session.token, null, ctx),
405
+ user: session.user
406
+ });
407
+ return ctx.json(null);
408
+ }
409
+ if (!organizationId && !organizationSlug) {
410
+ const sessionOrgId = session.session.activeOrganizationId;
411
+ if (!sessionOrgId) return ctx.json(null);
412
+ organizationId = sessionOrgId;
413
+ }
414
+ if (organizationSlug && !organizationId) {
415
+ const organization = await adapter.findOrganizationBySlug(organizationSlug);
416
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
417
+ organizationId = organization.id;
418
+ }
419
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
420
+ if (!await adapter.checkMembership({
421
+ userId: session.user.id,
422
+ organizationId
423
+ })) {
424
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
425
+ throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
426
+ }
427
+ const organization = await adapter.findOrganizationById(organizationId);
428
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
429
+ await setSessionCookie(ctx, {
430
+ session: await adapter.setActiveOrganization(session.session.token, organization.id, ctx),
431
+ user: session.user
432
+ });
433
+ return ctx.json(organization);
434
+ });
435
+ };
436
+ const listOrganizations = (options) => createAuthEndpoint("/organization/list", {
437
+ method: "GET",
438
+ use: [orgMiddleware, orgSessionMiddleware],
439
+ requireHeaders: true,
440
+ metadata: { openapi: {
441
+ description: "List all organizations",
442
+ responses: { "200": {
443
+ description: "Success",
444
+ content: { "application/json": { schema: {
445
+ type: "array",
446
+ items: { $ref: "#/components/schemas/Organization" }
447
+ } } }
448
+ } }
449
+ } }
450
+ }, async (ctx) => {
451
+ const organizations = await getOrgAdapter(ctx.context, options).listOrganizations(ctx.context.session.user.id);
452
+ return ctx.json(organizations);
453
+ });
454
+ //#endregion
455
+ export { checkOrganizationSlug, createOrganization, deleteOrganization, getFullOrganization, getOrganization, listOrganizations, setActiveOrganization, updateOrganization };