@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,481 @@
1
+ import { isAPIError } from "../../utils/is-api-error.mjs";
2
+ import { hasServerSessionStore } from "../../context/store-capabilities.mjs";
3
+ import { parseSessionOutput, parseUserOutput } from "../../db/schema.mjs";
4
+ import { getDate } from "../../utils/date.mjs";
5
+ import { createSessionStore, getChunkedCookie, getSessionQuerySchema } from "../../cookies/session-store.mjs";
6
+ import { decodeCookieCache, deleteSessionCookie, expireCookie, setCookieCache, setSessionCookie } from "../../cookies/index.mjs";
7
+ import { getShouldSkipSessionRefresh } from "../state/should-session-refresh.mjs";
8
+ import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error";
9
+ import { createAuthEndpoint, createAuthMiddleware } from "@better-auth/core/api";
10
+ import * as z from "zod";
11
+ //#region src/api/routes/session.ts
12
+ const getSession = () => createAuthEndpoint("/get-session", {
13
+ method: ["GET", "POST"],
14
+ operationId: "getSession",
15
+ query: getSessionQuerySchema,
16
+ requireHeaders: true,
17
+ metadata: { openapi: {
18
+ operationId: "getSession",
19
+ description: "Get the current session",
20
+ responses: { "200": {
21
+ description: "Success",
22
+ content: { "application/json": { schema: {
23
+ type: ["object", "null"],
24
+ properties: {
25
+ session: { $ref: "#/components/schemas/Session" },
26
+ user: { $ref: "#/components/schemas/User" }
27
+ },
28
+ required: ["session", "user"]
29
+ } } }
30
+ } }
31
+ } }
32
+ }, async (ctx) => {
33
+ ctx.setHeader("cache-control", "no-store");
34
+ ctx.setHeader("pragma", "no-cache");
35
+ const deferSessionRefresh = ctx.context.options.session?.deferSessionRefresh;
36
+ const isPostRequest = ctx.method === "POST";
37
+ if (isPostRequest && !deferSessionRefresh) throw APIError.from("METHOD_NOT_ALLOWED", BASE_ERROR_CODES.METHOD_NOT_ALLOWED_DEFER_SESSION_REQUIRED);
38
+ try {
39
+ const cookieCacheEnabled = ctx.context.options.session?.cookieCache?.enabled === true;
40
+ const sessionCookieToken = await ctx.getSignedCookie(ctx.context.authCookies.sessionToken.name, ctx.context.secret);
41
+ if (!sessionCookieToken && cookieCacheEnabled) return null;
42
+ const sessionDataCookie = getChunkedCookie(ctx, ctx.context.authCookies.sessionData.name);
43
+ if (sessionDataCookie && !cookieCacheEnabled) {
44
+ const sessionStore = createSessionStore(ctx.context.authCookies.sessionData.name, ctx.context.authCookies.sessionData.attributes, ctx);
45
+ sessionStore.setCookies(sessionStore.clean());
46
+ }
47
+ if (!sessionCookieToken) return null;
48
+ const shouldUseCookieCache = cookieCacheEnabled && !ctx.query?.disableCookieCache;
49
+ const sessionDataPayload = shouldUseCookieCache && sessionDataCookie ? await decodeCookieCache(ctx, sessionDataCookie) : null;
50
+ if (shouldUseCookieCache && sessionDataCookie && !sessionDataPayload) expireCookie(ctx, ctx.context.authCookies.sessionData);
51
+ const dontRememberMe = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret);
52
+ /**
53
+ * If session data is present in the cookie, check if it should be used or refreshed
54
+ */
55
+ if (sessionDataPayload?.session) {
56
+ const session = sessionDataPayload.session;
57
+ let shouldExpireCookieCache = session.session.token !== sessionCookieToken;
58
+ if (!shouldExpireCookieCache) {
59
+ const versionConfig = ctx.context.options.session?.cookieCache?.version;
60
+ let expectedVersion = "1";
61
+ if (versionConfig) {
62
+ if (typeof versionConfig === "string") expectedVersion = versionConfig;
63
+ else if (typeof versionConfig === "function") {
64
+ const result = versionConfig(session.session, session.user);
65
+ expectedVersion = result instanceof Promise ? await result : result;
66
+ }
67
+ }
68
+ shouldExpireCookieCache = (session.version || "1") !== expectedVersion;
69
+ }
70
+ if (!shouldExpireCookieCache) {
71
+ const now = Date.now();
72
+ const cachedSessionExpiresAt = new Date(session.session.expiresAt).getTime();
73
+ shouldExpireCookieCache = sessionDataPayload.expiresAt < now || !Number.isFinite(cachedSessionExpiresAt) || cachedSessionExpiresAt < now;
74
+ }
75
+ if (shouldExpireCookieCache) expireCookie(ctx, ctx.context.authCookies.sessionData);
76
+ else {
77
+ const cookieRefreshCache = ctx.context.sessionConfig.cookieRefreshCache;
78
+ if (cookieRefreshCache === false) {
79
+ ctx.context.session = session;
80
+ const parsedSession = parseSessionOutput(ctx.context.options, {
81
+ ...session.session,
82
+ expiresAt: new Date(session.session.expiresAt),
83
+ createdAt: new Date(session.session.createdAt),
84
+ updatedAt: new Date(session.session.updatedAt)
85
+ });
86
+ const parsedUser = parseUserOutput(ctx.context.options, {
87
+ ...session.user,
88
+ createdAt: new Date(session.user.createdAt),
89
+ updatedAt: new Date(session.user.updatedAt)
90
+ });
91
+ return ctx.json({
92
+ session: parsedSession,
93
+ user: parsedUser
94
+ });
95
+ }
96
+ const timeUntilExpiry = sessionDataPayload.expiresAt - Date.now();
97
+ const updateAge = cookieRefreshCache.updateAge * 1e3;
98
+ const shouldSkipSessionRefresh = await getShouldSkipSessionRefresh();
99
+ if (timeUntilExpiry < updateAge && !shouldSkipSessionRefresh) {
100
+ const refreshedSession = {
101
+ session: { ...session.session },
102
+ user: session.user,
103
+ updatedAt: Date.now()
104
+ };
105
+ await setCookieCache(ctx, refreshedSession, false);
106
+ const sessionTokenOptions = ctx.context.authCookies.sessionToken.attributes;
107
+ const sessionTokenMaxAge = dontRememberMe ? void 0 : ctx.context.sessionConfig.expiresIn;
108
+ await ctx.setSignedCookie(ctx.context.authCookies.sessionToken.name, session.session.token, ctx.context.secret, {
109
+ ...sessionTokenOptions,
110
+ maxAge: sessionTokenMaxAge
111
+ });
112
+ const parsedRefreshedSession = parseSessionOutput(ctx.context.options, {
113
+ ...refreshedSession.session,
114
+ expiresAt: new Date(refreshedSession.session.expiresAt),
115
+ createdAt: new Date(refreshedSession.session.createdAt),
116
+ updatedAt: new Date(refreshedSession.session.updatedAt)
117
+ });
118
+ const parsedRefreshedUser = parseUserOutput(ctx.context.options, {
119
+ ...refreshedSession.user,
120
+ createdAt: new Date(refreshedSession.user.createdAt),
121
+ updatedAt: new Date(refreshedSession.user.updatedAt)
122
+ });
123
+ ctx.context.session = {
124
+ session: parsedRefreshedSession,
125
+ user: parsedRefreshedUser
126
+ };
127
+ return ctx.json({
128
+ session: parsedRefreshedSession,
129
+ user: parsedRefreshedUser
130
+ });
131
+ }
132
+ const parsedSession = parseSessionOutput(ctx.context.options, {
133
+ ...session.session,
134
+ expiresAt: new Date(session.session.expiresAt),
135
+ createdAt: new Date(session.session.createdAt),
136
+ updatedAt: new Date(session.session.updatedAt)
137
+ });
138
+ const parsedUser = parseUserOutput(ctx.context.options, {
139
+ ...session.user,
140
+ createdAt: new Date(session.user.createdAt),
141
+ updatedAt: new Date(session.user.updatedAt)
142
+ });
143
+ ctx.context.session = {
144
+ session: parsedSession,
145
+ user: parsedUser
146
+ };
147
+ return ctx.json({
148
+ session: parsedSession,
149
+ user: parsedUser
150
+ });
151
+ }
152
+ }
153
+ const session = await ctx.context.internalAdapter.findSession(sessionCookieToken);
154
+ ctx.context.session = session;
155
+ if (!session || session.session.expiresAt < /* @__PURE__ */ new Date()) {
156
+ deleteSessionCookie(ctx);
157
+ if (session) {
158
+ /**
159
+ * if session expired clean up the session
160
+ * Only delete on POST when deferSessionRefresh is enabled
161
+ */
162
+ if (!deferSessionRefresh || isPostRequest) await ctx.context.internalAdapter.deleteSession(session.session.token);
163
+ }
164
+ return ctx.json(null);
165
+ }
166
+ /**
167
+ * We don't need to update the session if the user doesn't want to be remembered
168
+ * or if the session refresh is disabled
169
+ */
170
+ if (dontRememberMe || ctx.query?.disableRefresh) {
171
+ const parsedSession = parseSessionOutput(ctx.context.options, session.session);
172
+ const parsedUser = parseUserOutput(ctx.context.options, session.user);
173
+ return ctx.json({
174
+ session: parsedSession,
175
+ user: parsedUser
176
+ });
177
+ }
178
+ const expiresIn = ctx.context.sessionConfig.expiresIn;
179
+ const updateAge = ctx.context.sessionConfig.updateAge;
180
+ const shouldBeUpdated = session.session.expiresAt.valueOf() - expiresIn * 1e3 + updateAge * 1e3 <= Date.now();
181
+ const disableRefresh = ctx.query?.disableRefresh || ctx.context.options.session?.disableSessionRefresh;
182
+ const shouldSkipSessionRefresh = await getShouldSkipSessionRefresh();
183
+ const needsRefresh = shouldBeUpdated && !disableRefresh && !shouldSkipSessionRefresh;
184
+ /**
185
+ * When deferSessionRefresh is enabled and this is a GET request,
186
+ * return the session without performing writes, but include needsRefresh flag
187
+ */
188
+ if (deferSessionRefresh && !isPostRequest) {
189
+ await setCookieCache(ctx, session, !!dontRememberMe);
190
+ const parsedSession = parseSessionOutput(ctx.context.options, session.session);
191
+ const parsedUser = parseUserOutput(ctx.context.options, session.user);
192
+ return ctx.json({
193
+ session: parsedSession,
194
+ user: parsedUser,
195
+ needsRefresh
196
+ });
197
+ }
198
+ if (needsRefresh) {
199
+ const updatedSession = await ctx.context.internalAdapter.updateSession(session.session.token, {
200
+ expiresAt: getDate(ctx.context.sessionConfig.expiresIn, "sec"),
201
+ updatedAt: /* @__PURE__ */ new Date()
202
+ });
203
+ if (!updatedSession) {
204
+ /**
205
+ * Handle case where session update fails (e.g., concurrent deletion)
206
+ */
207
+ deleteSessionCookie(ctx);
208
+ throw APIError.from("UNAUTHORIZED", BASE_ERROR_CODES.FAILED_TO_GET_SESSION);
209
+ }
210
+ const maxAge = ctx.context.sessionConfig.expiresIn;
211
+ await setSessionCookie(ctx, {
212
+ session: updatedSession,
213
+ user: session.user
214
+ }, false, { maxAge });
215
+ const parsedUpdatedSession = parseSessionOutput(ctx.context.options, updatedSession);
216
+ const parsedUser = parseUserOutput(ctx.context.options, session.user);
217
+ return ctx.json({
218
+ session: parsedUpdatedSession,
219
+ user: parsedUser
220
+ });
221
+ }
222
+ await setCookieCache(ctx, session, !!dontRememberMe);
223
+ const parsedSession = parseSessionOutput(ctx.context.options, session.session);
224
+ const parsedUser = parseUserOutput(ctx.context.options, session.user);
225
+ return ctx.json({
226
+ session: parsedSession,
227
+ user: parsedUser
228
+ });
229
+ } catch (error) {
230
+ if (isAPIError(error)) throw error;
231
+ ctx.context.logger.error("INTERNAL_SERVER_ERROR", error);
232
+ throw APIError.from("INTERNAL_SERVER_ERROR", BASE_ERROR_CODES.FAILED_TO_GET_SESSION);
233
+ }
234
+ });
235
+ /**
236
+ * Whether the deployment keeps sessions in a durable server-side store
237
+ * (a database or secondary storage) rather than only in the signed cookie.
238
+ *
239
+ * Sensitive operations use this to decide whether the cookie cache is merely an
240
+ * optimization that must be bypassed for an authoritative read (`true`), or the
241
+ * only place the session lives and therefore the authority itself (`false`, for
242
+ * stateless / DB-less deployments). Pass the result as `disableCookieCache` so a
243
+ * revoked-but-cached session cannot authorize a sensitive action.
244
+ */
245
+ const isStateful = (ctx) => hasServerSessionStore(ctx.context.options);
246
+ const getSessionFromCtx = async (ctx, config) => {
247
+ if (ctx.context.session) return ctx.context.session;
248
+ const session = await getSession()({
249
+ ...ctx,
250
+ method: "GET",
251
+ asResponse: false,
252
+ headers: ctx.headers,
253
+ returnHeaders: true,
254
+ returnStatus: false,
255
+ query: {
256
+ ...config,
257
+ ...ctx.query,
258
+ disableCookieCache: config?.disableCookieCache || ctx.query?.disableCookieCache,
259
+ disableRefresh: config?.disableRefresh || ctx.query?.disableRefresh
260
+ }
261
+ }).catch(() => {
262
+ return null;
263
+ });
264
+ if (!session) {
265
+ ctx.context.session = null;
266
+ return null;
267
+ }
268
+ if (session.headers) session.headers.forEach((value, key) => {
269
+ const lowerKey = key.toLowerCase();
270
+ if (lowerKey === "cache-control" || lowerKey === "pragma") return;
271
+ if (lowerKey === "set-cookie") ctx.responseHeaders.append(key, value);
272
+ else ctx.responseHeaders.set(key, value);
273
+ });
274
+ ctx.context.session = session.response;
275
+ return session.response;
276
+ };
277
+ /**
278
+ * Reads the session from the source that can authorize sensitive work.
279
+ *
280
+ * Stateful deployments must re-read the server-side session store because an
281
+ * earlier hook may have populated `ctx.context.session` from cookie cache.
282
+ * Stateless deployments keep the signed cookie as the session record.
283
+ */
284
+ const getAuthoritativeSessionFromCtx = async (ctx) => {
285
+ if (!isStateful(ctx)) return getSessionFromCtx(ctx);
286
+ ctx.context.session = null;
287
+ return getSessionFromCtx(ctx, { disableCookieCache: true });
288
+ };
289
+ /**
290
+ * The middleware forces the endpoint to require a valid session.
291
+ */
292
+ const sessionMiddleware = createAuthMiddleware(async (ctx) => {
293
+ const session = await getSessionFromCtx(ctx);
294
+ if (!session?.session) throw APIError.from("UNAUTHORIZED", {
295
+ message: "Unauthorized",
296
+ code: "UNAUTHORIZED"
297
+ });
298
+ return { session };
299
+ });
300
+ /**
301
+ * This middleware forces the endpoint to require a valid authoritative session.
302
+ * This should be used for sensitive operations like password changes, account deletion, etc.
303
+ */
304
+ const sensitiveSessionMiddleware = createAuthMiddleware(async (ctx) => {
305
+ const session = await getAuthoritativeSessionFromCtx(ctx);
306
+ if (!session?.session) throw APIError.from("UNAUTHORIZED", {
307
+ message: "Unauthorized",
308
+ code: "UNAUTHORIZED"
309
+ });
310
+ return { session };
311
+ });
312
+ /**
313
+ * This middleware allows you to call the endpoint on the client if session is valid.
314
+ * However, if called on the server, no session is required.
315
+ */
316
+ const requestOnlySessionMiddleware = createAuthMiddleware(async (ctx) => {
317
+ const session = await getSessionFromCtx(ctx);
318
+ if (!session?.session && (ctx.request || ctx.headers)) throw APIError.from("UNAUTHORIZED", {
319
+ message: "Unauthorized",
320
+ code: "UNAUTHORIZED"
321
+ });
322
+ return { session };
323
+ });
324
+ /**
325
+ * This middleware forces the endpoint to require a valid session,
326
+ * as well as making sure the session is fresh before proceeding.
327
+ *
328
+ * Session freshness check will be skipped if the session config's freshAge
329
+ * is set to 0
330
+ */
331
+ const freshSessionMiddleware = createAuthMiddleware(async (ctx) => {
332
+ const session = await getSessionFromCtx(ctx);
333
+ if (!session?.session) throw APIError.from("UNAUTHORIZED", {
334
+ message: "Unauthorized",
335
+ code: "UNAUTHORIZED"
336
+ });
337
+ if (ctx.context.sessionConfig.freshAge !== 0) {
338
+ const createdAt = new Date(session.session.createdAt).getTime();
339
+ const freshAge = ctx.context.sessionConfig.freshAge * 1e3;
340
+ if (Date.now() - createdAt >= freshAge) throw APIError.from("FORBIDDEN", BASE_ERROR_CODES.SESSION_NOT_FRESH);
341
+ }
342
+ return { session };
343
+ });
344
+ /**
345
+ * user active sessions list
346
+ */
347
+ const listSessions = () => createAuthEndpoint("/list-sessions", {
348
+ method: "GET",
349
+ operationId: "listUserSessions",
350
+ use: [freshSessionMiddleware],
351
+ requireHeaders: true,
352
+ metadata: { openapi: {
353
+ operationId: "listUserSessions",
354
+ description: "List all active sessions for the user",
355
+ responses: { "200": {
356
+ description: "Success",
357
+ content: { "application/json": { schema: {
358
+ type: "array",
359
+ items: { $ref: "#/components/schemas/Session" }
360
+ } } }
361
+ } }
362
+ } }
363
+ }, async (ctx) => {
364
+ try {
365
+ const activeSessions = (await ctx.context.internalAdapter.listSessions(ctx.context.session.user.id, { onlyActiveSessions: true })).filter((session) => {
366
+ return session.expiresAt > /* @__PURE__ */ new Date();
367
+ });
368
+ return ctx.json(activeSessions.map((session) => parseSessionOutput(ctx.context.options, session)));
369
+ } catch (e) {
370
+ ctx.context.logger.error(e);
371
+ throw ctx.error("INTERNAL_SERVER_ERROR");
372
+ }
373
+ });
374
+ /**
375
+ * revoke a single session
376
+ */
377
+ const revokeSession = createAuthEndpoint("/revoke-session", {
378
+ method: "POST",
379
+ body: z.object({ token: z.string().meta({ description: "The token to revoke" }) }),
380
+ use: [sensitiveSessionMiddleware],
381
+ requireHeaders: true,
382
+ metadata: { openapi: {
383
+ description: "Revoke a single session",
384
+ requestBody: { content: { "application/json": { schema: {
385
+ type: "object",
386
+ properties: { token: {
387
+ type: "string",
388
+ description: "The token to revoke"
389
+ } },
390
+ required: ["token"]
391
+ } } } },
392
+ responses: { "200": {
393
+ description: "Success",
394
+ content: { "application/json": { schema: {
395
+ type: "object",
396
+ properties: { status: {
397
+ type: "boolean",
398
+ description: "Indicates if the session was revoked successfully"
399
+ } },
400
+ required: ["status"]
401
+ } } }
402
+ } }
403
+ } }
404
+ }, async (ctx) => {
405
+ const token = ctx.body.token;
406
+ if ((await ctx.context.internalAdapter.findSession(token))?.session.userId === ctx.context.session.user.id) try {
407
+ await ctx.context.internalAdapter.deleteSession(token);
408
+ } catch (error) {
409
+ ctx.context.logger.error(error && typeof error === "object" && "name" in error ? error.name : "", error);
410
+ throw APIError.from("INTERNAL_SERVER_ERROR", {
411
+ message: "Internal Server Error",
412
+ code: "INTERNAL_SERVER_ERROR"
413
+ });
414
+ }
415
+ return ctx.json({ status: true });
416
+ });
417
+ /**
418
+ * revoke all user sessions
419
+ */
420
+ const revokeSessions = createAuthEndpoint("/revoke-sessions", {
421
+ method: "POST",
422
+ use: [sensitiveSessionMiddleware],
423
+ requireHeaders: true,
424
+ metadata: { openapi: {
425
+ description: "Revoke all sessions for the user",
426
+ responses: { "200": {
427
+ description: "Success",
428
+ content: { "application/json": { schema: {
429
+ type: "object",
430
+ properties: { status: {
431
+ type: "boolean",
432
+ description: "Indicates if all sessions were revoked successfully"
433
+ } },
434
+ required: ["status"]
435
+ } } }
436
+ } }
437
+ } }
438
+ }, async (ctx) => {
439
+ try {
440
+ await ctx.context.internalAdapter.deleteUserSessions(ctx.context.session.user.id);
441
+ } catch (error) {
442
+ ctx.context.logger.error(error && typeof error === "object" && "name" in error ? error.name : "", error);
443
+ throw APIError.from("INTERNAL_SERVER_ERROR", {
444
+ message: "Internal Server Error",
445
+ code: "INTERNAL_SERVER_ERROR"
446
+ });
447
+ }
448
+ return ctx.json({ status: true });
449
+ });
450
+ const revokeOtherSessions = createAuthEndpoint("/revoke-other-sessions", {
451
+ method: "POST",
452
+ requireHeaders: true,
453
+ use: [sensitiveSessionMiddleware],
454
+ metadata: { openapi: {
455
+ description: "Revoke all other sessions for the user except the current one",
456
+ responses: { "200": {
457
+ description: "Success",
458
+ content: { "application/json": { schema: {
459
+ type: "object",
460
+ properties: { status: {
461
+ type: "boolean",
462
+ description: "Indicates if all other sessions were revoked successfully"
463
+ } },
464
+ required: ["status"]
465
+ } } }
466
+ } }
467
+ } }
468
+ }, async (ctx) => {
469
+ const session = ctx.context.session;
470
+ if (!session.user) throw APIError.from("UNAUTHORIZED", {
471
+ message: "Unauthorized",
472
+ code: "UNAUTHORIZED"
473
+ });
474
+ const otherSessions = (await ctx.context.internalAdapter.listSessions(session.user.id)).filter((session) => {
475
+ return session.expiresAt > /* @__PURE__ */ new Date();
476
+ }).filter((session) => session.token !== ctx.context.session.session.token);
477
+ await Promise.all(otherSessions.map((session) => ctx.context.internalAdapter.deleteSession(session.token)));
478
+ return ctx.json({ status: true });
479
+ });
480
+ //#endregion
481
+ export { freshSessionMiddleware, getAuthoritativeSessionFromCtx, getSession, getSessionFromCtx, isStateful, listSessions, requestOnlySessionMiddleware, revokeOtherSessions, revokeSession, revokeSessions, sensitiveSessionMiddleware, sessionMiddleware };
@@ -0,0 +1,186 @@
1
+ import { BetterAuthOptions } from "@better-auth/core";
2
+ import { User } from "@better-auth/core/db";
3
+ import * as _$better_call0 from "better-call";
4
+ import * as z from "zod";
5
+
6
+ //#region src/api/routes/sign-in.d.ts
7
+ declare const socialSignInBodySchema: z.ZodObject<{
8
+ callbackURL: z.ZodOptional<z.ZodString>;
9
+ newUserCallbackURL: z.ZodOptional<z.ZodString>;
10
+ errorCallbackURL: z.ZodOptional<z.ZodString>;
11
+ provider: z.ZodType<(string & {}) | "github" | "apple" | "atlassian" | "cloudflare" | "cognito" | "discord" | "facebook" | "figma" | "microsoft" | "google" | "huggingface" | "slack" | "spotify" | "twitch" | "twitter" | "dropbox" | "kick" | "linear" | "linkedin" | "gitlab" | "tiktok" | "reddit" | "roblox" | "salesforce" | "vk" | "zoom" | "notion" | "kakao" | "naver" | "line" | "paybin" | "paypal" | "polar" | "railway" | "vercel" | "wechat", unknown, z.core.$ZodTypeInternals<(string & {}) | "github" | "apple" | "atlassian" | "cloudflare" | "cognito" | "discord" | "facebook" | "figma" | "microsoft" | "google" | "huggingface" | "slack" | "spotify" | "twitch" | "twitter" | "dropbox" | "kick" | "linear" | "linkedin" | "gitlab" | "tiktok" | "reddit" | "roblox" | "salesforce" | "vk" | "zoom" | "notion" | "kakao" | "naver" | "line" | "paybin" | "paypal" | "polar" | "railway" | "vercel" | "wechat", unknown>>;
12
+ disableRedirect: z.ZodOptional<z.ZodBoolean>;
13
+ idToken: z.ZodOptional<z.ZodObject<{
14
+ token: z.ZodString;
15
+ nonce: z.ZodOptional<z.ZodString>;
16
+ accessToken: z.ZodOptional<z.ZodString>;
17
+ refreshToken: z.ZodOptional<z.ZodString>;
18
+ expiresAt: z.ZodOptional<z.ZodNumber>;
19
+ user: z.ZodOptional<z.ZodObject<{
20
+ name: z.ZodOptional<z.ZodObject<{
21
+ firstName: z.ZodOptional<z.ZodString>;
22
+ lastName: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>>;
24
+ email: z.ZodOptional<z.ZodString>;
25
+ }, z.core.$strip>>;
26
+ }, z.core.$strip>>;
27
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ requestSignUp: z.ZodOptional<z.ZodBoolean>;
29
+ loginHint: z.ZodOptional<z.ZodString>;
30
+ additionalParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
31
+ additionalData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
32
+ }, z.core.$strip>;
33
+ declare const signInSocial: <O extends BetterAuthOptions>() => _$better_call0.StrictEndpoint<"/sign-in/social", {
34
+ method: "POST";
35
+ operationId: string;
36
+ body: z.ZodObject<{
37
+ callbackURL: z.ZodOptional<z.ZodString>;
38
+ newUserCallbackURL: z.ZodOptional<z.ZodString>;
39
+ errorCallbackURL: z.ZodOptional<z.ZodString>;
40
+ provider: z.ZodType<(string & {}) | "github" | "apple" | "atlassian" | "cloudflare" | "cognito" | "discord" | "facebook" | "figma" | "microsoft" | "google" | "huggingface" | "slack" | "spotify" | "twitch" | "twitter" | "dropbox" | "kick" | "linear" | "linkedin" | "gitlab" | "tiktok" | "reddit" | "roblox" | "salesforce" | "vk" | "zoom" | "notion" | "kakao" | "naver" | "line" | "paybin" | "paypal" | "polar" | "railway" | "vercel" | "wechat", unknown, z.core.$ZodTypeInternals<(string & {}) | "github" | "apple" | "atlassian" | "cloudflare" | "cognito" | "discord" | "facebook" | "figma" | "microsoft" | "google" | "huggingface" | "slack" | "spotify" | "twitch" | "twitter" | "dropbox" | "kick" | "linear" | "linkedin" | "gitlab" | "tiktok" | "reddit" | "roblox" | "salesforce" | "vk" | "zoom" | "notion" | "kakao" | "naver" | "line" | "paybin" | "paypal" | "polar" | "railway" | "vercel" | "wechat", unknown>>;
41
+ disableRedirect: z.ZodOptional<z.ZodBoolean>;
42
+ idToken: z.ZodOptional<z.ZodObject<{
43
+ token: z.ZodString;
44
+ nonce: z.ZodOptional<z.ZodString>;
45
+ accessToken: z.ZodOptional<z.ZodString>;
46
+ refreshToken: z.ZodOptional<z.ZodString>;
47
+ expiresAt: z.ZodOptional<z.ZodNumber>;
48
+ user: z.ZodOptional<z.ZodObject<{
49
+ name: z.ZodOptional<z.ZodObject<{
50
+ firstName: z.ZodOptional<z.ZodString>;
51
+ lastName: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strip>>;
53
+ email: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strip>>;
55
+ }, z.core.$strip>>;
56
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
57
+ requestSignUp: z.ZodOptional<z.ZodBoolean>;
58
+ loginHint: z.ZodOptional<z.ZodString>;
59
+ additionalParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
60
+ additionalData: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
61
+ }, z.core.$strip>;
62
+ metadata: {
63
+ $Infer: {
64
+ body: z.infer<typeof socialSignInBodySchema>;
65
+ returned: {
66
+ redirect: boolean;
67
+ token?: string | undefined;
68
+ url?: string | undefined;
69
+ user?: User<O["user"], O["plugins"]> | undefined;
70
+ };
71
+ };
72
+ openapi: {
73
+ description: string;
74
+ operationId: string;
75
+ responses: {
76
+ "200": {
77
+ description: string;
78
+ content: {
79
+ "application/json": {
80
+ schema: {
81
+ type: "object";
82
+ description: string;
83
+ properties: {
84
+ token: {
85
+ type: string;
86
+ };
87
+ user: {
88
+ type: string;
89
+ $ref: string;
90
+ };
91
+ url: {
92
+ type: string;
93
+ };
94
+ redirect: {
95
+ type: string;
96
+ };
97
+ };
98
+ required: string[];
99
+ };
100
+ };
101
+ };
102
+ };
103
+ };
104
+ };
105
+ };
106
+ }, {
107
+ redirect: boolean;
108
+ url: string;
109
+ } | {
110
+ redirect: boolean;
111
+ token: string;
112
+ url: undefined;
113
+ user: User<O["user"], O["plugins"]>;
114
+ }>;
115
+ declare const signInEmail: <O extends BetterAuthOptions>() => _$better_call0.StrictEndpoint<"/sign-in/email", {
116
+ method: "POST";
117
+ operationId: string;
118
+ use: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>[];
119
+ cloneRequest: true;
120
+ body: z.ZodObject<{
121
+ email: z.ZodString;
122
+ password: z.ZodString;
123
+ callbackURL: z.ZodOptional<z.ZodString>;
124
+ rememberMe: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
125
+ }, z.core.$strip>;
126
+ metadata: {
127
+ allowedMediaTypes: string[];
128
+ $Infer: {
129
+ body: {
130
+ email: string;
131
+ password: string;
132
+ callbackURL?: string | undefined;
133
+ rememberMe?: boolean | undefined;
134
+ };
135
+ returned: {
136
+ redirect: boolean;
137
+ token: string;
138
+ url?: string | undefined;
139
+ user: User<O["user"], O["plugins"]>;
140
+ };
141
+ };
142
+ openapi: {
143
+ operationId: string;
144
+ description: string;
145
+ responses: {
146
+ "200": {
147
+ description: string;
148
+ content: {
149
+ "application/json": {
150
+ schema: {
151
+ type: "object";
152
+ description: string;
153
+ properties: {
154
+ redirect: {
155
+ type: string;
156
+ enum: boolean[];
157
+ };
158
+ token: {
159
+ type: string;
160
+ description: string;
161
+ };
162
+ url: {
163
+ type: string;
164
+ nullable: boolean;
165
+ };
166
+ user: {
167
+ type: string;
168
+ $ref: string;
169
+ };
170
+ };
171
+ required: string[];
172
+ };
173
+ };
174
+ };
175
+ };
176
+ };
177
+ };
178
+ };
179
+ }, {
180
+ redirect: boolean;
181
+ token: string;
182
+ url?: string | undefined;
183
+ user: User<O["user"], O["plugins"]>;
184
+ }>;
185
+ //#endregion
186
+ export { signInEmail, signInSocial };