@sirketio/auth 0.0.1

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 (594) hide show
  1. package/dist/_virtual/_rolldown/runtime.mjs +36 -0
  2. package/dist/adapter/index.d.mts +4 -0
  3. package/dist/adapter/index.mjs +7 -0
  4. package/dist/api/index.d.mts +3872 -0
  5. package/dist/api/index.mjs +206 -0
  6. package/dist/api/index.mjs.map +1 -0
  7. package/dist/api/middlewares/index.d.mts +1 -0
  8. package/dist/api/middlewares/index.mjs +3 -0
  9. package/dist/api/middlewares/origin-check.d.mts +18 -0
  10. package/dist/api/middlewares/origin-check.mjs +140 -0
  11. package/dist/api/middlewares/origin-check.mjs.map +1 -0
  12. package/dist/api/rate-limiter/index.mjs +204 -0
  13. package/dist/api/rate-limiter/index.mjs.map +1 -0
  14. package/dist/api/routes/account.d.mts +410 -0
  15. package/dist/api/routes/account.mjs +493 -0
  16. package/dist/api/routes/account.mjs.map +1 -0
  17. package/dist/api/routes/callback.d.mts +31 -0
  18. package/dist/api/routes/callback.mjs +179 -0
  19. package/dist/api/routes/callback.mjs.map +1 -0
  20. package/dist/api/routes/email-verification.d.mts +161 -0
  21. package/dist/api/routes/email-verification.mjs +299 -0
  22. package/dist/api/routes/email-verification.mjs.map +1 -0
  23. package/dist/api/routes/error.d.mts +28 -0
  24. package/dist/api/routes/error.mjs +386 -0
  25. package/dist/api/routes/error.mjs.map +1 -0
  26. package/dist/api/routes/index.d.mts +11 -0
  27. package/dist/api/routes/index.mjs +13 -0
  28. package/dist/api/routes/ok.d.mts +36 -0
  29. package/dist/api/routes/ok.mjs +30 -0
  30. package/dist/api/routes/ok.mjs.map +1 -0
  31. package/dist/api/routes/password.d.mts +182 -0
  32. package/dist/api/routes/password.mjs +198 -0
  33. package/dist/api/routes/password.mjs.map +1 -0
  34. package/dist/api/routes/session.d.mts +415 -0
  35. package/dist/api/routes/session.mjs +483 -0
  36. package/dist/api/routes/session.mjs.map +1 -0
  37. package/dist/api/routes/sign-in.d.mts +171 -0
  38. package/dist/api/routes/sign-in.mjs +263 -0
  39. package/dist/api/routes/sign-in.mjs.map +1 -0
  40. package/dist/api/routes/sign-out.d.mts +36 -0
  41. package/dist/api/routes/sign-out.mjs +33 -0
  42. package/dist/api/routes/sign-out.mjs.map +1 -0
  43. package/dist/api/routes/sign-up.d.mts +160 -0
  44. package/dist/api/routes/sign-up.mjs +227 -0
  45. package/dist/api/routes/sign-up.mjs.map +1 -0
  46. package/dist/api/routes/update-user.d.mts +445 -0
  47. package/dist/api/routes/update-user.mjs +493 -0
  48. package/dist/api/routes/update-user.mjs.map +1 -0
  49. package/dist/api/state/oauth.d.mts +18 -0
  50. package/dist/api/state/oauth.mjs +8 -0
  51. package/dist/api/state/oauth.mjs.map +1 -0
  52. package/dist/api/state/should-session-refresh.d.mts +13 -0
  53. package/dist/api/state/should-session-refresh.mjs +16 -0
  54. package/dist/api/state/should-session-refresh.mjs.map +1 -0
  55. package/dist/api/to-auth-endpoints.mjs +197 -0
  56. package/dist/api/to-auth-endpoints.mjs.map +1 -0
  57. package/dist/auth/base.mjs +45 -0
  58. package/dist/auth/base.mjs.map +1 -0
  59. package/dist/auth/minimal.d.mts +12 -0
  60. package/dist/auth/minimal.mjs +14 -0
  61. package/dist/auth/minimal.mjs.map +1 -0
  62. package/dist/auth/trusted-origins.mjs +31 -0
  63. package/dist/auth/trusted-origins.mjs.map +1 -0
  64. package/dist/client/broadcast-channel.d.mts +20 -0
  65. package/dist/client/broadcast-channel.mjs +46 -0
  66. package/dist/client/broadcast-channel.mjs.map +1 -0
  67. package/dist/client/config.mjs +90 -0
  68. package/dist/client/config.mjs.map +1 -0
  69. package/dist/client/fetch-plugins.mjs +18 -0
  70. package/dist/client/fetch-plugins.mjs.map +1 -0
  71. package/dist/client/focus-manager.d.mts +11 -0
  72. package/dist/client/focus-manager.mjs +32 -0
  73. package/dist/client/focus-manager.mjs.map +1 -0
  74. package/dist/client/index.d.mts +33 -0
  75. package/dist/client/index.mjs +21 -0
  76. package/dist/client/index.mjs.map +1 -0
  77. package/dist/client/online-manager.d.mts +12 -0
  78. package/dist/client/online-manager.mjs +35 -0
  79. package/dist/client/online-manager.mjs.map +1 -0
  80. package/dist/client/parser.mjs +73 -0
  81. package/dist/client/parser.mjs.map +1 -0
  82. package/dist/client/path-to-object.d.mts +65 -0
  83. package/dist/client/plugins/index.d.mts +53 -0
  84. package/dist/client/plugins/index.mjs +30 -0
  85. package/dist/client/plugins/infer-plugin.d.mts +16 -0
  86. package/dist/client/plugins/infer-plugin.mjs +11 -0
  87. package/dist/client/plugins/infer-plugin.mjs.map +1 -0
  88. package/dist/client/proxy.mjs +79 -0
  89. package/dist/client/proxy.mjs.map +1 -0
  90. package/dist/client/query.d.mts +23 -0
  91. package/dist/client/query.mjs +98 -0
  92. package/dist/client/query.mjs.map +1 -0
  93. package/dist/client/react/index.d.mts +128 -0
  94. package/dist/client/react/index.mjs +24 -0
  95. package/dist/client/react/index.mjs.map +1 -0
  96. package/dist/client/react/react-store.d.mts +47 -0
  97. package/dist/client/react/react-store.mjs +47 -0
  98. package/dist/client/react/react-store.mjs.map +1 -0
  99. package/dist/client/session-atom.mjs +29 -0
  100. package/dist/client/session-atom.mjs.map +1 -0
  101. package/dist/client/session-refresh.d.mts +28 -0
  102. package/dist/client/session-refresh.mjs +140 -0
  103. package/dist/client/session-refresh.mjs.map +1 -0
  104. package/dist/client/types.d.mts +41 -0
  105. package/dist/client/vanilla.d.mts +127 -0
  106. package/dist/client/vanilla.mjs +20 -0
  107. package/dist/client/vanilla.mjs.map +1 -0
  108. package/dist/context/create-context.mjs +211 -0
  109. package/dist/context/create-context.mjs.map +1 -0
  110. package/dist/context/helpers.mjs +83 -0
  111. package/dist/context/helpers.mjs.map +1 -0
  112. package/dist/context/init.mjs +20 -0
  113. package/dist/context/init.mjs.map +1 -0
  114. package/dist/cookies/cookie-utils.d.mts +29 -0
  115. package/dist/cookies/cookie-utils.mjs +105 -0
  116. package/dist/cookies/cookie-utils.mjs.map +1 -0
  117. package/dist/cookies/index.d.mts +121 -0
  118. package/dist/cookies/index.mjs +261 -0
  119. package/dist/cookies/index.mjs.map +1 -0
  120. package/dist/cookies/session-store.d.mts +36 -0
  121. package/dist/cookies/session-store.mjs +200 -0
  122. package/dist/cookies/session-store.mjs.map +1 -0
  123. package/dist/crypto/buffer.d.mts +8 -0
  124. package/dist/crypto/buffer.mjs +18 -0
  125. package/dist/crypto/buffer.mjs.map +1 -0
  126. package/dist/crypto/index.d.mts +27 -0
  127. package/dist/crypto/index.mjs +38 -0
  128. package/dist/crypto/index.mjs.map +1 -0
  129. package/dist/crypto/jwt.d.mts +8 -0
  130. package/dist/crypto/jwt.mjs +95 -0
  131. package/dist/crypto/jwt.mjs.map +1 -0
  132. package/dist/crypto/password.d.mts +12 -0
  133. package/dist/crypto/password.mjs +36 -0
  134. package/dist/crypto/password.mjs.map +1 -0
  135. package/dist/crypto/random.d.mts +5 -0
  136. package/dist/crypto/random.mjs +8 -0
  137. package/dist/crypto/random.mjs.map +1 -0
  138. package/dist/db/adapter-base.d.mts +8 -0
  139. package/dist/db/adapter-base.mjs +19 -0
  140. package/dist/db/adapter-base.mjs.map +1 -0
  141. package/dist/db/field-converter.d.mts +8 -0
  142. package/dist/db/field-converter.mjs +21 -0
  143. package/dist/db/field-converter.mjs.map +1 -0
  144. package/dist/db/field.d.mts +42 -0
  145. package/dist/db/get-schema.d.mts +11 -0
  146. package/dist/db/get-schema.mjs +39 -0
  147. package/dist/db/get-schema.mjs.map +1 -0
  148. package/dist/db/index.d.mts +18 -0
  149. package/dist/db/index.mjs +34 -0
  150. package/dist/db/index.mjs.map +1 -0
  151. package/dist/db/internal-adapter.d.mts +14 -0
  152. package/dist/db/internal-adapter.mjs +616 -0
  153. package/dist/db/internal-adapter.mjs.map +1 -0
  154. package/dist/db/schema.d.mts +49 -0
  155. package/dist/db/schema.mjs +118 -0
  156. package/dist/db/schema.mjs.map +1 -0
  157. package/dist/db/to-zod.d.mts +36 -0
  158. package/dist/db/to-zod.mjs +26 -0
  159. package/dist/db/to-zod.mjs.map +1 -0
  160. package/dist/db/verification-token-storage.mjs +28 -0
  161. package/dist/db/verification-token-storage.mjs.map +1 -0
  162. package/dist/db/with-hooks.d.mts +33 -0
  163. package/dist/db/with-hooks.mjs +159 -0
  164. package/dist/db/with-hooks.mjs.map +1 -0
  165. package/dist/index.d.mts +53 -0
  166. package/dist/index.mjs +27 -0
  167. package/dist/integrations/next-js.d.mts +29 -0
  168. package/dist/integrations/next-js.mjs +85 -0
  169. package/dist/integrations/next-js.mjs.map +1 -0
  170. package/dist/oauth2/index.d.mts +5 -0
  171. package/dist/oauth2/index.mjs +7 -0
  172. package/dist/oauth2/link-account.d.mts +48 -0
  173. package/dist/oauth2/link-account.mjs +143 -0
  174. package/dist/oauth2/link-account.mjs.map +1 -0
  175. package/dist/oauth2/state.d.mts +26 -0
  176. package/dist/oauth2/state.mjs +51 -0
  177. package/dist/oauth2/state.mjs.map +1 -0
  178. package/dist/oauth2/utils.d.mts +8 -0
  179. package/dist/oauth2/utils.mjs +31 -0
  180. package/dist/oauth2/utils.mjs.map +1 -0
  181. package/dist/plugins/access/access.d.mts +30 -0
  182. package/dist/plugins/access/access.mjs +46 -0
  183. package/dist/plugins/access/access.mjs.map +1 -0
  184. package/dist/plugins/access/index.d.mts +3 -0
  185. package/dist/plugins/access/index.mjs +3 -0
  186. package/dist/plugins/access/types.d.mts +17 -0
  187. package/dist/plugins/additional-fields/client.d.mts +96 -0
  188. package/dist/plugins/additional-fields/client.mjs +11 -0
  189. package/dist/plugins/additional-fields/client.mjs.map +1 -0
  190. package/dist/plugins/admin/access/index.d.mts +2 -0
  191. package/dist/plugins/admin/access/index.mjs +3 -0
  192. package/dist/plugins/admin/access/statement.d.mts +118 -0
  193. package/dist/plugins/admin/access/statement.mjs +53 -0
  194. package/dist/plugins/admin/access/statement.mjs.map +1 -0
  195. package/dist/plugins/admin/admin.d.mts +911 -0
  196. package/dist/plugins/admin/admin.mjs +95 -0
  197. package/dist/plugins/admin/admin.mjs.map +1 -0
  198. package/dist/plugins/admin/client.d.mts +76 -0
  199. package/dist/plugins/admin/client.mjs +36 -0
  200. package/dist/plugins/admin/client.mjs.map +1 -0
  201. package/dist/plugins/admin/error-codes.d.mts +29 -0
  202. package/dist/plugins/admin/error-codes.mjs +30 -0
  203. package/dist/plugins/admin/error-codes.mjs.map +1 -0
  204. package/dist/plugins/admin/has-permission.mjs +16 -0
  205. package/dist/plugins/admin/has-permission.mjs.map +1 -0
  206. package/dist/plugins/admin/index.d.mts +3 -0
  207. package/dist/plugins/admin/index.mjs +3 -0
  208. package/dist/plugins/admin/routes.mjs +841 -0
  209. package/dist/plugins/admin/routes.mjs.map +1 -0
  210. package/dist/plugins/admin/schema.d.mts +40 -0
  211. package/dist/plugins/admin/schema.mjs +34 -0
  212. package/dist/plugins/admin/schema.mjs.map +1 -0
  213. package/dist/plugins/admin/types.d.mts +89 -0
  214. package/dist/plugins/api-key/adapter.mjs +468 -0
  215. package/dist/plugins/api-key/adapter.mjs.map +1 -0
  216. package/dist/plugins/api-key/client.d.mts +46 -0
  217. package/dist/plugins/api-key/client.mjs +19 -0
  218. package/dist/plugins/api-key/client.mjs.map +1 -0
  219. package/dist/plugins/api-key/error-codes.d.mts +33 -0
  220. package/dist/plugins/api-key/error-codes.mjs +34 -0
  221. package/dist/plugins/api-key/error-codes.mjs.map +1 -0
  222. package/dist/plugins/api-key/index.d.mts +1251 -0
  223. package/dist/plugins/api-key/index.mjs +134 -0
  224. package/dist/plugins/api-key/index.mjs.map +1 -0
  225. package/dist/plugins/api-key/rate-limit.mjs +74 -0
  226. package/dist/plugins/api-key/rate-limit.mjs.map +1 -0
  227. package/dist/plugins/api-key/routes/create-api-key.mjs +252 -0
  228. package/dist/plugins/api-key/routes/create-api-key.mjs.map +1 -0
  229. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs +24 -0
  230. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs.map +1 -0
  231. package/dist/plugins/api-key/routes/delete-api-key.mjs +74 -0
  232. package/dist/plugins/api-key/routes/delete-api-key.mjs.map +1 -0
  233. package/dist/plugins/api-key/routes/get-api-key.mjs +158 -0
  234. package/dist/plugins/api-key/routes/get-api-key.mjs.map +1 -0
  235. package/dist/plugins/api-key/routes/index.mjs +71 -0
  236. package/dist/plugins/api-key/routes/index.mjs.map +1 -0
  237. package/dist/plugins/api-key/routes/list-api-keys.mjs +194 -0
  238. package/dist/plugins/api-key/routes/list-api-keys.mjs.map +1 -0
  239. package/dist/plugins/api-key/routes/update-api-key.mjs +248 -0
  240. package/dist/plugins/api-key/routes/update-api-key.mjs.map +1 -0
  241. package/dist/plugins/api-key/routes/verify-api-key.mjs +224 -0
  242. package/dist/plugins/api-key/routes/verify-api-key.mjs.map +1 -0
  243. package/dist/plugins/api-key/schema.d.mts +199 -0
  244. package/dist/plugins/api-key/schema.mjs +130 -0
  245. package/dist/plugins/api-key/schema.mjs.map +1 -0
  246. package/dist/plugins/api-key/types.d.mts +346 -0
  247. package/dist/plugins/bearer/index.d.mts +45 -0
  248. package/dist/plugins/bearer/index.mjs +66 -0
  249. package/dist/plugins/bearer/index.mjs.map +1 -0
  250. package/dist/plugins/captcha/constants.d.mts +10 -0
  251. package/dist/plugins/captcha/constants.mjs +22 -0
  252. package/dist/plugins/captcha/constants.mjs.map +1 -0
  253. package/dist/plugins/captcha/error-codes.mjs +16 -0
  254. package/dist/plugins/captcha/error-codes.mjs.map +1 -0
  255. package/dist/plugins/captcha/index.d.mts +21 -0
  256. package/dist/plugins/captcha/index.mjs +62 -0
  257. package/dist/plugins/captcha/index.mjs.map +1 -0
  258. package/dist/plugins/captcha/types.d.mts +28 -0
  259. package/dist/plugins/captcha/utils.mjs +11 -0
  260. package/dist/plugins/captcha/utils.mjs.map +1 -0
  261. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +28 -0
  262. package/dist/plugins/captcha/verify-handlers/captchafox.mjs.map +1 -0
  263. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +26 -0
  264. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs.map +1 -0
  265. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +30 -0
  266. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs.map +1 -0
  267. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +28 -0
  268. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs.map +1 -0
  269. package/dist/plugins/captcha/verify-handlers/index.mjs +6 -0
  270. package/dist/plugins/custom-session/client.d.mts +17 -0
  271. package/dist/plugins/custom-session/client.mjs +11 -0
  272. package/dist/plugins/custom-session/client.mjs.map +1 -0
  273. package/dist/plugins/custom-session/index.d.mts +72 -0
  274. package/dist/plugins/custom-session/index.mjs +78 -0
  275. package/dist/plugins/custom-session/index.mjs.map +1 -0
  276. package/dist/plugins/device-authorization/client.d.mts +17 -0
  277. package/dist/plugins/device-authorization/client.mjs +18 -0
  278. package/dist/plugins/device-authorization/client.mjs.map +1 -0
  279. package/dist/plugins/device-authorization/error-codes.mjs +21 -0
  280. package/dist/plugins/device-authorization/error-codes.mjs.map +1 -0
  281. package/dist/plugins/device-authorization/index.d.mts +424 -0
  282. package/dist/plugins/device-authorization/index.mjs +50 -0
  283. package/dist/plugins/device-authorization/index.mjs.map +1 -0
  284. package/dist/plugins/device-authorization/routes.mjs +510 -0
  285. package/dist/plugins/device-authorization/routes.mjs.map +1 -0
  286. package/dist/plugins/device-authorization/schema.mjs +57 -0
  287. package/dist/plugins/device-authorization/schema.mjs.map +1 -0
  288. package/dist/plugins/email-otp/client.d.mts +21 -0
  289. package/dist/plugins/email-otp/client.mjs +18 -0
  290. package/dist/plugins/email-otp/client.mjs.map +1 -0
  291. package/dist/plugins/email-otp/error-codes.d.mts +11 -0
  292. package/dist/plugins/email-otp/error-codes.mjs +12 -0
  293. package/dist/plugins/email-otp/error-codes.mjs.map +1 -0
  294. package/dist/plugins/email-otp/index.d.mts +428 -0
  295. package/dist/plugins/email-otp/index.mjs +130 -0
  296. package/dist/plugins/email-otp/index.mjs.map +1 -0
  297. package/dist/plugins/email-otp/otp-token.mjs +29 -0
  298. package/dist/plugins/email-otp/otp-token.mjs.map +1 -0
  299. package/dist/plugins/email-otp/routes.mjs +631 -0
  300. package/dist/plugins/email-otp/routes.mjs.map +1 -0
  301. package/dist/plugins/email-otp/types.d.mts +86 -0
  302. package/dist/plugins/email-otp/utils.mjs +17 -0
  303. package/dist/plugins/email-otp/utils.mjs.map +1 -0
  304. package/dist/plugins/generic-oauth/client.d.mts +33 -0
  305. package/dist/plugins/generic-oauth/client.mjs +14 -0
  306. package/dist/plugins/generic-oauth/client.mjs.map +1 -0
  307. package/dist/plugins/generic-oauth/error-codes.d.mts +16 -0
  308. package/dist/plugins/generic-oauth/error-codes.mjs +17 -0
  309. package/dist/plugins/generic-oauth/error-codes.mjs.map +1 -0
  310. package/dist/plugins/generic-oauth/index.d.mts +201 -0
  311. package/dist/plugins/generic-oauth/index.mjs +145 -0
  312. package/dist/plugins/generic-oauth/index.mjs.map +1 -0
  313. package/dist/plugins/generic-oauth/providers/auth0.d.mts +37 -0
  314. package/dist/plugins/generic-oauth/providers/auth0.mjs +62 -0
  315. package/dist/plugins/generic-oauth/providers/auth0.mjs.map +1 -0
  316. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +32 -0
  317. package/dist/plugins/generic-oauth/providers/gumroad.mjs +60 -0
  318. package/dist/plugins/generic-oauth/providers/gumroad.mjs.map +1 -0
  319. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +37 -0
  320. package/dist/plugins/generic-oauth/providers/hubspot.mjs +60 -0
  321. package/dist/plugins/generic-oauth/providers/hubspot.mjs.map +1 -0
  322. package/dist/plugins/generic-oauth/providers/index.d.mts +9 -0
  323. package/dist/plugins/generic-oauth/providers/index.mjs +11 -0
  324. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +37 -0
  325. package/dist/plugins/generic-oauth/providers/keycloak.mjs +62 -0
  326. package/dist/plugins/generic-oauth/providers/keycloak.mjs.map +1 -0
  327. package/dist/plugins/generic-oauth/providers/line.d.mts +55 -0
  328. package/dist/plugins/generic-oauth/providers/line.mjs +91 -0
  329. package/dist/plugins/generic-oauth/providers/line.mjs.map +1 -0
  330. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +37 -0
  331. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +66 -0
  332. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs.map +1 -0
  333. package/dist/plugins/generic-oauth/providers/okta.d.mts +37 -0
  334. package/dist/plugins/generic-oauth/providers/okta.mjs +62 -0
  335. package/dist/plugins/generic-oauth/providers/okta.mjs.map +1 -0
  336. package/dist/plugins/generic-oauth/providers/patreon.d.mts +30 -0
  337. package/dist/plugins/generic-oauth/providers/patreon.mjs +59 -0
  338. package/dist/plugins/generic-oauth/providers/patreon.mjs.map +1 -0
  339. package/dist/plugins/generic-oauth/providers/slack.d.mts +30 -0
  340. package/dist/plugins/generic-oauth/providers/slack.mjs +61 -0
  341. package/dist/plugins/generic-oauth/providers/slack.mjs.map +1 -0
  342. package/dist/plugins/generic-oauth/routes.mjs +411 -0
  343. package/dist/plugins/generic-oauth/routes.mjs.map +1 -0
  344. package/dist/plugins/generic-oauth/types.d.mts +159 -0
  345. package/dist/plugins/haveibeenpwned/index.d.mts +46 -0
  346. package/dist/plugins/haveibeenpwned/index.mjs +57 -0
  347. package/dist/plugins/haveibeenpwned/index.mjs.map +1 -0
  348. package/dist/plugins/index.d.mts +65 -0
  349. package/dist/plugins/index.mjs +48 -0
  350. package/dist/plugins/jwt/adapter.mjs +27 -0
  351. package/dist/plugins/jwt/adapter.mjs.map +1 -0
  352. package/dist/plugins/jwt/client.d.mts +40 -0
  353. package/dist/plugins/jwt/client.mjs +19 -0
  354. package/dist/plugins/jwt/client.mjs.map +1 -0
  355. package/dist/plugins/jwt/index.d.mts +224 -0
  356. package/dist/plugins/jwt/index.mjs +202 -0
  357. package/dist/plugins/jwt/index.mjs.map +1 -0
  358. package/dist/plugins/jwt/schema.d.mts +26 -0
  359. package/dist/plugins/jwt/schema.mjs +23 -0
  360. package/dist/plugins/jwt/schema.mjs.map +1 -0
  361. package/dist/plugins/jwt/sign.d.mts +57 -0
  362. package/dist/plugins/jwt/sign.mjs +66 -0
  363. package/dist/plugins/jwt/sign.mjs.map +1 -0
  364. package/dist/plugins/jwt/types.d.mts +194 -0
  365. package/dist/plugins/jwt/utils.d.mts +42 -0
  366. package/dist/plugins/jwt/utils.mjs +64 -0
  367. package/dist/plugins/jwt/utils.mjs.map +1 -0
  368. package/dist/plugins/jwt/verify.d.mts +12 -0
  369. package/dist/plugins/jwt/verify.mjs +46 -0
  370. package/dist/plugins/jwt/verify.mjs.map +1 -0
  371. package/dist/plugins/last-login-method/client.d.mts +38 -0
  372. package/dist/plugins/last-login-method/client.mjs +32 -0
  373. package/dist/plugins/last-login-method/client.mjs.map +1 -0
  374. package/dist/plugins/last-login-method/index.d.mts +118 -0
  375. package/dist/plugins/last-login-method/index.mjs +76 -0
  376. package/dist/plugins/last-login-method/index.mjs.map +1 -0
  377. package/dist/plugins/magic-link/client.d.mts +10 -0
  378. package/dist/plugins/magic-link/client.mjs +11 -0
  379. package/dist/plugins/magic-link/client.mjs.map +1 -0
  380. package/dist/plugins/magic-link/index.d.mts +193 -0
  381. package/dist/plugins/magic-link/index.mjs +177 -0
  382. package/dist/plugins/magic-link/index.mjs.map +1 -0
  383. package/dist/plugins/magic-link/utils.mjs +12 -0
  384. package/dist/plugins/magic-link/utils.mjs.map +1 -0
  385. package/dist/plugins/mcp/authorize.mjs +133 -0
  386. package/dist/plugins/mcp/authorize.mjs.map +1 -0
  387. package/dist/plugins/mcp/index.d.mts +458 -0
  388. package/dist/plugins/mcp/index.mjs +717 -0
  389. package/dist/plugins/mcp/index.mjs.map +1 -0
  390. package/dist/plugins/multi-session/client.d.mts +19 -0
  391. package/dist/plugins/multi-session/client.mjs +20 -0
  392. package/dist/plugins/multi-session/client.mjs.map +1 -0
  393. package/dist/plugins/multi-session/error-codes.d.mts +9 -0
  394. package/dist/plugins/multi-session/error-codes.mjs +8 -0
  395. package/dist/plugins/multi-session/error-codes.mjs.map +1 -0
  396. package/dist/plugins/multi-session/index.d.mts +235 -0
  397. package/dist/plugins/multi-session/index.mjs +172 -0
  398. package/dist/plugins/multi-session/index.mjs.map +1 -0
  399. package/dist/plugins/oauth-proxy/index.d.mts +97 -0
  400. package/dist/plugins/oauth-proxy/index.mjs +305 -0
  401. package/dist/plugins/oauth-proxy/index.mjs.map +1 -0
  402. package/dist/plugins/oauth-proxy/utils.mjs +51 -0
  403. package/dist/plugins/oauth-proxy/utils.mjs.map +1 -0
  404. package/dist/plugins/oidc-provider/authorize.mjs +194 -0
  405. package/dist/plugins/oidc-provider/authorize.mjs.map +1 -0
  406. package/dist/plugins/oidc-provider/client.d.mts +12 -0
  407. package/dist/plugins/oidc-provider/client.mjs +11 -0
  408. package/dist/plugins/oidc-provider/client.mjs.map +1 -0
  409. package/dist/plugins/oidc-provider/error.mjs +17 -0
  410. package/dist/plugins/oidc-provider/error.mjs.map +1 -0
  411. package/dist/plugins/oidc-provider/index.d.mts +702 -0
  412. package/dist/plugins/oidc-provider/index.mjs +1093 -0
  413. package/dist/plugins/oidc-provider/index.mjs.map +1 -0
  414. package/dist/plugins/oidc-provider/schema.d.mts +160 -0
  415. package/dist/plugins/oidc-provider/schema.mjs +132 -0
  416. package/dist/plugins/oidc-provider/schema.mjs.map +1 -0
  417. package/dist/plugins/oidc-provider/types.d.mts +517 -0
  418. package/dist/plugins/oidc-provider/utils/prompt.mjs +19 -0
  419. package/dist/plugins/oidc-provider/utils/prompt.mjs.map +1 -0
  420. package/dist/plugins/oidc-provider/utils.mjs +15 -0
  421. package/dist/plugins/oidc-provider/utils.mjs.map +1 -0
  422. package/dist/plugins/one-tap/client.d.mts +174 -0
  423. package/dist/plugins/one-tap/client.mjs +188 -0
  424. package/dist/plugins/one-tap/client.mjs.map +1 -0
  425. package/dist/plugins/one-tap/index.d.mts +83 -0
  426. package/dist/plugins/one-tap/index.mjs +95 -0
  427. package/dist/plugins/one-tap/index.mjs.map +1 -0
  428. package/dist/plugins/one-time-token/client.d.mts +10 -0
  429. package/dist/plugins/one-time-token/client.mjs +11 -0
  430. package/dist/plugins/one-time-token/client.mjs.map +1 -0
  431. package/dist/plugins/one-time-token/index.d.mts +133 -0
  432. package/dist/plugins/one-time-token/index.mjs +82 -0
  433. package/dist/plugins/one-time-token/index.mjs.map +1 -0
  434. package/dist/plugins/one-time-token/utils.mjs +12 -0
  435. package/dist/plugins/one-time-token/utils.mjs.map +1 -0
  436. package/dist/plugins/open-api/generator.d.mts +115 -0
  437. package/dist/plugins/open-api/generator.mjs +315 -0
  438. package/dist/plugins/open-api/generator.mjs.map +1 -0
  439. package/dist/plugins/open-api/index.d.mts +97 -0
  440. package/dist/plugins/open-api/index.mjs +67 -0
  441. package/dist/plugins/open-api/index.mjs.map +1 -0
  442. package/dist/plugins/open-api/logo.mjs +15 -0
  443. package/dist/plugins/open-api/logo.mjs.map +1 -0
  444. package/dist/plugins/organization/access/index.d.mts +2 -0
  445. package/dist/plugins/organization/access/index.mjs +3 -0
  446. package/dist/plugins/organization/access/statement.d.mts +249 -0
  447. package/dist/plugins/organization/access/statement.mjs +81 -0
  448. package/dist/plugins/organization/access/statement.mjs.map +1 -0
  449. package/dist/plugins/organization/adapter.d.mts +792 -0
  450. package/dist/plugins/organization/adapter.mjs +624 -0
  451. package/dist/plugins/organization/adapter.mjs.map +1 -0
  452. package/dist/plugins/organization/call.mjs +19 -0
  453. package/dist/plugins/organization/call.mjs.map +1 -0
  454. package/dist/plugins/organization/client.d.mts +372 -0
  455. package/dist/plugins/organization/client.mjs +95 -0
  456. package/dist/plugins/organization/client.mjs.map +1 -0
  457. package/dist/plugins/organization/error-codes.d.mts +65 -0
  458. package/dist/plugins/organization/error-codes.mjs +66 -0
  459. package/dist/plugins/organization/error-codes.mjs.map +1 -0
  460. package/dist/plugins/organization/has-permission.mjs +35 -0
  461. package/dist/plugins/organization/has-permission.mjs.map +1 -0
  462. package/dist/plugins/organization/index.d.mts +5 -0
  463. package/dist/plugins/organization/index.mjs +4 -0
  464. package/dist/plugins/organization/organization.d.mts +394 -0
  465. package/dist/plugins/organization/organization.mjs +428 -0
  466. package/dist/plugins/organization/organization.mjs.map +1 -0
  467. package/dist/plugins/organization/permission.d.mts +17 -0
  468. package/dist/plugins/organization/permission.mjs +16 -0
  469. package/dist/plugins/organization/permission.mjs.map +1 -0
  470. package/dist/plugins/organization/routes/crud-access-control.d.mts +394 -0
  471. package/dist/plugins/organization/routes/crud-access-control.mjs +678 -0
  472. package/dist/plugins/organization/routes/crud-access-control.mjs.map +1 -0
  473. package/dist/plugins/organization/routes/crud-invites.d.mts +1031 -0
  474. package/dist/plugins/organization/routes/crud-invites.mjs +551 -0
  475. package/dist/plugins/organization/routes/crud-invites.mjs.map +1 -0
  476. package/dist/plugins/organization/routes/crud-members.d.mts +940 -0
  477. package/dist/plugins/organization/routes/crud-members.mjs +466 -0
  478. package/dist/plugins/organization/routes/crud-members.mjs.map +1 -0
  479. package/dist/plugins/organization/routes/crud-org.d.mts +708 -0
  480. package/dist/plugins/organization/routes/crud-org.mjs +423 -0
  481. package/dist/plugins/organization/routes/crud-org.mjs.map +1 -0
  482. package/dist/plugins/organization/routes/crud-team.d.mts +1071 -0
  483. package/dist/plugins/organization/routes/crud-team.mjs +676 -0
  484. package/dist/plugins/organization/routes/crud-team.mjs.map +1 -0
  485. package/dist/plugins/organization/schema.d.mts +376 -0
  486. package/dist/plugins/organization/schema.mjs +68 -0
  487. package/dist/plugins/organization/schema.mjs.map +1 -0
  488. package/dist/plugins/organization/types.d.mts +677 -0
  489. package/dist/plugins/phone-number/client.d.mts +31 -0
  490. package/dist/plugins/phone-number/client.mjs +20 -0
  491. package/dist/plugins/phone-number/client.mjs.map +1 -0
  492. package/dist/plugins/phone-number/error-codes.d.mts +20 -0
  493. package/dist/plugins/phone-number/error-codes.mjs +21 -0
  494. package/dist/plugins/phone-number/error-codes.mjs.map +1 -0
  495. package/dist/plugins/phone-number/index.d.mts +318 -0
  496. package/dist/plugins/phone-number/index.mjs +49 -0
  497. package/dist/plugins/phone-number/index.mjs.map +1 -0
  498. package/dist/plugins/phone-number/routes.mjs +472 -0
  499. package/dist/plugins/phone-number/routes.mjs.map +1 -0
  500. package/dist/plugins/phone-number/schema.d.mts +23 -0
  501. package/dist/plugins/phone-number/schema.mjs +20 -0
  502. package/dist/plugins/phone-number/schema.mjs.map +1 -0
  503. package/dist/plugins/phone-number/types.d.mts +118 -0
  504. package/dist/plugins/two-factor/backup-codes/index.d.mts +279 -0
  505. package/dist/plugins/two-factor/backup-codes/index.mjs +277 -0
  506. package/dist/plugins/two-factor/backup-codes/index.mjs.map +1 -0
  507. package/dist/plugins/two-factor/client.d.mts +55 -0
  508. package/dist/plugins/two-factor/client.mjs +37 -0
  509. package/dist/plugins/two-factor/client.mjs.map +1 -0
  510. package/dist/plugins/two-factor/constant.mjs +8 -0
  511. package/dist/plugins/two-factor/constant.mjs.map +1 -0
  512. package/dist/plugins/two-factor/error-code.d.mts +17 -0
  513. package/dist/plugins/two-factor/error-code.mjs +18 -0
  514. package/dist/plugins/two-factor/error-code.mjs.map +1 -0
  515. package/dist/plugins/two-factor/index.d.mts +670 -0
  516. package/dist/plugins/two-factor/index.mjs +228 -0
  517. package/dist/plugins/two-factor/index.mjs.map +1 -0
  518. package/dist/plugins/two-factor/otp/index.d.mts +216 -0
  519. package/dist/plugins/two-factor/otp/index.mjs +199 -0
  520. package/dist/plugins/two-factor/otp/index.mjs.map +1 -0
  521. package/dist/plugins/two-factor/schema.d.mts +41 -0
  522. package/dist/plugins/two-factor/schema.mjs +36 -0
  523. package/dist/plugins/two-factor/schema.mjs.map +1 -0
  524. package/dist/plugins/two-factor/totp/index.d.mts +210 -0
  525. package/dist/plugins/two-factor/totp/index.mjs +157 -0
  526. package/dist/plugins/two-factor/totp/index.mjs.map +1 -0
  527. package/dist/plugins/two-factor/types.d.mts +73 -0
  528. package/dist/plugins/two-factor/utils.mjs +12 -0
  529. package/dist/plugins/two-factor/utils.mjs.map +1 -0
  530. package/dist/plugins/two-factor/verify-two-factor.mjs +85 -0
  531. package/dist/plugins/two-factor/verify-two-factor.mjs.map +1 -0
  532. package/dist/plugins/username/client.d.mts +26 -0
  533. package/dist/plugins/username/client.mjs +18 -0
  534. package/dist/plugins/username/client.mjs.map +1 -0
  535. package/dist/plugins/username/error-codes.d.mts +16 -0
  536. package/dist/plugins/username/error-codes.mjs +17 -0
  537. package/dist/plugins/username/error-codes.mjs.map +1 -0
  538. package/dist/plugins/username/index.d.mts +251 -0
  539. package/dist/plugins/username/index.mjs +234 -0
  540. package/dist/plugins/username/index.mjs.map +1 -0
  541. package/dist/plugins/username/schema.d.mts +33 -0
  542. package/dist/plugins/username/schema.mjs +26 -0
  543. package/dist/plugins/username/schema.mjs.map +1 -0
  544. package/dist/providers/index.d.mts +1 -0
  545. package/dist/providers/index.mjs +3 -0
  546. package/dist/state.d.mts +42 -0
  547. package/dist/state.mjs +107 -0
  548. package/dist/state.mjs.map +1 -0
  549. package/dist/types/adapter.d.mts +2 -0
  550. package/dist/types/api.d.mts +29 -0
  551. package/dist/types/auth.d.mts +29 -0
  552. package/dist/types/helper.d.mts +10 -0
  553. package/dist/types/index.d.mts +11 -0
  554. package/dist/types/index.mjs +1 -0
  555. package/dist/types/models.d.mts +11 -0
  556. package/dist/types/plugins.d.mts +20 -0
  557. package/dist/utils/boolean.mjs +8 -0
  558. package/dist/utils/boolean.mjs.map +1 -0
  559. package/dist/utils/constants.mjs +6 -0
  560. package/dist/utils/constants.mjs.map +1 -0
  561. package/dist/utils/date.mjs +8 -0
  562. package/dist/utils/date.mjs.map +1 -0
  563. package/dist/utils/get-request-ip.d.mts +7 -0
  564. package/dist/utils/get-request-ip.mjs +23 -0
  565. package/dist/utils/get-request-ip.mjs.map +1 -0
  566. package/dist/utils/hide-metadata.d.mts +7 -0
  567. package/dist/utils/hide-metadata.mjs +6 -0
  568. package/dist/utils/hide-metadata.mjs.map +1 -0
  569. package/dist/utils/index.d.mts +4 -0
  570. package/dist/utils/index.mjs +6 -0
  571. package/dist/utils/is-api-error.d.mts +7 -0
  572. package/dist/utils/is-api-error.mjs +11 -0
  573. package/dist/utils/is-api-error.mjs.map +1 -0
  574. package/dist/utils/is-atom.mjs +8 -0
  575. package/dist/utils/is-atom.mjs.map +1 -0
  576. package/dist/utils/is-promise.mjs +8 -0
  577. package/dist/utils/is-promise.mjs.map +1 -0
  578. package/dist/utils/middleware-response.mjs +9 -0
  579. package/dist/utils/middleware-response.mjs.map +1 -0
  580. package/dist/utils/password.mjs +26 -0
  581. package/dist/utils/password.mjs.map +1 -0
  582. package/dist/utils/plugin-helper.mjs +17 -0
  583. package/dist/utils/plugin-helper.mjs.map +1 -0
  584. package/dist/utils/shim.mjs +24 -0
  585. package/dist/utils/shim.mjs.map +1 -0
  586. package/dist/utils/time.d.mts +49 -0
  587. package/dist/utils/time.mjs +100 -0
  588. package/dist/utils/time.mjs.map +1 -0
  589. package/dist/utils/url.d.mts +8 -0
  590. package/dist/utils/url.mjs +92 -0
  591. package/dist/utils/url.mjs.map +1 -0
  592. package/dist/utils/wildcard.mjs +108 -0
  593. package/dist/utils/wildcard.mjs.map +1 -0
  594. package/package.json +428 -0
@@ -0,0 +1,423 @@
1
+ import { toZodSchema } from "../../../db/to-zod.mjs";
2
+ import "../../../db/index.mjs";
3
+ import { setSessionCookie } from "../../../cookies/index.mjs";
4
+ import { getSessionFromCtx, requestOnlySessionMiddleware } from "../../../api/routes/session.mjs";
5
+ import "../../../api/index.mjs";
6
+ import { ORGANIZATION_ERROR_CODES } from "../error-codes.mjs";
7
+ import { getOrgAdapter } from "../adapter.mjs";
8
+ import { orgMiddleware, orgSessionMiddleware } from "../call.mjs";
9
+ import { hasPermission } from "../has-permission.mjs";
10
+ import { APIError } from "@better-auth/core/error";
11
+ import { createAuthEndpoint } from "@better-auth/core/api";
12
+ import * as z from "zod";
13
+
14
+ //#region src/plugins/organization/routes/crud-org.ts
15
+ const baseOrganizationSchema = z.object({
16
+ name: z.string().min(1).meta({ description: "The name of the organization" }),
17
+ slug: z.string().min(1).meta({ description: "The slug of the organization" }),
18
+ 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(),
19
+ logo: z.string().meta({ description: "The logo of the organization" }).optional(),
20
+ metadata: z.record(z.string(), z.any()).meta({ description: "The metadata of the organization" }).optional(),
21
+ keepCurrentActiveOrganization: z.boolean().meta({ description: "Whether to keep the current active organization active after creating a new one. Eg: true" }).optional()
22
+ });
23
+ const createOrganization = (options) => {
24
+ const additionalFieldsSchema = toZodSchema({
25
+ fields: options?.schema?.organization?.additionalFields || {},
26
+ isClientSide: true
27
+ });
28
+ return createAuthEndpoint("/organization/create", {
29
+ method: "POST",
30
+ body: z.object({
31
+ ...baseOrganizationSchema.shape,
32
+ ...additionalFieldsSchema.shape
33
+ }),
34
+ use: [orgMiddleware],
35
+ metadata: {
36
+ $Infer: { body: {} },
37
+ openapi: {
38
+ description: "Create an organization",
39
+ responses: { "200": {
40
+ description: "Success",
41
+ content: { "application/json": { schema: {
42
+ type: "object",
43
+ description: "The organization that was created",
44
+ $ref: "#/components/schemas/Organization"
45
+ } } }
46
+ } }
47
+ }
48
+ }
49
+ }, async (ctx) => {
50
+ const session = await getSessionFromCtx(ctx);
51
+ if (!session && (ctx.request || ctx.headers)) throw APIError.fromStatus("UNAUTHORIZED");
52
+ let user = session?.user || null;
53
+ if (!user) {
54
+ if (!ctx.body.userId) throw APIError.fromStatus("UNAUTHORIZED");
55
+ user = await ctx.context.internalAdapter.findUserById(ctx.body.userId);
56
+ }
57
+ if (!user) throw APIError.fromStatus("UNAUTHORIZED");
58
+ const options = ctx.context.orgOptions;
59
+ const canCreateOrg = typeof options?.allowUserToCreateOrganization === "function" ? await options.allowUserToCreateOrganization(user) : options?.allowUserToCreateOrganization === void 0 ? true : options.allowUserToCreateOrganization;
60
+ const isSystemAction = !session && ctx.body.userId;
61
+ if (!canCreateOrg && !isSystemAction) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION);
62
+ const adapter = getOrgAdapter(ctx.context, options);
63
+ const userOrganizations = await adapter.listOrganizations(user.id);
64
+ 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);
65
+ if (await adapter.findOrganizationBySlug(ctx.body.slug)) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_ALREADY_EXISTS);
66
+ let { keepCurrentActiveOrganization: _, userId: __, ...orgData } = ctx.body;
67
+ if (options?.organizationHooks?.beforeCreateOrganization) {
68
+ const response = await options?.organizationHooks.beforeCreateOrganization({
69
+ organization: orgData,
70
+ user
71
+ });
72
+ if (response && typeof response === "object" && "data" in response) orgData = {
73
+ ...ctx.body,
74
+ ...response.data
75
+ };
76
+ }
77
+ const organization = await adapter.createOrganization({ organization: {
78
+ ...orgData,
79
+ createdAt: /* @__PURE__ */ new Date()
80
+ } });
81
+ let member;
82
+ let teamMember = null;
83
+ let data = {
84
+ userId: user.id,
85
+ organizationId: organization.id,
86
+ role: ctx.context.orgOptions.creatorRole || "owner"
87
+ };
88
+ if (options?.organizationHooks?.beforeAddMember) {
89
+ const response = await options?.organizationHooks.beforeAddMember({
90
+ member: {
91
+ userId: user.id,
92
+ organizationId: organization.id,
93
+ role: ctx.context.orgOptions.creatorRole || "owner"
94
+ },
95
+ user,
96
+ organization
97
+ });
98
+ if (response && typeof response === "object" && "data" in response) data = {
99
+ ...data,
100
+ ...response.data
101
+ };
102
+ }
103
+ member = await adapter.createMember(data);
104
+ if (options?.organizationHooks?.afterAddMember) await options?.organizationHooks.afterAddMember({
105
+ member,
106
+ user,
107
+ organization
108
+ });
109
+ if (options?.teams?.enabled && options.teams.defaultTeam?.enabled !== false) {
110
+ let teamData = {
111
+ organizationId: organization.id,
112
+ name: `${organization.name}`,
113
+ createdAt: /* @__PURE__ */ new Date()
114
+ };
115
+ if (options?.organizationHooks?.beforeCreateTeam) {
116
+ const response = await options?.organizationHooks.beforeCreateTeam({
117
+ team: {
118
+ organizationId: organization.id,
119
+ name: `${organization.name}`
120
+ },
121
+ user,
122
+ organization
123
+ });
124
+ if (response && typeof response === "object" && "data" in response) teamData = {
125
+ ...teamData,
126
+ ...response.data
127
+ };
128
+ }
129
+ const defaultTeam = await options.teams.defaultTeam?.customCreateDefaultTeam?.(organization, ctx) || await adapter.createTeam(teamData);
130
+ teamMember = await adapter.findOrCreateTeamMember({
131
+ teamId: defaultTeam.id,
132
+ userId: user.id
133
+ });
134
+ if (options?.organizationHooks?.afterCreateTeam) await options?.organizationHooks.afterCreateTeam({
135
+ team: defaultTeam,
136
+ user,
137
+ organization
138
+ });
139
+ }
140
+ if (options?.organizationHooks?.afterCreateOrganization) await options?.organizationHooks.afterCreateOrganization({
141
+ organization,
142
+ user,
143
+ member
144
+ });
145
+ if (ctx.context.session && !ctx.body.keepCurrentActiveOrganization) await adapter.setActiveOrganization(ctx.context.session.session.token, organization.id, ctx);
146
+ if (teamMember && ctx.context.session && !ctx.body.keepCurrentActiveOrganization) await adapter.setActiveTeam(ctx.context.session.session.token, teamMember.teamId, ctx);
147
+ return ctx.json({
148
+ ...organization,
149
+ metadata: organization.metadata && typeof organization.metadata === "string" ? JSON.parse(organization.metadata) : organization.metadata,
150
+ members: [member]
151
+ });
152
+ });
153
+ };
154
+ const checkOrganizationSlugBodySchema = z.object({ slug: z.string().meta({ description: "The organization slug to check. Eg: \"my-org\"" }) });
155
+ const checkOrganizationSlug = (options) => createAuthEndpoint("/organization/check-slug", {
156
+ method: "POST",
157
+ body: checkOrganizationSlugBodySchema,
158
+ use: [requestOnlySessionMiddleware, orgMiddleware]
159
+ }, async (ctx) => {
160
+ if (!await getOrgAdapter(ctx.context, options).findOrganizationBySlug(ctx.body.slug)) return ctx.json({ status: true });
161
+ throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN);
162
+ });
163
+ const baseUpdateOrganizationSchema = z.object({
164
+ name: z.string().min(1).meta({ description: "The name of the organization" }).optional(),
165
+ slug: z.string().min(1).meta({ description: "The slug of the organization" }).optional(),
166
+ logo: z.string().meta({ description: "The logo of the organization" }).optional(),
167
+ metadata: z.record(z.string(), z.any()).meta({ description: "The metadata of the organization" }).optional()
168
+ });
169
+ const updateOrganization = (options) => {
170
+ const additionalFieldsSchema = toZodSchema({
171
+ fields: options?.schema?.organization?.additionalFields || {},
172
+ isClientSide: true
173
+ });
174
+ return createAuthEndpoint("/organization/update", {
175
+ method: "POST",
176
+ body: z.object({
177
+ data: z.object({
178
+ ...additionalFieldsSchema.shape,
179
+ ...baseUpdateOrganizationSchema.shape
180
+ }).partial(),
181
+ organizationId: z.string().meta({ description: "The organization ID. Eg: \"org-id\"" }).optional()
182
+ }),
183
+ requireHeaders: true,
184
+ use: [orgMiddleware],
185
+ metadata: {
186
+ $Infer: { body: {} },
187
+ openapi: {
188
+ description: "Update an organization",
189
+ responses: { "200": {
190
+ description: "Success",
191
+ content: { "application/json": { schema: {
192
+ type: "object",
193
+ description: "The updated organization",
194
+ $ref: "#/components/schemas/Organization"
195
+ } } }
196
+ } }
197
+ }
198
+ }
199
+ }, async (ctx) => {
200
+ const session = await ctx.context.getSession(ctx);
201
+ if (!session) throw APIError.fromStatus("UNAUTHORIZED", { message: "User not found" });
202
+ const organizationId = ctx.body.organizationId || session.session.activeOrganizationId;
203
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
204
+ const adapter = getOrgAdapter(ctx.context, options);
205
+ const member = await adapter.findMemberByOrgId({
206
+ userId: session.user.id,
207
+ organizationId
208
+ });
209
+ if (!member) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
210
+ if (!await hasPermission({
211
+ permissions: { organization: ["update"] },
212
+ role: member.role,
213
+ options: ctx.context.orgOptions,
214
+ organizationId
215
+ }, ctx)) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION);
216
+ if (typeof ctx.body.data.slug === "string") {
217
+ const existingOrganization = await adapter.findOrganizationBySlug(ctx.body.data.slug);
218
+ if (existingOrganization && existingOrganization.id !== organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN);
219
+ }
220
+ if (options?.organizationHooks?.beforeUpdateOrganization) {
221
+ const response = await options.organizationHooks.beforeUpdateOrganization({
222
+ organization: ctx.body.data,
223
+ user: session.user,
224
+ member
225
+ });
226
+ if (response && typeof response === "object" && "data" in response) ctx.body.data = {
227
+ ...ctx.body.data,
228
+ ...response.data
229
+ };
230
+ }
231
+ const updatedOrg = await adapter.updateOrganization(organizationId, ctx.body.data);
232
+ if (options?.organizationHooks?.afterUpdateOrganization) await options.organizationHooks.afterUpdateOrganization({
233
+ organization: updatedOrg,
234
+ user: session.user,
235
+ member
236
+ });
237
+ return ctx.json(updatedOrg);
238
+ });
239
+ };
240
+ const deleteOrganizationBodySchema = z.object({ organizationId: z.string().meta({ description: "The organization id to delete" }) });
241
+ const deleteOrganization = (options) => {
242
+ return createAuthEndpoint("/organization/delete", {
243
+ method: "POST",
244
+ body: deleteOrganizationBodySchema,
245
+ requireHeaders: true,
246
+ use: [orgMiddleware],
247
+ metadata: { openapi: {
248
+ description: "Delete an organization",
249
+ responses: { "200": {
250
+ description: "Success",
251
+ content: { "application/json": { schema: {
252
+ type: "string",
253
+ description: "The organization id that was deleted"
254
+ } } }
255
+ } }
256
+ } }
257
+ }, async (ctx) => {
258
+ if (ctx.context.orgOptions.disableOrganizationDeletion) throw APIError.from("NOT_FOUND", {
259
+ message: "Organization deletion is disabled",
260
+ code: "ORGANIZATION_DELETION_DISABLED"
261
+ });
262
+ const session = await ctx.context.getSession(ctx);
263
+ if (!session) throw APIError.fromStatus("UNAUTHORIZED");
264
+ const organizationId = ctx.body.organizationId;
265
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
266
+ const adapter = getOrgAdapter(ctx.context, options);
267
+ const member = await adapter.findMemberByOrgId({
268
+ userId: session.user.id,
269
+ organizationId
270
+ });
271
+ if (!member) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
272
+ if (!await hasPermission({
273
+ role: member.role,
274
+ permissions: { organization: ["delete"] },
275
+ organizationId,
276
+ options: ctx.context.orgOptions
277
+ }, ctx)) throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION);
278
+ if (organizationId === session.session.activeOrganizationId)
279
+ /**
280
+ * If the organization is deleted, we set the active organization to null
281
+ */
282
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
283
+ const org = await adapter.findOrganizationById(organizationId);
284
+ if (!org) throw APIError.fromStatus("BAD_REQUEST");
285
+ if (options?.organizationHooks?.beforeDeleteOrganization) await options.organizationHooks.beforeDeleteOrganization({
286
+ organization: org,
287
+ user: session.user
288
+ });
289
+ await adapter.deleteOrganization(organizationId);
290
+ if (options?.organizationHooks?.afterDeleteOrganization) await options.organizationHooks.afterDeleteOrganization({
291
+ organization: org,
292
+ user: session.user
293
+ });
294
+ return ctx.json(org);
295
+ });
296
+ };
297
+ const getFullOrganizationQuerySchema = z.optional(z.object({
298
+ organizationId: z.string().meta({ description: "The organization id to get" }).optional(),
299
+ organizationSlug: z.string().meta({ description: "The organization slug to get" }).optional(),
300
+ 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()
301
+ }));
302
+ const getFullOrganization = (options) => createAuthEndpoint("/organization/get-full-organization", {
303
+ method: "GET",
304
+ query: getFullOrganizationQuerySchema,
305
+ requireHeaders: true,
306
+ use: [orgMiddleware, orgSessionMiddleware],
307
+ metadata: { openapi: {
308
+ operationId: "getOrganization",
309
+ description: "Get the full organization",
310
+ responses: { "200": {
311
+ description: "Success",
312
+ content: { "application/json": { schema: {
313
+ type: "object",
314
+ description: "The organization",
315
+ $ref: "#/components/schemas/Organization"
316
+ } } }
317
+ } }
318
+ } }
319
+ }, async (ctx) => {
320
+ const session = ctx.context.session;
321
+ const organizationId = ctx.query?.organizationSlug || ctx.query?.organizationId || session.session.activeOrganizationId;
322
+ if (!organizationId) return ctx.json(null, { status: 200 });
323
+ const adapter = getOrgAdapter(ctx.context, options);
324
+ const organization = await adapter.findFullOrganization({
325
+ organizationId,
326
+ isSlug: !!ctx.query?.organizationSlug,
327
+ includeTeams: ctx.context.orgOptions.teams?.enabled,
328
+ membersLimit: ctx.query?.membersLimit
329
+ });
330
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
331
+ if (!await adapter.checkMembership({
332
+ userId: session.user.id,
333
+ organizationId: organization.id
334
+ })) {
335
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
336
+ throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
337
+ }
338
+ return ctx.json(organization);
339
+ });
340
+ const setActiveOrganizationBodySchema = z.object({
341
+ 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(),
342
+ 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()
343
+ });
344
+ const setActiveOrganization = (options) => {
345
+ return createAuthEndpoint("/organization/set-active", {
346
+ method: "POST",
347
+ body: setActiveOrganizationBodySchema,
348
+ use: [orgSessionMiddleware, orgMiddleware],
349
+ requireHeaders: true,
350
+ metadata: { openapi: {
351
+ operationId: "setActiveOrganization",
352
+ description: "Set the active organization",
353
+ responses: { "200": {
354
+ description: "Success",
355
+ content: { "application/json": { schema: {
356
+ type: "object",
357
+ description: "The organization",
358
+ $ref: "#/components/schemas/Organization"
359
+ } } }
360
+ } }
361
+ } }
362
+ }, async (ctx) => {
363
+ const adapter = getOrgAdapter(ctx.context, options);
364
+ const session = ctx.context.session;
365
+ let organizationId = ctx.body.organizationId;
366
+ const organizationSlug = ctx.body.organizationSlug;
367
+ if (organizationId === null) {
368
+ if (!session.session.activeOrganizationId) return ctx.json(null);
369
+ await setSessionCookie(ctx, {
370
+ session: await adapter.setActiveOrganization(session.session.token, null, ctx),
371
+ user: session.user
372
+ });
373
+ return ctx.json(null);
374
+ }
375
+ if (!organizationId && !organizationSlug) {
376
+ const sessionOrgId = session.session.activeOrganizationId;
377
+ if (!sessionOrgId) return ctx.json(null);
378
+ organizationId = sessionOrgId;
379
+ }
380
+ if (organizationSlug && !organizationId) {
381
+ const organization = await adapter.findOrganizationBySlug(organizationSlug);
382
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
383
+ organizationId = organization.id;
384
+ }
385
+ if (!organizationId) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
386
+ if (!await adapter.checkMembership({
387
+ userId: session.user.id,
388
+ organizationId
389
+ })) {
390
+ await adapter.setActiveOrganization(session.session.token, null, ctx);
391
+ throw APIError.from("FORBIDDEN", ORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION);
392
+ }
393
+ const organization = await adapter.findOrganizationById(organizationId);
394
+ if (!organization) throw APIError.from("BAD_REQUEST", ORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND);
395
+ await setSessionCookie(ctx, {
396
+ session: await adapter.setActiveOrganization(session.session.token, organization.id, ctx),
397
+ user: session.user
398
+ });
399
+ return ctx.json(organization);
400
+ });
401
+ };
402
+ const listOrganizations = (options) => createAuthEndpoint("/organization/list", {
403
+ method: "GET",
404
+ use: [orgMiddleware, orgSessionMiddleware],
405
+ requireHeaders: true,
406
+ metadata: { openapi: {
407
+ description: "List all organizations",
408
+ responses: { "200": {
409
+ description: "Success",
410
+ content: { "application/json": { schema: {
411
+ type: "array",
412
+ items: { $ref: "#/components/schemas/Organization" }
413
+ } } }
414
+ } }
415
+ } }
416
+ }, async (ctx) => {
417
+ const organizations = await getOrgAdapter(ctx.context, options).listOrganizations(ctx.context.session.user.id);
418
+ return ctx.json(organizations);
419
+ });
420
+
421
+ //#endregion
422
+ export { checkOrganizationSlug, createOrganization, deleteOrganization, getFullOrganization, listOrganizations, setActiveOrganization, updateOrganization };
423
+ //# sourceMappingURL=crud-org.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-org.mjs","names":[],"sources":["../../../../src/plugins/organization/routes/crud-org.ts"],"sourcesContent":["import { createAuthEndpoint } from \"@better-auth/core/api\";\nimport { APIError } from \"@better-auth/core/error\";\nimport * as z from \"zod\";\nimport { getSessionFromCtx, requestOnlySessionMiddleware } from \"../../../api\";\nimport { setSessionCookie } from \"../../../cookies\";\nimport type { InferAdditionalFieldsFromPluginOptions } from \"../../../db\";\nimport { toZodSchema } from \"../../../db\";\nimport { getOrgAdapter } from \"../adapter\";\nimport { orgMiddleware, orgSessionMiddleware } from \"../call\";\nimport { ORGANIZATION_ERROR_CODES } from \"../error-codes\";\nimport { hasPermission } from \"../has-permission\";\nimport type {\n\tInferInvitation,\n\tInferMember,\n\tInferOrganization,\n\tInferTeam,\n\tMember,\n\tTeamMember,\n} from \"../schema\";\nimport type { OrganizationOptions } from \"../types\";\n\nconst baseOrganizationSchema = z.object({\n\tname: z.string().min(1).meta({\n\t\tdescription: \"The name of the organization\",\n\t}),\n\tslug: z.string().min(1).meta({\n\t\tdescription: \"The slug of the organization\",\n\t}),\n\tuserId: z.coerce\n\t\t.string()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t'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\"',\n\t\t})\n\t\t.optional(),\n\tlogo: z\n\t\t.string()\n\t\t.meta({\n\t\t\tdescription: \"The logo of the organization\",\n\t\t})\n\t\t.optional(),\n\tmetadata: z\n\t\t.record(z.string(), z.any())\n\t\t.meta({\n\t\t\tdescription: \"The metadata of the organization\",\n\t\t})\n\t\t.optional(),\n\tkeepCurrentActiveOrganization: z\n\t\t.boolean()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t\"Whether to keep the current active organization active after creating a new one. Eg: true\",\n\t\t})\n\t\t.optional(),\n});\n\nexport const createOrganization = <O extends OrganizationOptions>(\n\toptions?: O | undefined,\n) => {\n\tconst additionalFieldsSchema = toZodSchema({\n\t\tfields: options?.schema?.organization?.additionalFields || {},\n\t\tisClientSide: true,\n\t});\n\n\ttype Body = InferAdditionalFieldsFromPluginOptions<\"organization\", O> &\n\t\tz.infer<typeof baseOrganizationSchema>;\n\n\treturn createAuthEndpoint(\n\t\t\"/organization/create\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: z.object({\n\t\t\t\t...baseOrganizationSchema.shape,\n\t\t\t\t...additionalFieldsSchema.shape,\n\t\t\t}),\n\t\t\tuse: [orgMiddleware],\n\t\t\tmetadata: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tbody: {} as Body,\n\t\t\t\t},\n\t\t\t\topenapi: {\n\t\t\t\t\tdescription: \"Create an organization\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"The organization that was created\",\n\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Organization\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst session = await getSessionFromCtx(ctx);\n\n\t\t\tif (!session && (ctx.request || ctx.headers)) {\n\t\t\t\tthrow APIError.fromStatus(\"UNAUTHORIZED\");\n\t\t\t}\n\t\t\tlet user = session?.user || null;\n\t\t\tif (!user) {\n\t\t\t\tif (!ctx.body.userId) {\n\t\t\t\t\tthrow APIError.fromStatus(\"UNAUTHORIZED\");\n\t\t\t\t}\n\t\t\t\tuser = await ctx.context.internalAdapter.findUserById(ctx.body.userId);\n\t\t\t}\n\t\t\tif (!user) {\n\t\t\t\tthrow APIError.fromStatus(\"UNAUTHORIZED\");\n\t\t\t}\n\t\t\tconst options = ctx.context.orgOptions;\n\t\t\tconst canCreateOrg =\n\t\t\t\ttypeof options?.allowUserToCreateOrganization === \"function\"\n\t\t\t\t\t? await options.allowUserToCreateOrganization(user)\n\t\t\t\t\t: options?.allowUserToCreateOrganization === undefined\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: options.allowUserToCreateOrganization;\n\n\t\t\tconst isSystemAction = !session && ctx.body.userId;\n\n\t\t\tif (!canCreateOrg && !isSystemAction) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options as O);\n\n\t\t\tconst userOrganizations = await adapter.listOrganizations(user.id);\n\t\t\tconst hasReachedOrgLimit =\n\t\t\t\ttypeof options.organizationLimit === \"number\"\n\t\t\t\t\t? userOrganizations.length >= options.organizationLimit\n\t\t\t\t\t: typeof options.organizationLimit === \"function\"\n\t\t\t\t\t\t? await options.organizationLimit(user)\n\t\t\t\t\t\t: false;\n\n\t\t\tif (hasReachedOrgLimit) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst existingOrganization = await adapter.findOrganizationBySlug(\n\t\t\t\tctx.body.slug,\n\t\t\t);\n\t\t\tif (existingOrganization) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_ALREADY_EXISTS,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet {\n\t\t\t\tkeepCurrentActiveOrganization: _,\n\t\t\t\tuserId: __,\n\t\t\t\t...orgData\n\t\t\t} = ctx.body;\n\n\t\t\tif (options?.organizationHooks?.beforeCreateOrganization) {\n\t\t\t\tconst response =\n\t\t\t\t\tawait options?.organizationHooks.beforeCreateOrganization({\n\t\t\t\t\t\torganization: orgData,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t});\n\t\t\t\tif (response && typeof response === \"object\" && \"data\" in response) {\n\t\t\t\t\torgData = {\n\t\t\t\t\t\t...ctx.body,\n\t\t\t\t\t\t...response.data,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst organization = await adapter.createOrganization({\n\t\t\t\torganization: {\n\t\t\t\t\t...orgData,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tlet member:\n\t\t\t\t| (Member & InferAdditionalFieldsFromPluginOptions<\"member\", O, false>)\n\t\t\t\t| undefined;\n\t\t\tlet teamMember: TeamMember | null = null;\n\t\t\tlet data = {\n\t\t\t\tuserId: user.id,\n\t\t\t\torganizationId: organization.id,\n\t\t\t\trole: ctx.context.orgOptions.creatorRole || \"owner\",\n\t\t\t};\n\t\t\tif (options?.organizationHooks?.beforeAddMember) {\n\t\t\t\tconst response = await options?.organizationHooks.beforeAddMember({\n\t\t\t\t\tmember: {\n\t\t\t\t\t\tuserId: user.id,\n\t\t\t\t\t\torganizationId: organization.id,\n\t\t\t\t\t\trole: ctx.context.orgOptions.creatorRole || \"owner\",\n\t\t\t\t\t},\n\t\t\t\t\tuser,\n\t\t\t\t\torganization,\n\t\t\t\t});\n\t\t\t\tif (response && typeof response === \"object\" && \"data\" in response) {\n\t\t\t\t\tdata = {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t...response.data,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tmember = await adapter.createMember(data);\n\t\t\tif (options?.organizationHooks?.afterAddMember) {\n\t\t\t\tawait options?.organizationHooks.afterAddMember({\n\t\t\t\t\tmember,\n\t\t\t\t\tuser,\n\t\t\t\t\torganization,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (\n\t\t\t\toptions?.teams?.enabled &&\n\t\t\t\toptions.teams.defaultTeam?.enabled !== false\n\t\t\t) {\n\t\t\t\tlet teamData = {\n\t\t\t\t\torganizationId: organization.id,\n\t\t\t\t\tname: `${organization.name}`,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t};\n\t\t\t\tif (options?.organizationHooks?.beforeCreateTeam) {\n\t\t\t\t\tconst response = await options?.organizationHooks.beforeCreateTeam({\n\t\t\t\t\t\tteam: {\n\t\t\t\t\t\t\torganizationId: organization.id,\n\t\t\t\t\t\t\tname: `${organization.name}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\torganization,\n\t\t\t\t\t});\n\t\t\t\t\tif (response && typeof response === \"object\" && \"data\" in response) {\n\t\t\t\t\t\tteamData = {\n\t\t\t\t\t\t\t...teamData,\n\t\t\t\t\t\t\t...response.data,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst defaultTeam =\n\t\t\t\t\t(await options.teams.defaultTeam?.customCreateDefaultTeam?.(\n\t\t\t\t\t\torganization,\n\t\t\t\t\t\tctx,\n\t\t\t\t\t)) || (await adapter.createTeam(teamData));\n\n\t\t\t\tteamMember = await adapter.findOrCreateTeamMember({\n\t\t\t\t\tteamId: defaultTeam.id,\n\t\t\t\t\tuserId: user.id,\n\t\t\t\t});\n\n\t\t\t\tif (options?.organizationHooks?.afterCreateTeam) {\n\t\t\t\t\tawait options?.organizationHooks.afterCreateTeam({\n\t\t\t\t\t\tteam: defaultTeam,\n\t\t\t\t\t\tuser,\n\t\t\t\t\t\torganization,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options?.organizationHooks?.afterCreateOrganization) {\n\t\t\t\tawait options?.organizationHooks.afterCreateOrganization({\n\t\t\t\t\torganization,\n\t\t\t\t\tuser,\n\t\t\t\t\tmember,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (ctx.context.session && !ctx.body.keepCurrentActiveOrganization) {\n\t\t\t\tawait adapter.setActiveOrganization(\n\t\t\t\t\tctx.context.session.session.token,\n\t\t\t\t\torganization.id,\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tteamMember &&\n\t\t\t\tctx.context.session &&\n\t\t\t\t!ctx.body.keepCurrentActiveOrganization\n\t\t\t) {\n\t\t\t\tawait adapter.setActiveTeam(\n\t\t\t\t\tctx.context.session.session.token,\n\t\t\t\t\tteamMember.teamId,\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn ctx.json({\n\t\t\t\t...organization,\n\t\t\t\tmetadata:\n\t\t\t\t\torganization.metadata && typeof organization.metadata === \"string\"\n\t\t\t\t\t\t? JSON.parse(organization.metadata)\n\t\t\t\t\t\t: organization.metadata,\n\t\t\t\tmembers: [member],\n\t\t\t});\n\t\t},\n\t);\n};\n\nconst checkOrganizationSlugBodySchema = z.object({\n\tslug: z.string().meta({\n\t\tdescription: 'The organization slug to check. Eg: \"my-org\"',\n\t}),\n});\n\nexport const checkOrganizationSlug = <O extends OrganizationOptions>(\n\toptions: O,\n) =>\n\tcreateAuthEndpoint(\n\t\t\"/organization/check-slug\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: checkOrganizationSlugBodySchema,\n\t\t\tuse: [requestOnlySessionMiddleware, orgMiddleware],\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst orgAdapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst org = await orgAdapter.findOrganizationBySlug(ctx.body.slug);\n\t\t\tif (!org) {\n\t\t\t\treturn ctx.json({\n\t\t\t\t\tstatus: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow APIError.from(\n\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN,\n\t\t\t);\n\t\t},\n\t);\n\nconst baseUpdateOrganizationSchema = z.object({\n\tname: z\n\t\t.string()\n\t\t.min(1)\n\t\t.meta({\n\t\t\tdescription: \"The name of the organization\",\n\t\t})\n\t\t.optional(),\n\tslug: z\n\t\t.string()\n\t\t.min(1)\n\t\t.meta({\n\t\t\tdescription: \"The slug of the organization\",\n\t\t})\n\t\t.optional(),\n\tlogo: z\n\t\t.string()\n\t\t.meta({\n\t\t\tdescription: \"The logo of the organization\",\n\t\t})\n\t\t.optional(),\n\tmetadata: z\n\t\t.record(z.string(), z.any())\n\t\t.meta({\n\t\t\tdescription: \"The metadata of the organization\",\n\t\t})\n\t\t.optional(),\n});\n\nexport const updateOrganization = <O extends OrganizationOptions>(\n\toptions?: O | undefined,\n) => {\n\tconst additionalFieldsSchema = toZodSchema({\n\t\tfields: options?.schema?.organization?.additionalFields || {},\n\t\tisClientSide: true,\n\t});\n\ttype Body = {\n\t\tdata: {\n\t\t\tname?: string | undefined;\n\t\t\tslug?: string | undefined;\n\t\t\tlogo?: string | undefined;\n\t\t\tmetadata?: Record<string, any> | undefined;\n\t\t} & Partial<InferAdditionalFieldsFromPluginOptions<\"organization\", O>>;\n\t\torganizationId?: string | undefined;\n\t};\n\treturn createAuthEndpoint(\n\t\t\"/organization/update\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: z.object({\n\t\t\t\tdata: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\t...additionalFieldsSchema.shape,\n\t\t\t\t\t\t...baseUpdateOrganizationSchema.shape,\n\t\t\t\t\t})\n\t\t\t\t\t.partial(),\n\t\t\t\torganizationId: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.meta({\n\t\t\t\t\t\tdescription: 'The organization ID. Eg: \"org-id\"',\n\t\t\t\t\t})\n\t\t\t\t\t.optional(),\n\t\t\t}),\n\t\t\trequireHeaders: true,\n\t\t\tuse: [orgMiddleware],\n\t\t\tmetadata: {\n\t\t\t\t$Infer: {\n\t\t\t\t\tbody: {} as Body,\n\t\t\t\t},\n\t\t\t\topenapi: {\n\t\t\t\t\tdescription: \"Update an organization\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"The updated organization\",\n\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Organization\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst session = await ctx.context.getSession(ctx);\n\t\t\tif (!session) {\n\t\t\t\tthrow APIError.fromStatus(\"UNAUTHORIZED\", {\n\t\t\t\t\tmessage: \"User not found\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst organizationId =\n\t\t\t\tctx.body.organizationId || session.session.activeOrganizationId;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst member = await adapter.findMemberByOrgId({\n\t\t\t\tuserId: session.user.id,\n\t\t\t\torganizationId: organizationId,\n\t\t\t});\n\t\t\tif (!member) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst canUpdateOrg = await hasPermission(\n\t\t\t\t{\n\t\t\t\t\tpermissions: {\n\t\t\t\t\t\torganization: [\"update\"],\n\t\t\t\t\t},\n\t\t\t\t\trole: member.role,\n\t\t\t\t\toptions: ctx.context.orgOptions,\n\t\t\t\t\torganizationId,\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t);\n\t\t\tif (!canUpdateOrg) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Check if slug is being updated and validate uniqueness\n\t\t\tif (typeof ctx.body.data.slug === \"string\") {\n\t\t\t\tconst existingOrganization = await adapter.findOrganizationBySlug(\n\t\t\t\t\tctx.body.data.slug,\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\texistingOrganization &&\n\t\t\t\t\texistingOrganization.id !== organizationId\n\t\t\t\t) {\n\t\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_SLUG_ALREADY_TAKEN,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options?.organizationHooks?.beforeUpdateOrganization) {\n\t\t\t\tconst response =\n\t\t\t\t\tawait options.organizationHooks.beforeUpdateOrganization({\n\t\t\t\t\t\torganization: ctx.body.data,\n\t\t\t\t\t\tuser: session.user,\n\t\t\t\t\t\tmember,\n\t\t\t\t\t});\n\t\t\t\tif (response && typeof response === \"object\" && \"data\" in response) {\n\t\t\t\t\tctx.body.data = {\n\t\t\t\t\t\t...ctx.body.data,\n\t\t\t\t\t\t...response.data,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst updatedOrg = await adapter.updateOrganization(\n\t\t\t\torganizationId,\n\t\t\t\tctx.body.data,\n\t\t\t);\n\t\t\tif (options?.organizationHooks?.afterUpdateOrganization) {\n\t\t\t\tawait options.organizationHooks.afterUpdateOrganization({\n\t\t\t\t\torganization: updatedOrg,\n\t\t\t\t\tuser: session.user,\n\t\t\t\t\tmember,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ctx.json(updatedOrg);\n\t\t},\n\t);\n};\n\nconst deleteOrganizationBodySchema = z.object({\n\torganizationId: z.string().meta({\n\t\tdescription: \"The organization id to delete\",\n\t}),\n});\n\nexport const deleteOrganization = <O extends OrganizationOptions>(\n\toptions: O,\n) => {\n\treturn createAuthEndpoint(\n\t\t\"/organization/delete\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: deleteOrganizationBodySchema,\n\t\t\trequireHeaders: true,\n\t\t\tuse: [orgMiddleware],\n\t\t\tmetadata: {\n\t\t\t\topenapi: {\n\t\t\t\t\tdescription: \"Delete an organization\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"The organization id that was deleted\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst disableOrganizationDeletion =\n\t\t\t\tctx.context.orgOptions.disableOrganizationDeletion;\n\t\t\tif (disableOrganizationDeletion) {\n\t\t\t\tthrow APIError.from(\"NOT_FOUND\", {\n\t\t\t\t\tmessage: \"Organization deletion is disabled\",\n\t\t\t\t\tcode: \"ORGANIZATION_DELETION_DISABLED\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst session = await ctx.context.getSession(ctx);\n\t\t\tif (!session) {\n\t\t\t\tthrow APIError.fromStatus(\"UNAUTHORIZED\");\n\t\t\t}\n\n\t\t\tconst organizationId = ctx.body.organizationId;\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst member = await adapter.findMemberByOrgId({\n\t\t\t\tuserId: session.user.id,\n\t\t\t\torganizationId: organizationId,\n\t\t\t});\n\t\t\tif (!member) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst canDeleteOrg = await hasPermission(\n\t\t\t\t{\n\t\t\t\t\trole: member.role,\n\t\t\t\t\tpermissions: {\n\t\t\t\t\t\torganization: [\"delete\"],\n\t\t\t\t\t},\n\t\t\t\t\torganizationId,\n\t\t\t\t\toptions: ctx.context.orgOptions,\n\t\t\t\t},\n\t\t\t\tctx,\n\t\t\t);\n\t\t\tif (!canDeleteOrg) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (organizationId === session.session.activeOrganizationId) {\n\t\t\t\t/**\n\t\t\t\t * If the organization is deleted, we set the active organization to null\n\t\t\t\t */\n\t\t\t\tawait adapter.setActiveOrganization(session.session.token, null, ctx);\n\t\t\t}\n\n\t\t\tconst org = await adapter.findOrganizationById(organizationId);\n\t\t\tif (!org) {\n\t\t\t\tthrow APIError.fromStatus(\"BAD_REQUEST\");\n\t\t\t}\n\t\t\tif (options?.organizationHooks?.beforeDeleteOrganization) {\n\t\t\t\tawait options.organizationHooks.beforeDeleteOrganization({\n\t\t\t\t\torganization: org,\n\t\t\t\t\tuser: session.user,\n\t\t\t\t});\n\t\t\t}\n\t\t\tawait adapter.deleteOrganization(organizationId);\n\t\t\tif (options?.organizationHooks?.afterDeleteOrganization) {\n\t\t\t\tawait options.organizationHooks.afterDeleteOrganization({\n\t\t\t\t\torganization: org,\n\t\t\t\t\tuser: session.user,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ctx.json(org);\n\t\t},\n\t);\n};\n\nconst getFullOrganizationQuerySchema = z.optional(\n\tz.object({\n\t\torganizationId: z\n\t\t\t.string()\n\t\t\t.meta({\n\t\t\t\tdescription: \"The organization id to get\",\n\t\t\t})\n\t\t\t.optional(),\n\t\torganizationSlug: z\n\t\t\t.string()\n\t\t\t.meta({\n\t\t\t\tdescription: \"The organization slug to get\",\n\t\t\t})\n\t\t\t.optional(),\n\t\tmembersLimit: z\n\t\t\t.number()\n\t\t\t.or(z.string().transform((val) => parseInt(val)))\n\t\t\t.meta({\n\t\t\t\tdescription:\n\t\t\t\t\t\"The limit of members to get. By default, it uses the membershipLimit option.\",\n\t\t\t})\n\t\t\t.optional(),\n\t}),\n);\n\nexport const getFullOrganization = <O extends OrganizationOptions>(\n\toptions: O,\n) =>\n\tcreateAuthEndpoint(\n\t\t\"/organization/get-full-organization\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tquery: getFullOrganizationQuerySchema,\n\t\t\trequireHeaders: true,\n\t\t\tuse: [orgMiddleware, orgSessionMiddleware],\n\t\t\tmetadata: {\n\t\t\t\topenapi: {\n\t\t\t\t\toperationId: \"getOrganization\",\n\t\t\t\t\tdescription: \"Get the full organization\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"The organization\",\n\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Organization\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst session = ctx.context.session;\n\t\t\tconst organizationId =\n\t\t\t\tctx.query?.organizationSlug ||\n\t\t\t\tctx.query?.organizationId ||\n\t\t\t\tsession.session.activeOrganizationId;\n\t\t\t// return null if no organization is found to avoid erroring since this is a usual scenario\n\t\t\tif (!organizationId) {\n\t\t\t\treturn ctx.json(null, {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst organization = await adapter.findFullOrganization({\n\t\t\t\torganizationId,\n\t\t\t\tisSlug: !!ctx.query?.organizationSlug,\n\t\t\t\tincludeTeams: ctx.context.orgOptions.teams?.enabled,\n\t\t\t\tmembersLimit: ctx.query?.membersLimit,\n\t\t\t});\n\t\t\tif (!organization) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst isMember = await adapter.checkMembership({\n\t\t\t\tuserId: session.user.id,\n\t\t\t\torganizationId: organization.id,\n\t\t\t});\n\t\t\tif (!isMember) {\n\t\t\t\tawait adapter.setActiveOrganization(session.session.token, null, ctx);\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttype OrganizationReturn = O[\"teams\"] extends { enabled: true }\n\t\t\t\t? {\n\t\t\t\t\t\tmembers: InferMember<O>[];\n\t\t\t\t\t\tinvitations: InferInvitation<O>[];\n\t\t\t\t\t\tteams: InferTeam<O>[];\n\t\t\t\t\t} & InferOrganization<O>\n\t\t\t\t: {\n\t\t\t\t\t\tmembers: InferMember<O>[];\n\t\t\t\t\t\tinvitations: InferInvitation<O>[];\n\t\t\t\t\t} & InferOrganization<O>;\n\t\t\treturn ctx.json(organization as unknown as OrganizationReturn);\n\t\t},\n\t);\n\nconst setActiveOrganizationBodySchema = z.object({\n\torganizationId: z\n\t\t.string()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t'The organization id to set as active. It can be null to unset the active organization. Eg: \"org-id\"',\n\t\t})\n\t\t.nullable()\n\t\t.optional(),\n\torganizationSlug: z\n\t\t.string()\n\t\t.meta({\n\t\t\tdescription:\n\t\t\t\t'The organization slug to set as active. It can be null to unset the active organization if organizationId is not provided. Eg: \"org-slug\"',\n\t\t})\n\t\t.optional(),\n});\n\nexport const setActiveOrganization = <O extends OrganizationOptions>(\n\toptions: O,\n) => {\n\treturn createAuthEndpoint(\n\t\t\"/organization/set-active\",\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: setActiveOrganizationBodySchema,\n\t\t\tuse: [orgSessionMiddleware, orgMiddleware],\n\t\t\trequireHeaders: true,\n\t\t\tmetadata: {\n\t\t\t\topenapi: {\n\t\t\t\t\toperationId: \"setActiveOrganization\",\n\t\t\t\t\tdescription: \"Set the active organization\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\tdescription: \"The organization\",\n\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Organization\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst session = ctx.context.session;\n\t\t\tlet organizationId = ctx.body.organizationId;\n\t\t\tconst organizationSlug = ctx.body.organizationSlug;\n\n\t\t\tif (organizationId === null) {\n\t\t\t\tconst sessionOrgId = session.session.activeOrganizationId;\n\t\t\t\tif (!sessionOrgId) {\n\t\t\t\t\treturn ctx.json(null);\n\t\t\t\t}\n\t\t\t\tconst updatedSession = await adapter.setActiveOrganization(\n\t\t\t\t\tsession.session.token,\n\t\t\t\t\tnull,\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t\tawait setSessionCookie(ctx, {\n\t\t\t\t\tsession: updatedSession,\n\t\t\t\t\tuser: session.user,\n\t\t\t\t});\n\t\t\t\treturn ctx.json(null);\n\t\t\t}\n\n\t\t\tif (!organizationId && !organizationSlug) {\n\t\t\t\tconst sessionOrgId = session.session.activeOrganizationId;\n\t\t\t\tif (!sessionOrgId) {\n\t\t\t\t\treturn ctx.json(null);\n\t\t\t\t}\n\t\t\t\torganizationId = sessionOrgId;\n\t\t\t}\n\n\t\t\tif (organizationSlug && !organizationId) {\n\t\t\t\tconst organization =\n\t\t\t\t\tawait adapter.findOrganizationBySlug(organizationSlug);\n\t\t\t\tif (!organization) {\n\t\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\torganizationId = organization.id;\n\t\t\t}\n\n\t\t\tif (!organizationId) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst isMember = await adapter.checkMembership({\n\t\t\t\tuserId: session.user.id,\n\t\t\t\torganizationId,\n\t\t\t});\n\t\t\tif (!isMember) {\n\t\t\t\tawait adapter.setActiveOrganization(session.session.token, null, ctx);\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"FORBIDDEN\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst organization = await adapter.findOrganizationById(organizationId);\n\t\t\tif (!organization) {\n\t\t\t\tthrow APIError.from(\n\t\t\t\t\t\"BAD_REQUEST\",\n\t\t\t\t\tORGANIZATION_ERROR_CODES.ORGANIZATION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst updatedSession = await adapter.setActiveOrganization(\n\t\t\t\tsession.session.token,\n\t\t\t\torganization.id,\n\t\t\t\tctx,\n\t\t\t);\n\t\t\tawait setSessionCookie(ctx, {\n\t\t\t\tsession: updatedSession,\n\t\t\t\tuser: session.user,\n\t\t\t});\n\t\t\ttype OrganizationReturn = O[\"teams\"] extends { enabled: true }\n\t\t\t\t? {\n\t\t\t\t\t\tmembers: InferMember<O>[];\n\t\t\t\t\t\tinvitations: InferInvitation<O>[];\n\t\t\t\t\t\tteams: InferTeam<O>[];\n\t\t\t\t\t} & InferOrganization<O>\n\t\t\t\t: {\n\t\t\t\t\t\tmembers: InferMember<O>[];\n\t\t\t\t\t\tinvitations: InferInvitation<O>[];\n\t\t\t\t\t} & InferOrganization<O>;\n\t\t\treturn ctx.json(organization as unknown as OrganizationReturn);\n\t\t},\n\t);\n};\n\nexport const listOrganizations = <O extends OrganizationOptions>(options: O) =>\n\tcreateAuthEndpoint(\n\t\t\"/organization/list\",\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tuse: [orgMiddleware, orgSessionMiddleware],\n\t\t\trequireHeaders: true,\n\t\t\tmetadata: {\n\t\t\t\topenapi: {\n\t\t\t\t\tdescription: \"List all organizations\",\n\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\"200\": {\n\t\t\t\t\t\t\tdescription: \"Success\",\n\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Organization\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tasync (ctx) => {\n\t\t\tconst adapter = getOrgAdapter<O>(ctx.context, options);\n\t\t\tconst organizations = await adapter.listOrganizations(\n\t\t\t\tctx.context.session.user.id,\n\t\t\t);\n\t\t\treturn ctx.json(organizations);\n\t\t},\n\t);\n"],"mappings":"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"}