@hammadj/better-auth 1.5.0-beta.9

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 (688) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +33 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +36 -0
  4. package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
  5. package/dist/adapters/drizzle-adapter/index.mjs +3 -0
  6. package/dist/adapters/index.d.mts +23 -0
  7. package/dist/adapters/index.mjs +13 -0
  8. package/dist/adapters/index.mjs.map +1 -0
  9. package/dist/adapters/kysely-adapter/index.d.mts +1 -0
  10. package/dist/adapters/kysely-adapter/index.mjs +3 -0
  11. package/dist/adapters/memory-adapter/index.d.mts +1 -0
  12. package/dist/adapters/memory-adapter/index.mjs +3 -0
  13. package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
  14. package/dist/adapters/mongodb-adapter/index.mjs +3 -0
  15. package/dist/adapters/prisma-adapter/index.d.mts +1 -0
  16. package/dist/adapters/prisma-adapter/index.mjs +3 -0
  17. package/dist/api/index.d.mts +40 -0
  18. package/dist/api/index.mjs +205 -0
  19. package/dist/api/index.mjs.map +1 -0
  20. package/dist/api/middlewares/index.d.mts +1 -0
  21. package/dist/api/middlewares/index.mjs +3 -0
  22. package/dist/api/middlewares/origin-check.d.mts +17 -0
  23. package/dist/api/middlewares/origin-check.mjs +140 -0
  24. package/dist/api/middlewares/origin-check.mjs.map +1 -0
  25. package/dist/api/rate-limiter/index.mjs +177 -0
  26. package/dist/api/rate-limiter/index.mjs.map +1 -0
  27. package/dist/api/routes/account.d.mts +10 -0
  28. package/dist/api/routes/account.mjs +493 -0
  29. package/dist/api/routes/account.mjs.map +1 -0
  30. package/dist/api/routes/callback.d.mts +5 -0
  31. package/dist/api/routes/callback.mjs +178 -0
  32. package/dist/api/routes/callback.mjs.map +1 -0
  33. package/dist/api/routes/email-verification.d.mts +29 -0
  34. package/dist/api/routes/email-verification.mjs +301 -0
  35. package/dist/api/routes/email-verification.mjs.map +1 -0
  36. package/dist/api/routes/error.d.mts +5 -0
  37. package/dist/api/routes/error.mjs +386 -0
  38. package/dist/api/routes/error.mjs.map +1 -0
  39. package/dist/api/routes/index.d.mts +11 -0
  40. package/dist/api/routes/index.mjs +13 -0
  41. package/dist/api/routes/ok.d.mts +5 -0
  42. package/dist/api/routes/ok.mjs +30 -0
  43. package/dist/api/routes/ok.mjs.map +1 -0
  44. package/dist/api/routes/password.d.mts +8 -0
  45. package/dist/api/routes/password.mjs +198 -0
  46. package/dist/api/routes/password.mjs.map +1 -0
  47. package/dist/api/routes/session.d.mts +52 -0
  48. package/dist/api/routes/session.mjs +478 -0
  49. package/dist/api/routes/session.mjs.map +1 -0
  50. package/dist/api/routes/sign-in.d.mts +8 -0
  51. package/dist/api/routes/sign-in.mjs +262 -0
  52. package/dist/api/routes/sign-in.mjs.map +1 -0
  53. package/dist/api/routes/sign-out.d.mts +5 -0
  54. package/dist/api/routes/sign-out.mjs +33 -0
  55. package/dist/api/routes/sign-out.mjs.map +1 -0
  56. package/dist/api/routes/sign-up.d.mts +7 -0
  57. package/dist/api/routes/sign-up.mjs +227 -0
  58. package/dist/api/routes/sign-up.mjs.map +1 -0
  59. package/dist/api/routes/update-user.d.mts +12 -0
  60. package/dist/api/routes/update-user.mjs +493 -0
  61. package/dist/api/routes/update-user.mjs.map +1 -0
  62. package/dist/api/state/oauth.d.mts +5 -0
  63. package/dist/api/state/oauth.mjs +8 -0
  64. package/dist/api/state/oauth.mjs.map +1 -0
  65. package/dist/api/state/should-session-refresh.d.mts +13 -0
  66. package/dist/api/state/should-session-refresh.mjs +16 -0
  67. package/dist/api/state/should-session-refresh.mjs.map +1 -0
  68. package/dist/api/to-auth-endpoints.mjs +197 -0
  69. package/dist/api/to-auth-endpoints.mjs.map +1 -0
  70. package/dist/auth/base.mjs +44 -0
  71. package/dist/auth/base.mjs.map +1 -0
  72. package/dist/auth/full.d.mts +30 -0
  73. package/dist/auth/full.mjs +32 -0
  74. package/dist/auth/full.mjs.map +1 -0
  75. package/dist/auth/minimal.d.mts +12 -0
  76. package/dist/auth/minimal.mjs +14 -0
  77. package/dist/auth/minimal.mjs.map +1 -0
  78. package/dist/auth/trusted-origins.mjs +31 -0
  79. package/dist/auth/trusted-origins.mjs.map +1 -0
  80. package/dist/client/broadcast-channel.d.mts +20 -0
  81. package/dist/client/broadcast-channel.mjs +46 -0
  82. package/dist/client/broadcast-channel.mjs.map +1 -0
  83. package/dist/client/config.mjs +90 -0
  84. package/dist/client/config.mjs.map +1 -0
  85. package/dist/client/fetch-plugins.mjs +18 -0
  86. package/dist/client/fetch-plugins.mjs.map +1 -0
  87. package/dist/client/focus-manager.d.mts +11 -0
  88. package/dist/client/focus-manager.mjs +32 -0
  89. package/dist/client/focus-manager.mjs.map +1 -0
  90. package/dist/client/index.d.mts +30 -0
  91. package/dist/client/index.mjs +21 -0
  92. package/dist/client/index.mjs.map +1 -0
  93. package/dist/client/lynx/index.d.mts +62 -0
  94. package/dist/client/lynx/index.mjs +24 -0
  95. package/dist/client/lynx/index.mjs.map +1 -0
  96. package/dist/client/lynx/lynx-store.d.mts +47 -0
  97. package/dist/client/lynx/lynx-store.mjs +47 -0
  98. package/dist/client/lynx/lynx-store.mjs.map +1 -0
  99. package/dist/client/online-manager.d.mts +12 -0
  100. package/dist/client/online-manager.mjs +35 -0
  101. package/dist/client/online-manager.mjs.map +1 -0
  102. package/dist/client/parser.mjs +73 -0
  103. package/dist/client/parser.mjs.map +1 -0
  104. package/dist/client/path-to-object.d.mts +57 -0
  105. package/dist/client/plugins/index.d.mts +58 -0
  106. package/dist/client/plugins/index.mjs +33 -0
  107. package/dist/client/plugins/infer-plugin.d.mts +9 -0
  108. package/dist/client/plugins/infer-plugin.mjs +11 -0
  109. package/dist/client/plugins/infer-plugin.mjs.map +1 -0
  110. package/dist/client/proxy.mjs +79 -0
  111. package/dist/client/proxy.mjs.map +1 -0
  112. package/dist/client/query.d.mts +23 -0
  113. package/dist/client/query.mjs +98 -0
  114. package/dist/client/query.mjs.map +1 -0
  115. package/dist/client/react/index.d.mts +63 -0
  116. package/dist/client/react/index.mjs +24 -0
  117. package/dist/client/react/index.mjs.map +1 -0
  118. package/dist/client/react/react-store.d.mts +47 -0
  119. package/dist/client/react/react-store.mjs +47 -0
  120. package/dist/client/react/react-store.mjs.map +1 -0
  121. package/dist/client/session-atom.mjs +29 -0
  122. package/dist/client/session-atom.mjs.map +1 -0
  123. package/dist/client/session-refresh.d.mts +28 -0
  124. package/dist/client/session-refresh.mjs +140 -0
  125. package/dist/client/session-refresh.mjs.map +1 -0
  126. package/dist/client/solid/index.d.mts +57 -0
  127. package/dist/client/solid/index.mjs +22 -0
  128. package/dist/client/solid/index.mjs.map +1 -0
  129. package/dist/client/solid/solid-store.mjs +24 -0
  130. package/dist/client/solid/solid-store.mjs.map +1 -0
  131. package/dist/client/svelte/index.d.mts +63 -0
  132. package/dist/client/svelte/index.mjs +20 -0
  133. package/dist/client/svelte/index.mjs.map +1 -0
  134. package/dist/client/types.d.mts +58 -0
  135. package/dist/client/vanilla.d.mts +62 -0
  136. package/dist/client/vanilla.mjs +20 -0
  137. package/dist/client/vanilla.mjs.map +1 -0
  138. package/dist/client/vue/index.d.mts +86 -0
  139. package/dist/client/vue/index.mjs +38 -0
  140. package/dist/client/vue/index.mjs.map +1 -0
  141. package/dist/client/vue/vue-store.mjs +26 -0
  142. package/dist/client/vue/vue-store.mjs.map +1 -0
  143. package/dist/context/create-context.mjs +211 -0
  144. package/dist/context/create-context.mjs.map +1 -0
  145. package/dist/context/helpers.mjs +62 -0
  146. package/dist/context/helpers.mjs.map +1 -0
  147. package/dist/context/init-minimal.mjs +20 -0
  148. package/dist/context/init-minimal.mjs.map +1 -0
  149. package/dist/context/init.mjs +22 -0
  150. package/dist/context/init.mjs.map +1 -0
  151. package/dist/cookies/cookie-utils.d.mts +29 -0
  152. package/dist/cookies/cookie-utils.mjs +105 -0
  153. package/dist/cookies/cookie-utils.mjs.map +1 -0
  154. package/dist/cookies/index.d.mts +67 -0
  155. package/dist/cookies/index.mjs +264 -0
  156. package/dist/cookies/index.mjs.map +1 -0
  157. package/dist/cookies/session-store.d.mts +36 -0
  158. package/dist/cookies/session-store.mjs +200 -0
  159. package/dist/cookies/session-store.mjs.map +1 -0
  160. package/dist/crypto/buffer.d.mts +8 -0
  161. package/dist/crypto/buffer.mjs +18 -0
  162. package/dist/crypto/buffer.mjs.map +1 -0
  163. package/dist/crypto/index.d.mts +27 -0
  164. package/dist/crypto/index.mjs +38 -0
  165. package/dist/crypto/index.mjs.map +1 -0
  166. package/dist/crypto/jwt.d.mts +8 -0
  167. package/dist/crypto/jwt.mjs +95 -0
  168. package/dist/crypto/jwt.mjs.map +1 -0
  169. package/dist/crypto/password.d.mts +12 -0
  170. package/dist/crypto/password.mjs +36 -0
  171. package/dist/crypto/password.mjs.map +1 -0
  172. package/dist/crypto/random.d.mts +5 -0
  173. package/dist/crypto/random.mjs +8 -0
  174. package/dist/crypto/random.mjs.map +1 -0
  175. package/dist/db/adapter-base.d.mts +8 -0
  176. package/dist/db/adapter-base.mjs +28 -0
  177. package/dist/db/adapter-base.mjs.map +1 -0
  178. package/dist/db/adapter-kysely.d.mts +8 -0
  179. package/dist/db/adapter-kysely.mjs +21 -0
  180. package/dist/db/adapter-kysely.mjs.map +1 -0
  181. package/dist/db/field-converter.d.mts +8 -0
  182. package/dist/db/field-converter.mjs +21 -0
  183. package/dist/db/field-converter.mjs.map +1 -0
  184. package/dist/db/field.d.mts +55 -0
  185. package/dist/db/field.mjs +11 -0
  186. package/dist/db/field.mjs.map +1 -0
  187. package/dist/db/get-migration.d.mts +23 -0
  188. package/dist/db/get-migration.mjs +339 -0
  189. package/dist/db/get-migration.mjs.map +1 -0
  190. package/dist/db/get-schema.d.mts +11 -0
  191. package/dist/db/get-schema.mjs +39 -0
  192. package/dist/db/get-schema.mjs.map +1 -0
  193. package/dist/db/index.d.mts +9 -0
  194. package/dist/db/index.mjs +36 -0
  195. package/dist/db/index.mjs.map +1 -0
  196. package/dist/db/internal-adapter.d.mts +14 -0
  197. package/dist/db/internal-adapter.mjs +616 -0
  198. package/dist/db/internal-adapter.mjs.map +1 -0
  199. package/dist/db/schema.d.mts +26 -0
  200. package/dist/db/schema.mjs +118 -0
  201. package/dist/db/schema.mjs.map +1 -0
  202. package/dist/db/to-zod.d.mts +36 -0
  203. package/dist/db/to-zod.mjs +26 -0
  204. package/dist/db/to-zod.mjs.map +1 -0
  205. package/dist/db/verification-token-storage.mjs +28 -0
  206. package/dist/db/verification-token-storage.mjs.map +1 -0
  207. package/dist/db/with-hooks.d.mts +33 -0
  208. package/dist/db/with-hooks.mjs +159 -0
  209. package/dist/db/with-hooks.mjs.map +1 -0
  210. package/dist/index.d.mts +52 -0
  211. package/dist/index.mjs +26 -0
  212. package/dist/integrations/next-js.d.mts +14 -0
  213. package/dist/integrations/next-js.mjs +78 -0
  214. package/dist/integrations/next-js.mjs.map +1 -0
  215. package/dist/integrations/node.d.mts +13 -0
  216. package/dist/integrations/node.mjs +16 -0
  217. package/dist/integrations/node.mjs.map +1 -0
  218. package/dist/integrations/solid-start.d.mts +23 -0
  219. package/dist/integrations/solid-start.mjs +17 -0
  220. package/dist/integrations/solid-start.mjs.map +1 -0
  221. package/dist/integrations/svelte-kit.d.mts +29 -0
  222. package/dist/integrations/svelte-kit.mjs +57 -0
  223. package/dist/integrations/svelte-kit.mjs.map +1 -0
  224. package/dist/integrations/tanstack-start-solid.d.mts +22 -0
  225. package/dist/integrations/tanstack-start-solid.mjs +61 -0
  226. package/dist/integrations/tanstack-start-solid.mjs.map +1 -0
  227. package/dist/integrations/tanstack-start.d.mts +22 -0
  228. package/dist/integrations/tanstack-start.mjs +61 -0
  229. package/dist/integrations/tanstack-start.mjs.map +1 -0
  230. package/dist/oauth2/index.d.mts +5 -0
  231. package/dist/oauth2/index.mjs +7 -0
  232. package/dist/oauth2/link-account.d.mts +31 -0
  233. package/dist/oauth2/link-account.mjs +144 -0
  234. package/dist/oauth2/link-account.mjs.map +1 -0
  235. package/dist/oauth2/state.d.mts +26 -0
  236. package/dist/oauth2/state.mjs +51 -0
  237. package/dist/oauth2/state.mjs.map +1 -0
  238. package/dist/oauth2/utils.d.mts +8 -0
  239. package/dist/oauth2/utils.mjs +31 -0
  240. package/dist/oauth2/utils.mjs.map +1 -0
  241. package/dist/plugins/access/access.d.mts +30 -0
  242. package/dist/plugins/access/access.mjs +46 -0
  243. package/dist/plugins/access/access.mjs.map +1 -0
  244. package/dist/plugins/access/index.d.mts +3 -0
  245. package/dist/plugins/access/index.mjs +3 -0
  246. package/dist/plugins/access/types.d.mts +17 -0
  247. package/dist/plugins/additional-fields/client.d.mts +14 -0
  248. package/dist/plugins/additional-fields/client.mjs +11 -0
  249. package/dist/plugins/additional-fields/client.mjs.map +1 -0
  250. package/dist/plugins/admin/access/index.d.mts +2 -0
  251. package/dist/plugins/admin/access/index.mjs +3 -0
  252. package/dist/plugins/admin/access/statement.d.mts +118 -0
  253. package/dist/plugins/admin/access/statement.mjs +53 -0
  254. package/dist/plugins/admin/access/statement.mjs.map +1 -0
  255. package/dist/plugins/admin/admin.d.mts +14 -0
  256. package/dist/plugins/admin/admin.mjs +95 -0
  257. package/dist/plugins/admin/admin.mjs.map +1 -0
  258. package/dist/plugins/admin/client.d.mts +14 -0
  259. package/dist/plugins/admin/client.mjs +36 -0
  260. package/dist/plugins/admin/client.mjs.map +1 -0
  261. package/dist/plugins/admin/error-codes.d.mts +5 -0
  262. package/dist/plugins/admin/error-codes.mjs +30 -0
  263. package/dist/plugins/admin/error-codes.mjs.map +1 -0
  264. package/dist/plugins/admin/has-permission.mjs +16 -0
  265. package/dist/plugins/admin/has-permission.mjs.map +1 -0
  266. package/dist/plugins/admin/index.d.mts +3 -0
  267. package/dist/plugins/admin/index.mjs +3 -0
  268. package/dist/plugins/admin/routes.mjs +855 -0
  269. package/dist/plugins/admin/routes.mjs.map +1 -0
  270. package/dist/plugins/admin/schema.d.mts +6 -0
  271. package/dist/plugins/admin/schema.mjs +34 -0
  272. package/dist/plugins/admin/schema.mjs.map +1 -0
  273. package/dist/plugins/admin/types.d.mts +89 -0
  274. package/dist/plugins/anonymous/client.d.mts +9 -0
  275. package/dist/plugins/anonymous/client.mjs +22 -0
  276. package/dist/plugins/anonymous/client.mjs.map +1 -0
  277. package/dist/plugins/anonymous/error-codes.d.mts +5 -0
  278. package/dist/plugins/anonymous/error-codes.mjs +16 -0
  279. package/dist/plugins/anonymous/error-codes.mjs.map +1 -0
  280. package/dist/plugins/anonymous/index.d.mts +14 -0
  281. package/dist/plugins/anonymous/index.mjs +163 -0
  282. package/dist/plugins/anonymous/index.mjs.map +1 -0
  283. package/dist/plugins/anonymous/schema.d.mts +5 -0
  284. package/dist/plugins/anonymous/schema.mjs +11 -0
  285. package/dist/plugins/anonymous/schema.mjs.map +1 -0
  286. package/dist/plugins/anonymous/types.d.mts +68 -0
  287. package/dist/plugins/api-key/adapter.mjs +468 -0
  288. package/dist/plugins/api-key/adapter.mjs.map +1 -0
  289. package/dist/plugins/api-key/client.d.mts +9 -0
  290. package/dist/plugins/api-key/client.mjs +19 -0
  291. package/dist/plugins/api-key/client.mjs.map +1 -0
  292. package/dist/plugins/api-key/error-codes.d.mts +5 -0
  293. package/dist/plugins/api-key/error-codes.mjs +34 -0
  294. package/dist/plugins/api-key/error-codes.mjs.map +1 -0
  295. package/dist/plugins/api-key/index.d.mts +17 -0
  296. package/dist/plugins/api-key/index.mjs +134 -0
  297. package/dist/plugins/api-key/index.mjs.map +1 -0
  298. package/dist/plugins/api-key/rate-limit.mjs +74 -0
  299. package/dist/plugins/api-key/rate-limit.mjs.map +1 -0
  300. package/dist/plugins/api-key/routes/create-api-key.mjs +252 -0
  301. package/dist/plugins/api-key/routes/create-api-key.mjs.map +1 -0
  302. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs +24 -0
  303. package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs.map +1 -0
  304. package/dist/plugins/api-key/routes/delete-api-key.mjs +74 -0
  305. package/dist/plugins/api-key/routes/delete-api-key.mjs.map +1 -0
  306. package/dist/plugins/api-key/routes/get-api-key.mjs +158 -0
  307. package/dist/plugins/api-key/routes/get-api-key.mjs.map +1 -0
  308. package/dist/plugins/api-key/routes/index.mjs +71 -0
  309. package/dist/plugins/api-key/routes/index.mjs.map +1 -0
  310. package/dist/plugins/api-key/routes/list-api-keys.mjs +194 -0
  311. package/dist/plugins/api-key/routes/list-api-keys.mjs.map +1 -0
  312. package/dist/plugins/api-key/routes/update-api-key.mjs +248 -0
  313. package/dist/plugins/api-key/routes/update-api-key.mjs.map +1 -0
  314. package/dist/plugins/api-key/routes/verify-api-key.mjs +223 -0
  315. package/dist/plugins/api-key/routes/verify-api-key.mjs.map +1 -0
  316. package/dist/plugins/api-key/schema.d.mts +11 -0
  317. package/dist/plugins/api-key/schema.mjs +130 -0
  318. package/dist/plugins/api-key/schema.mjs.map +1 -0
  319. package/dist/plugins/api-key/types.d.mts +346 -0
  320. package/dist/plugins/bearer/index.d.mts +25 -0
  321. package/dist/plugins/bearer/index.mjs +66 -0
  322. package/dist/plugins/bearer/index.mjs.map +1 -0
  323. package/dist/plugins/captcha/constants.d.mts +10 -0
  324. package/dist/plugins/captcha/constants.mjs +22 -0
  325. package/dist/plugins/captcha/constants.mjs.map +1 -0
  326. package/dist/plugins/captcha/error-codes.mjs +16 -0
  327. package/dist/plugins/captcha/error-codes.mjs.map +1 -0
  328. package/dist/plugins/captcha/index.d.mts +14 -0
  329. package/dist/plugins/captcha/index.mjs +60 -0
  330. package/dist/plugins/captcha/index.mjs.map +1 -0
  331. package/dist/plugins/captcha/types.d.mts +28 -0
  332. package/dist/plugins/captcha/utils.mjs +11 -0
  333. package/dist/plugins/captcha/utils.mjs.map +1 -0
  334. package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
  335. package/dist/plugins/captcha/verify-handlers/captchafox.mjs.map +1 -0
  336. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +25 -0
  337. package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs.map +1 -0
  338. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +29 -0
  339. package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs.map +1 -0
  340. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
  341. package/dist/plugins/captcha/verify-handlers/h-captcha.mjs.map +1 -0
  342. package/dist/plugins/captcha/verify-handlers/index.mjs +6 -0
  343. package/dist/plugins/custom-session/client.d.mts +10 -0
  344. package/dist/plugins/custom-session/client.mjs +11 -0
  345. package/dist/plugins/custom-session/client.mjs.map +1 -0
  346. package/dist/plugins/custom-session/index.d.mts +26 -0
  347. package/dist/plugins/custom-session/index.mjs +70 -0
  348. package/dist/plugins/custom-session/index.mjs.map +1 -0
  349. package/dist/plugins/device-authorization/client.d.mts +5 -0
  350. package/dist/plugins/device-authorization/client.mjs +18 -0
  351. package/dist/plugins/device-authorization/client.mjs.map +1 -0
  352. package/dist/plugins/device-authorization/error-codes.mjs +21 -0
  353. package/dist/plugins/device-authorization/error-codes.mjs.map +1 -0
  354. package/dist/plugins/device-authorization/index.d.mts +28 -0
  355. package/dist/plugins/device-authorization/index.mjs +50 -0
  356. package/dist/plugins/device-authorization/index.mjs.map +1 -0
  357. package/dist/plugins/device-authorization/routes.mjs +510 -0
  358. package/dist/plugins/device-authorization/routes.mjs.map +1 -0
  359. package/dist/plugins/device-authorization/schema.mjs +57 -0
  360. package/dist/plugins/device-authorization/schema.mjs.map +1 -0
  361. package/dist/plugins/email-otp/client.d.mts +7 -0
  362. package/dist/plugins/email-otp/client.mjs +18 -0
  363. package/dist/plugins/email-otp/client.mjs.map +1 -0
  364. package/dist/plugins/email-otp/error-codes.d.mts +5 -0
  365. package/dist/plugins/email-otp/error-codes.mjs +12 -0
  366. package/dist/plugins/email-otp/error-codes.mjs.map +1 -0
  367. package/dist/plugins/email-otp/index.d.mts +14 -0
  368. package/dist/plugins/email-otp/index.mjs +108 -0
  369. package/dist/plugins/email-otp/index.mjs.map +1 -0
  370. package/dist/plugins/email-otp/otp-token.mjs +29 -0
  371. package/dist/plugins/email-otp/otp-token.mjs.map +1 -0
  372. package/dist/plugins/email-otp/routes.mjs +564 -0
  373. package/dist/plugins/email-otp/routes.mjs.map +1 -0
  374. package/dist/plugins/email-otp/types.d.mts +74 -0
  375. package/dist/plugins/email-otp/utils.mjs +17 -0
  376. package/dist/plugins/email-otp/utils.mjs.map +1 -0
  377. package/dist/plugins/generic-oauth/client.d.mts +19 -0
  378. package/dist/plugins/generic-oauth/client.mjs +14 -0
  379. package/dist/plugins/generic-oauth/client.mjs.map +1 -0
  380. package/dist/plugins/generic-oauth/error-codes.d.mts +5 -0
  381. package/dist/plugins/generic-oauth/error-codes.mjs +15 -0
  382. package/dist/plugins/generic-oauth/error-codes.mjs.map +1 -0
  383. package/dist/plugins/generic-oauth/index.d.mts +34 -0
  384. package/dist/plugins/generic-oauth/index.mjs +137 -0
  385. package/dist/plugins/generic-oauth/index.mjs.map +1 -0
  386. package/dist/plugins/generic-oauth/providers/auth0.d.mts +37 -0
  387. package/dist/plugins/generic-oauth/providers/auth0.mjs +62 -0
  388. package/dist/plugins/generic-oauth/providers/auth0.mjs.map +1 -0
  389. package/dist/plugins/generic-oauth/providers/gumroad.d.mts +32 -0
  390. package/dist/plugins/generic-oauth/providers/gumroad.mjs +60 -0
  391. package/dist/plugins/generic-oauth/providers/gumroad.mjs.map +1 -0
  392. package/dist/plugins/generic-oauth/providers/hubspot.d.mts +37 -0
  393. package/dist/plugins/generic-oauth/providers/hubspot.mjs +60 -0
  394. package/dist/plugins/generic-oauth/providers/hubspot.mjs.map +1 -0
  395. package/dist/plugins/generic-oauth/providers/index.d.mts +9 -0
  396. package/dist/plugins/generic-oauth/providers/index.mjs +11 -0
  397. package/dist/plugins/generic-oauth/providers/keycloak.d.mts +37 -0
  398. package/dist/plugins/generic-oauth/providers/keycloak.mjs +62 -0
  399. package/dist/plugins/generic-oauth/providers/keycloak.mjs.map +1 -0
  400. package/dist/plugins/generic-oauth/providers/line.d.mts +55 -0
  401. package/dist/plugins/generic-oauth/providers/line.mjs +91 -0
  402. package/dist/plugins/generic-oauth/providers/line.mjs.map +1 -0
  403. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +37 -0
  404. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +66 -0
  405. package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs.map +1 -0
  406. package/dist/plugins/generic-oauth/providers/okta.d.mts +37 -0
  407. package/dist/plugins/generic-oauth/providers/okta.mjs +62 -0
  408. package/dist/plugins/generic-oauth/providers/okta.mjs.map +1 -0
  409. package/dist/plugins/generic-oauth/providers/patreon.d.mts +30 -0
  410. package/dist/plugins/generic-oauth/providers/patreon.mjs +59 -0
  411. package/dist/plugins/generic-oauth/providers/patreon.mjs.map +1 -0
  412. package/dist/plugins/generic-oauth/providers/slack.d.mts +30 -0
  413. package/dist/plugins/generic-oauth/providers/slack.mjs +61 -0
  414. package/dist/plugins/generic-oauth/providers/slack.mjs.map +1 -0
  415. package/dist/plugins/generic-oauth/routes.mjs +394 -0
  416. package/dist/plugins/generic-oauth/routes.mjs.map +1 -0
  417. package/dist/plugins/generic-oauth/types.d.mts +145 -0
  418. package/dist/plugins/haveibeenpwned/index.d.mts +21 -0
  419. package/dist/plugins/haveibeenpwned/index.mjs +56 -0
  420. package/dist/plugins/haveibeenpwned/index.mjs.map +1 -0
  421. package/dist/plugins/index.d.mts +68 -0
  422. package/dist/plugins/index.mjs +51 -0
  423. package/dist/plugins/jwt/adapter.mjs +27 -0
  424. package/dist/plugins/jwt/adapter.mjs.map +1 -0
  425. package/dist/plugins/jwt/client.d.mts +18 -0
  426. package/dist/plugins/jwt/client.mjs +19 -0
  427. package/dist/plugins/jwt/client.mjs.map +1 -0
  428. package/dist/plugins/jwt/index.d.mts +17 -0
  429. package/dist/plugins/jwt/index.mjs +202 -0
  430. package/dist/plugins/jwt/index.mjs.map +1 -0
  431. package/dist/plugins/jwt/schema.d.mts +5 -0
  432. package/dist/plugins/jwt/schema.mjs +23 -0
  433. package/dist/plugins/jwt/schema.mjs.map +1 -0
  434. package/dist/plugins/jwt/sign.d.mts +57 -0
  435. package/dist/plugins/jwt/sign.mjs +66 -0
  436. package/dist/plugins/jwt/sign.mjs.map +1 -0
  437. package/dist/plugins/jwt/types.d.mts +194 -0
  438. package/dist/plugins/jwt/utils.d.mts +42 -0
  439. package/dist/plugins/jwt/utils.mjs +64 -0
  440. package/dist/plugins/jwt/utils.mjs.map +1 -0
  441. package/dist/plugins/jwt/verify.d.mts +12 -0
  442. package/dist/plugins/jwt/verify.mjs +46 -0
  443. package/dist/plugins/jwt/verify.mjs.map +1 -0
  444. package/dist/plugins/last-login-method/client.d.mts +18 -0
  445. package/dist/plugins/last-login-method/client.mjs +32 -0
  446. package/dist/plugins/last-login-method/client.mjs.map +1 -0
  447. package/dist/plugins/last-login-method/index.d.mts +52 -0
  448. package/dist/plugins/last-login-method/index.mjs +77 -0
  449. package/dist/plugins/last-login-method/index.mjs.map +1 -0
  450. package/dist/plugins/magic-link/client.d.mts +5 -0
  451. package/dist/plugins/magic-link/client.mjs +11 -0
  452. package/dist/plugins/magic-link/client.mjs.map +1 -0
  453. package/dist/plugins/magic-link/index.d.mts +61 -0
  454. package/dist/plugins/magic-link/index.mjs +167 -0
  455. package/dist/plugins/magic-link/index.mjs.map +1 -0
  456. package/dist/plugins/magic-link/utils.mjs +12 -0
  457. package/dist/plugins/magic-link/utils.mjs.map +1 -0
  458. package/dist/plugins/mcp/authorize.mjs +133 -0
  459. package/dist/plugins/mcp/authorize.mjs.map +1 -0
  460. package/dist/plugins/mcp/index.d.mts +46 -0
  461. package/dist/plugins/mcp/index.mjs +717 -0
  462. package/dist/plugins/mcp/index.mjs.map +1 -0
  463. package/dist/plugins/multi-session/client.d.mts +8 -0
  464. package/dist/plugins/multi-session/client.mjs +20 -0
  465. package/dist/plugins/multi-session/client.mjs.map +1 -0
  466. package/dist/plugins/multi-session/error-codes.d.mts +5 -0
  467. package/dist/plugins/multi-session/error-codes.mjs +8 -0
  468. package/dist/plugins/multi-session/error-codes.mjs.map +1 -0
  469. package/dist/plugins/multi-session/index.d.mts +22 -0
  470. package/dist/plugins/multi-session/index.mjs +172 -0
  471. package/dist/plugins/multi-session/index.mjs.map +1 -0
  472. package/dist/plugins/oauth-proxy/index.d.mts +39 -0
  473. package/dist/plugins/oauth-proxy/index.mjs +305 -0
  474. package/dist/plugins/oauth-proxy/index.mjs.map +1 -0
  475. package/dist/plugins/oauth-proxy/utils.mjs +44 -0
  476. package/dist/plugins/oauth-proxy/utils.mjs.map +1 -0
  477. package/dist/plugins/oidc-provider/authorize.mjs +194 -0
  478. package/dist/plugins/oidc-provider/authorize.mjs.map +1 -0
  479. package/dist/plugins/oidc-provider/client.d.mts +8 -0
  480. package/dist/plugins/oidc-provider/client.mjs +11 -0
  481. package/dist/plugins/oidc-provider/client.mjs.map +1 -0
  482. package/dist/plugins/oidc-provider/error.mjs +17 -0
  483. package/dist/plugins/oidc-provider/error.mjs.map +1 -0
  484. package/dist/plugins/oidc-provider/index.d.mts +32 -0
  485. package/dist/plugins/oidc-provider/index.mjs +1093 -0
  486. package/dist/plugins/oidc-provider/index.mjs.map +1 -0
  487. package/dist/plugins/oidc-provider/schema.d.mts +26 -0
  488. package/dist/plugins/oidc-provider/schema.mjs +132 -0
  489. package/dist/plugins/oidc-provider/schema.mjs.map +1 -0
  490. package/dist/plugins/oidc-provider/types.d.mts +517 -0
  491. package/dist/plugins/oidc-provider/utils/prompt.mjs +19 -0
  492. package/dist/plugins/oidc-provider/utils/prompt.mjs.map +1 -0
  493. package/dist/plugins/oidc-provider/utils.mjs +15 -0
  494. package/dist/plugins/oidc-provider/utils.mjs.map +1 -0
  495. package/dist/plugins/one-tap/client.d.mts +159 -0
  496. package/dist/plugins/one-tap/client.mjs +214 -0
  497. package/dist/plugins/one-tap/client.mjs.map +1 -0
  498. package/dist/plugins/one-tap/index.d.mts +27 -0
  499. package/dist/plugins/one-tap/index.mjs +96 -0
  500. package/dist/plugins/one-tap/index.mjs.map +1 -0
  501. package/dist/plugins/one-time-token/client.d.mts +7 -0
  502. package/dist/plugins/one-time-token/client.mjs +11 -0
  503. package/dist/plugins/one-time-token/client.mjs.map +1 -0
  504. package/dist/plugins/one-time-token/index.d.mts +53 -0
  505. package/dist/plugins/one-time-token/index.mjs +82 -0
  506. package/dist/plugins/one-time-token/index.mjs.map +1 -0
  507. package/dist/plugins/one-time-token/utils.mjs +12 -0
  508. package/dist/plugins/one-time-token/utils.mjs.map +1 -0
  509. package/dist/plugins/open-api/generator.d.mts +115 -0
  510. package/dist/plugins/open-api/generator.mjs +315 -0
  511. package/dist/plugins/open-api/generator.mjs.map +1 -0
  512. package/dist/plugins/open-api/index.d.mts +45 -0
  513. package/dist/plugins/open-api/index.mjs +67 -0
  514. package/dist/plugins/open-api/index.mjs.map +1 -0
  515. package/dist/plugins/open-api/logo.mjs +15 -0
  516. package/dist/plugins/open-api/logo.mjs.map +1 -0
  517. package/dist/plugins/organization/access/index.d.mts +2 -0
  518. package/dist/plugins/organization/access/index.mjs +3 -0
  519. package/dist/plugins/organization/access/statement.d.mts +249 -0
  520. package/dist/plugins/organization/access/statement.mjs +81 -0
  521. package/dist/plugins/organization/access/statement.mjs.map +1 -0
  522. package/dist/plugins/organization/adapter.d.mts +205 -0
  523. package/dist/plugins/organization/adapter.mjs +624 -0
  524. package/dist/plugins/organization/adapter.mjs.map +1 -0
  525. package/dist/plugins/organization/call.mjs +19 -0
  526. package/dist/plugins/organization/call.mjs.map +1 -0
  527. package/dist/plugins/organization/client.d.mts +151 -0
  528. package/dist/plugins/organization/client.mjs +107 -0
  529. package/dist/plugins/organization/client.mjs.map +1 -0
  530. package/dist/plugins/organization/error-codes.d.mts +5 -0
  531. package/dist/plugins/organization/error-codes.mjs +65 -0
  532. package/dist/plugins/organization/error-codes.mjs.map +1 -0
  533. package/dist/plugins/organization/has-permission.mjs +35 -0
  534. package/dist/plugins/organization/has-permission.mjs.map +1 -0
  535. package/dist/plugins/organization/index.d.mts +5 -0
  536. package/dist/plugins/organization/index.mjs +4 -0
  537. package/dist/plugins/organization/organization.d.mts +252 -0
  538. package/dist/plugins/organization/organization.mjs +428 -0
  539. package/dist/plugins/organization/organization.mjs.map +1 -0
  540. package/dist/plugins/organization/permission.d.mts +26 -0
  541. package/dist/plugins/organization/permission.mjs +16 -0
  542. package/dist/plugins/organization/permission.mjs.map +1 -0
  543. package/dist/plugins/organization/routes/crud-access-control.d.mts +11 -0
  544. package/dist/plugins/organization/routes/crud-access-control.mjs +656 -0
  545. package/dist/plugins/organization/routes/crud-access-control.mjs.map +1 -0
  546. package/dist/plugins/organization/routes/crud-invites.d.mts +16 -0
  547. package/dist/plugins/organization/routes/crud-invites.mjs +555 -0
  548. package/dist/plugins/organization/routes/crud-invites.mjs.map +1 -0
  549. package/dist/plugins/organization/routes/crud-members.d.mts +13 -0
  550. package/dist/plugins/organization/routes/crud-members.mjs +473 -0
  551. package/dist/plugins/organization/routes/crud-members.mjs.map +1 -0
  552. package/dist/plugins/organization/routes/crud-org.d.mts +13 -0
  553. package/dist/plugins/organization/routes/crud-org.mjs +447 -0
  554. package/dist/plugins/organization/routes/crud-org.mjs.map +1 -0
  555. package/dist/plugins/organization/routes/crud-team.d.mts +15 -0
  556. package/dist/plugins/organization/routes/crud-team.mjs +676 -0
  557. package/dist/plugins/organization/routes/crud-team.mjs.map +1 -0
  558. package/dist/plugins/organization/schema.d.mts +376 -0
  559. package/dist/plugins/organization/schema.mjs +68 -0
  560. package/dist/plugins/organization/schema.mjs.map +1 -0
  561. package/dist/plugins/organization/types.d.mts +733 -0
  562. package/dist/plugins/phone-number/client.d.mts +8 -0
  563. package/dist/plugins/phone-number/client.mjs +20 -0
  564. package/dist/plugins/phone-number/client.mjs.map +1 -0
  565. package/dist/plugins/phone-number/error-codes.d.mts +5 -0
  566. package/dist/plugins/phone-number/error-codes.mjs +21 -0
  567. package/dist/plugins/phone-number/error-codes.mjs.map +1 -0
  568. package/dist/plugins/phone-number/index.d.mts +14 -0
  569. package/dist/plugins/phone-number/index.mjs +49 -0
  570. package/dist/plugins/phone-number/index.mjs.map +1 -0
  571. package/dist/plugins/phone-number/routes.mjs +459 -0
  572. package/dist/plugins/phone-number/routes.mjs.map +1 -0
  573. package/dist/plugins/phone-number/schema.d.mts +5 -0
  574. package/dist/plugins/phone-number/schema.mjs +20 -0
  575. package/dist/plugins/phone-number/schema.mjs.map +1 -0
  576. package/dist/plugins/phone-number/types.d.mts +118 -0
  577. package/dist/plugins/siwe/client.d.mts +5 -0
  578. package/dist/plugins/siwe/client.mjs +11 -0
  579. package/dist/plugins/siwe/client.mjs.map +1 -0
  580. package/dist/plugins/siwe/error-codes.mjs +13 -0
  581. package/dist/plugins/siwe/error-codes.mjs.map +1 -0
  582. package/dist/plugins/siwe/index.d.mts +26 -0
  583. package/dist/plugins/siwe/index.mjs +261 -0
  584. package/dist/plugins/siwe/index.mjs.map +1 -0
  585. package/dist/plugins/siwe/schema.d.mts +5 -0
  586. package/dist/plugins/siwe/schema.mjs +32 -0
  587. package/dist/plugins/siwe/schema.mjs.map +1 -0
  588. package/dist/plugins/siwe/types.d.mts +44 -0
  589. package/dist/plugins/two-factor/backup-codes/index.d.mts +91 -0
  590. package/dist/plugins/two-factor/backup-codes/index.mjs +277 -0
  591. package/dist/plugins/two-factor/backup-codes/index.mjs.map +1 -0
  592. package/dist/plugins/two-factor/client.d.mts +17 -0
  593. package/dist/plugins/two-factor/client.mjs +37 -0
  594. package/dist/plugins/two-factor/client.mjs.map +1 -0
  595. package/dist/plugins/two-factor/constant.mjs +8 -0
  596. package/dist/plugins/two-factor/constant.mjs.map +1 -0
  597. package/dist/plugins/two-factor/error-code.d.mts +5 -0
  598. package/dist/plugins/two-factor/error-code.mjs +18 -0
  599. package/dist/plugins/two-factor/error-code.mjs.map +1 -0
  600. package/dist/plugins/two-factor/index.d.mts +19 -0
  601. package/dist/plugins/two-factor/index.mjs +207 -0
  602. package/dist/plugins/two-factor/index.mjs.map +1 -0
  603. package/dist/plugins/two-factor/otp/index.d.mts +96 -0
  604. package/dist/plugins/two-factor/otp/index.mjs +199 -0
  605. package/dist/plugins/two-factor/otp/index.mjs.map +1 -0
  606. package/dist/plugins/two-factor/schema.d.mts +5 -0
  607. package/dist/plugins/two-factor/schema.mjs +36 -0
  608. package/dist/plugins/two-factor/schema.mjs.map +1 -0
  609. package/dist/plugins/two-factor/totp/index.d.mts +81 -0
  610. package/dist/plugins/two-factor/totp/index.mjs +157 -0
  611. package/dist/plugins/two-factor/totp/index.mjs.map +1 -0
  612. package/dist/plugins/two-factor/types.d.mts +65 -0
  613. package/dist/plugins/two-factor/utils.mjs +12 -0
  614. package/dist/plugins/two-factor/utils.mjs.map +1 -0
  615. package/dist/plugins/two-factor/verify-two-factor.mjs +76 -0
  616. package/dist/plugins/two-factor/verify-two-factor.mjs.map +1 -0
  617. package/dist/plugins/username/client.d.mts +7 -0
  618. package/dist/plugins/username/client.mjs +18 -0
  619. package/dist/plugins/username/client.mjs.map +1 -0
  620. package/dist/plugins/username/error-codes.d.mts +5 -0
  621. package/dist/plugins/username/error-codes.mjs +17 -0
  622. package/dist/plugins/username/error-codes.mjs.map +1 -0
  623. package/dist/plugins/username/index.d.mts +74 -0
  624. package/dist/plugins/username/index.mjs +237 -0
  625. package/dist/plugins/username/index.mjs.map +1 -0
  626. package/dist/plugins/username/schema.d.mts +9 -0
  627. package/dist/plugins/username/schema.mjs +26 -0
  628. package/dist/plugins/username/schema.mjs.map +1 -0
  629. package/dist/social-providers/index.d.mts +1 -0
  630. package/dist/social-providers/index.mjs +3 -0
  631. package/dist/state.d.mts +42 -0
  632. package/dist/state.mjs +107 -0
  633. package/dist/state.mjs.map +1 -0
  634. package/dist/test-utils/headers.d.mts +9 -0
  635. package/dist/test-utils/headers.mjs +24 -0
  636. package/dist/test-utils/headers.mjs.map +1 -0
  637. package/dist/test-utils/index.d.mts +3 -0
  638. package/dist/test-utils/index.mjs +4 -0
  639. package/dist/test-utils/test-instance.d.mts +181 -0
  640. package/dist/test-utils/test-instance.mjs +210 -0
  641. package/dist/test-utils/test-instance.mjs.map +1 -0
  642. package/dist/types/adapter.d.mts +24 -0
  643. package/dist/types/api.d.mts +29 -0
  644. package/dist/types/auth.d.mts +30 -0
  645. package/dist/types/helper.d.mts +21 -0
  646. package/dist/types/index.d.mts +11 -0
  647. package/dist/types/index.mjs +1 -0
  648. package/dist/types/models.d.mts +17 -0
  649. package/dist/types/plugins.d.mts +16 -0
  650. package/dist/utils/boolean.mjs +8 -0
  651. package/dist/utils/boolean.mjs.map +1 -0
  652. package/dist/utils/constants.mjs +6 -0
  653. package/dist/utils/constants.mjs.map +1 -0
  654. package/dist/utils/date.mjs +8 -0
  655. package/dist/utils/date.mjs.map +1 -0
  656. package/dist/utils/get-request-ip.d.mts +7 -0
  657. package/dist/utils/get-request-ip.mjs +23 -0
  658. package/dist/utils/get-request-ip.mjs.map +1 -0
  659. package/dist/utils/hashing.mjs +21 -0
  660. package/dist/utils/hashing.mjs.map +1 -0
  661. package/dist/utils/hide-metadata.d.mts +7 -0
  662. package/dist/utils/hide-metadata.mjs +6 -0
  663. package/dist/utils/hide-metadata.mjs.map +1 -0
  664. package/dist/utils/index.d.mts +3 -0
  665. package/dist/utils/index.mjs +5 -0
  666. package/dist/utils/is-api-error.d.mts +7 -0
  667. package/dist/utils/is-api-error.mjs +11 -0
  668. package/dist/utils/is-api-error.mjs.map +1 -0
  669. package/dist/utils/is-atom.mjs +8 -0
  670. package/dist/utils/is-atom.mjs.map +1 -0
  671. package/dist/utils/is-promise.mjs +8 -0
  672. package/dist/utils/is-promise.mjs.map +1 -0
  673. package/dist/utils/middleware-response.mjs +6 -0
  674. package/dist/utils/middleware-response.mjs.map +1 -0
  675. package/dist/utils/password.mjs +26 -0
  676. package/dist/utils/password.mjs.map +1 -0
  677. package/dist/utils/plugin-helper.mjs +17 -0
  678. package/dist/utils/plugin-helper.mjs.map +1 -0
  679. package/dist/utils/shim.mjs +24 -0
  680. package/dist/utils/shim.mjs.map +1 -0
  681. package/dist/utils/time.d.mts +49 -0
  682. package/dist/utils/time.mjs +100 -0
  683. package/dist/utils/time.mjs.map +1 -0
  684. package/dist/utils/url.mjs +92 -0
  685. package/dist/utils/url.mjs.map +1 -0
  686. package/dist/utils/wildcard.mjs +108 -0
  687. package/dist/utils/wildcard.mjs.map +1 -0
  688. package/package.json +601 -0
@@ -0,0 +1,130 @@
1
+ import { parseJSON } from "../../client/parser.mjs";
2
+
3
+ //#region src/plugins/api-key/schema.ts
4
+ const apiKeySchema = ({ timeWindow, rateLimitMax }) => ({ apikey: { fields: {
5
+ name: {
6
+ type: "string",
7
+ required: false,
8
+ input: false
9
+ },
10
+ start: {
11
+ type: "string",
12
+ required: false,
13
+ input: false
14
+ },
15
+ prefix: {
16
+ type: "string",
17
+ required: false,
18
+ input: false
19
+ },
20
+ key: {
21
+ type: "string",
22
+ required: true,
23
+ input: false,
24
+ index: true
25
+ },
26
+ userId: {
27
+ type: "string",
28
+ references: {
29
+ model: "user",
30
+ field: "id",
31
+ onDelete: "cascade"
32
+ },
33
+ required: true,
34
+ input: false,
35
+ index: true
36
+ },
37
+ refillInterval: {
38
+ type: "number",
39
+ required: false,
40
+ input: false
41
+ },
42
+ refillAmount: {
43
+ type: "number",
44
+ required: false,
45
+ input: false
46
+ },
47
+ lastRefillAt: {
48
+ type: "date",
49
+ required: false,
50
+ input: false
51
+ },
52
+ enabled: {
53
+ type: "boolean",
54
+ required: false,
55
+ input: false,
56
+ defaultValue: true
57
+ },
58
+ rateLimitEnabled: {
59
+ type: "boolean",
60
+ required: false,
61
+ input: false,
62
+ defaultValue: true
63
+ },
64
+ rateLimitTimeWindow: {
65
+ type: "number",
66
+ required: false,
67
+ input: false,
68
+ defaultValue: timeWindow
69
+ },
70
+ rateLimitMax: {
71
+ type: "number",
72
+ required: false,
73
+ input: false,
74
+ defaultValue: rateLimitMax
75
+ },
76
+ requestCount: {
77
+ type: "number",
78
+ required: false,
79
+ input: false,
80
+ defaultValue: 0
81
+ },
82
+ remaining: {
83
+ type: "number",
84
+ required: false,
85
+ input: false
86
+ },
87
+ lastRequest: {
88
+ type: "date",
89
+ required: false,
90
+ input: false
91
+ },
92
+ expiresAt: {
93
+ type: "date",
94
+ required: false,
95
+ input: false
96
+ },
97
+ createdAt: {
98
+ type: "date",
99
+ required: true,
100
+ input: false
101
+ },
102
+ updatedAt: {
103
+ type: "date",
104
+ required: true,
105
+ input: false
106
+ },
107
+ permissions: {
108
+ type: "string",
109
+ required: false,
110
+ input: false
111
+ },
112
+ metadata: {
113
+ type: "string",
114
+ required: false,
115
+ input: true,
116
+ transform: {
117
+ input(value) {
118
+ return JSON.stringify(value);
119
+ },
120
+ output(value) {
121
+ if (!value) return null;
122
+ return parseJSON(value);
123
+ }
124
+ }
125
+ }
126
+ } } });
127
+
128
+ //#endregion
129
+ export { apiKeySchema };
130
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","names":[],"sources":["../../../src/plugins/api-key/schema.ts"],"sourcesContent":["import type { BetterAuthPluginDBSchema } from \"@better-auth/core/db\";\nimport { parseJSON } from \"../../client/parser\";\n\nexport const apiKeySchema = ({\n\ttimeWindow,\n\trateLimitMax,\n}: {\n\ttimeWindow: number;\n\trateLimitMax: number;\n}) =>\n\t({\n\t\tapikey: {\n\t\t\tfields: {\n\t\t\t\t/**\n\t\t\t\t * The name of the key.\n\t\t\t\t */\n\t\t\t\tname: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Shows the first few characters of the API key\n\t\t\t\t * This allows you to show those few characters in the UI to make it easier for users to identify the API key.\n\t\t\t\t */\n\t\t\t\tstart: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The prefix of the key.\n\t\t\t\t */\n\t\t\t\tprefix: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The hashed key value.\n\t\t\t\t */\n\t\t\t\tkey: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tindex: true,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The user id of the user who created the key.\n\t\t\t\t */\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\treferences: { model: \"user\", field: \"id\", onDelete: \"cascade\" },\n\t\t\t\t\trequired: true,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tindex: true,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The interval to refill the key in milliseconds.\n\t\t\t\t */\n\t\t\t\trefillInterval: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The amount to refill the remaining count of the key.\n\t\t\t\t */\n\t\t\t\trefillAmount: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The date and time when the key was last refilled.\n\t\t\t\t */\n\t\t\t\tlastRefillAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Whether the key is enabled.\n\t\t\t\t */\n\t\t\t\tenabled: {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tdefaultValue: true,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Whether the key has rate limiting enabled.\n\t\t\t\t */\n\t\t\t\trateLimitEnabled: {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tdefaultValue: true,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The time window in milliseconds for the rate limit.\n\t\t\t\t */\n\t\t\t\trateLimitTimeWindow: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tdefaultValue: timeWindow,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The maximum number of requests allowed within the `rateLimitTimeWindow`.\n\t\t\t\t */\n\t\t\t\trateLimitMax: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tdefaultValue: rateLimitMax,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The number of requests made within the rate limit time window\n\t\t\t\t */\n\t\t\t\trequestCount: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t\tdefaultValue: 0,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The remaining number of requests before the key is revoked.\n\t\t\t\t *\n\t\t\t\t * If this is null, then the key is not revoked.\n\t\t\t\t *\n\t\t\t\t * If `refillInterval` & `refillAmount` are provided, than this will refill accordingly.\n\t\t\t\t */\n\t\t\t\tremaining: {\n\t\t\t\t\ttype: \"number\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The date and time of the last request made to the key.\n\t\t\t\t */\n\t\t\t\tlastRequest: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The date and time when the key will expire.\n\t\t\t\t */\n\t\t\t\texpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The date and time when the key was created.\n\t\t\t\t */\n\t\t\t\tcreatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The date and time when the key was last updated.\n\t\t\t\t */\n\t\t\t\tupdatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * The permissions of the key.\n\t\t\t\t */\n\t\t\t\tpermissions: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: false,\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Any additional metadata you want to store with the key.\n\t\t\t\t */\n\t\t\t\tmetadata: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t\tinput: true,\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\tinput(value) {\n\t\t\t\t\t\t\treturn JSON.stringify(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\toutput(value) {\n\t\t\t\t\t\t\tif (!value) return null;\n\t\t\t\t\t\t\treturn parseJSON<any>(value as string);\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}) satisfies BetterAuthPluginDBSchema;\n"],"mappings":";;;AAGA,MAAa,gBAAgB,EAC5B,YACA,oBAKC,EACA,QAAQ,EACP,QAAQ;CAIP,MAAM;EACL,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAKD,OAAO;EACN,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,QAAQ;EACP,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,KAAK;EACJ,MAAM;EACN,UAAU;EACV,OAAO;EACP,OAAO;EACP;CAID,QAAQ;EACP,MAAM;EACN,YAAY;GAAE,OAAO;GAAQ,OAAO;GAAM,UAAU;GAAW;EAC/D,UAAU;EACV,OAAO;EACP,OAAO;EACP;CAID,gBAAgB;EACf,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,cAAc;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,cAAc;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,SAAS;EACR,MAAM;EACN,UAAU;EACV,OAAO;EACP,cAAc;EACd;CAID,kBAAkB;EACjB,MAAM;EACN,UAAU;EACV,OAAO;EACP,cAAc;EACd;CAID,qBAAqB;EACpB,MAAM;EACN,UAAU;EACV,OAAO;EACP,cAAc;EACd;CAID,cAAc;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,cAAc;EACd;CAID,cAAc;EACb,MAAM;EACN,UAAU;EACV,OAAO;EACP,cAAc;EACd;CAQD,WAAW;EACV,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,aAAa;EACZ,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,WAAW;EACV,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,WAAW;EACV,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,WAAW;EACV,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,aAAa;EACZ,MAAM;EACN,UAAU;EACV,OAAO;EACP;CAID,UAAU;EACT,MAAM;EACN,UAAU;EACV,OAAO;EACP,WAAW;GACV,MAAM,OAAO;AACZ,WAAO,KAAK,UAAU,MAAM;;GAE7B,OAAO,OAAO;AACb,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,UAAe,MAAgB;;GAEvC;EACD;CACD,EACD,EACD"}
@@ -0,0 +1,346 @@
1
+ import { InferOptionSchema } from "../../types/plugins.mjs";
2
+ import "../../types/index.mjs";
3
+ import { Statements } from "../access/types.mjs";
4
+ import "../access/index.mjs";
5
+ import { apiKeySchema } from "./schema.mjs";
6
+ import { Awaitable, GenericEndpointContext, HookEndpointContext } from "@better-auth/core";
7
+
8
+ //#region src/plugins/api-key/types.d.ts
9
+ interface ApiKeyOptions {
10
+ /**
11
+ * The header name to check for API key
12
+ * @default "x-api-key"
13
+ */
14
+ apiKeyHeaders?: (string | string[]) | undefined;
15
+ /**
16
+ * Disable hashing of the API key.
17
+ *
18
+ * ⚠️ Security Warning: It's strongly recommended to not disable hashing.
19
+ * Storing API keys in plaintext makes them vulnerable to database breaches, potentially exposing all your users' API keys.
20
+ *
21
+ * @default false
22
+ */
23
+ disableKeyHashing?: boolean | undefined;
24
+ /**
25
+ * The function to get the API key from the context
26
+ */
27
+ customAPIKeyGetter?: ((ctx: HookEndpointContext) => string | null) | undefined;
28
+ /**
29
+ * A custom function to validate the API key
30
+ */
31
+ customAPIKeyValidator?: ((options: {
32
+ ctx: GenericEndpointContext;
33
+ key: string;
34
+ }) => Awaitable<boolean>) | undefined;
35
+ /**
36
+ * custom key generation function
37
+ */
38
+ customKeyGenerator?: (options: {
39
+ /**
40
+ * The length of the API key to generate
41
+ */
42
+ length: number;
43
+ /**
44
+ * The prefix of the API key to generate
45
+ */
46
+ prefix: string | undefined;
47
+ }) => Awaitable<string>;
48
+ /**
49
+ * The configuration for storing the starting characters of the API key in the database.
50
+ *
51
+ * Useful if you want to display the starting characters of an API key in the UI.
52
+ */
53
+ startingCharactersConfig?: {
54
+ /**
55
+ * Whether to store the starting characters in the database. If false, we will set `start` to `null`.
56
+ *
57
+ * @default true
58
+ */
59
+ shouldStore?: boolean;
60
+ /**
61
+ * The length of the starting characters to store in the database.
62
+ *
63
+ * This includes the prefix length.
64
+ *
65
+ * @default 6
66
+ */
67
+ charactersLength?: number;
68
+ } | undefined;
69
+ /**
70
+ * The length of the API key. Longer is better. Default is 64. (Doesn't include the prefix length)
71
+ * @default 64
72
+ */
73
+ defaultKeyLength?: number | undefined;
74
+ /**
75
+ * The prefix of the API key.
76
+ *
77
+ * Note: We recommend you append an underscore to the prefix to make the prefix more identifiable. (eg `hello_`)
78
+ */
79
+ defaultPrefix?: string | undefined;
80
+ /**
81
+ * The maximum length of the prefix.
82
+ *
83
+ * @default 32
84
+ */
85
+ maximumPrefixLength?: number | undefined;
86
+ /**
87
+ * Whether to require a name for the API key.
88
+ *
89
+ * @default false
90
+ */
91
+ requireName?: boolean | undefined;
92
+ /**
93
+ * The minimum length of the prefix.
94
+ *
95
+ * @default 1
96
+ */
97
+ minimumPrefixLength?: number | undefined;
98
+ /**
99
+ * The maximum length of the name.
100
+ *
101
+ * @default 32
102
+ */
103
+ maximumNameLength?: number | undefined;
104
+ /**
105
+ * The minimum length of the name.
106
+ *
107
+ * @default 1
108
+ */
109
+ minimumNameLength?: number | undefined;
110
+ /**
111
+ * Whether to enable metadata for an API key.
112
+ *
113
+ * @default false
114
+ */
115
+ enableMetadata?: boolean | undefined;
116
+ /**
117
+ * Customize the key expiration.
118
+ */
119
+ keyExpiration?: {
120
+ /**
121
+ * The default expires time in milliseconds.
122
+ *
123
+ * If `null`, then there will be no expiration time.
124
+ *
125
+ * @default null
126
+ */
127
+ defaultExpiresIn?: number | null;
128
+ /**
129
+ * Whether to disable the expires time passed from the client.
130
+ *
131
+ * If `true`, the expires time will be based on the default values.
132
+ *
133
+ * @default false
134
+ */
135
+ disableCustomExpiresTime?: boolean;
136
+ /**
137
+ * The minimum expiresIn value allowed to be set from the client. in days.
138
+ *
139
+ * @default 1
140
+ */
141
+ minExpiresIn?: number;
142
+ /**
143
+ * The maximum expiresIn value allowed to be set from the client. in days.
144
+ *
145
+ * @default 365
146
+ */
147
+ maxExpiresIn?: number;
148
+ } | undefined;
149
+ /**
150
+ * Default rate limiting options.
151
+ */
152
+ rateLimit?: {
153
+ /**
154
+ * Whether to enable rate limiting.
155
+ *
156
+ * @default true
157
+ */
158
+ enabled?: boolean;
159
+ /**
160
+ * The duration in milliseconds where each request is counted.
161
+ *
162
+ * Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset.
163
+ *
164
+ * @default 1000 * 60 * 60 * 24 // 1 day
165
+ */
166
+ timeWindow?: number;
167
+ /**
168
+ * Maximum amount of requests allowed within a window
169
+ *
170
+ * Once the `maxRequests` is reached, the request will be rejected until the `timeWindow` has passed, at which point the `timeWindow` will be reset.
171
+ *
172
+ * @default 10 // 10 requests per day
173
+ */
174
+ maxRequests?: number;
175
+ } | undefined;
176
+ /**
177
+ * custom schema for the API key plugin
178
+ */
179
+ schema?: InferOptionSchema<ReturnType<typeof apiKeySchema>> | undefined;
180
+ /**
181
+ * An API Key can represent a valid session, so we automatically mock a session for the user if we find a valid API key in the request headers.
182
+ *
183
+ * ⚠︎ This is not recommended for production use, as it can lead to security issues.
184
+ * @default false
185
+ */
186
+ enableSessionForAPIKeys?: boolean | undefined;
187
+ /**
188
+ * Permissions for the API key.
189
+ */
190
+ permissions?: {
191
+ /**
192
+ * The default permissions for the API key.
193
+ */
194
+ defaultPermissions?: Statements | ((userId: string, ctx: GenericEndpointContext) => Awaitable<Statements>);
195
+ } | undefined;
196
+ /**
197
+ * Storage backend for API keys.
198
+ *
199
+ * - `"database"`: Store API keys in the database adapter (default)
200
+ * - `"secondary-storage"`: Store API keys in the configured secondary storage (e.g., Redis)
201
+ *
202
+ * @default "database"
203
+ */
204
+ storage?: "database" | "secondary-storage" | undefined;
205
+ /**
206
+ * When `storage` is `"secondary-storage"`, enable fallback to database if key is not found in secondary storage.
207
+ *
208
+ * Useful for gradual migration from database to secondary storage.
209
+ *
210
+ * @default false
211
+ */
212
+ fallbackToDatabase?: boolean | undefined;
213
+ /**
214
+ * Custom storage methods for API keys.
215
+ *
216
+ * If provided, these methods will be used instead of `ctx.context.secondaryStorage`.
217
+ * Custom methods take precedence over global secondary storage.
218
+ *
219
+ * Useful when you want to use a different storage backend specifically for API keys,
220
+ * or when you need custom logic for storage operations.
221
+ */
222
+ customStorage?: {
223
+ /**
224
+ * Get a value from storage
225
+ */
226
+ get: (key: string) => Awaitable<unknown>;
227
+ /**
228
+ * Set a value in storage
229
+ */
230
+ set: (key: string, value: string, ttl?: number | undefined) => Awaitable<void | null | unknown>;
231
+ /**
232
+ * Delete a value from storage
233
+ */
234
+ delete: (key: string) => Awaitable<void | null | string>;
235
+ } | undefined;
236
+ /**
237
+ * Defer non-critical updates (rate limiting counters, timestamps, remaining count)
238
+ * to run after the response is sent using the global `advanced.backgroundTasks` handler.
239
+ *
240
+ * Requires `advanced.backgroundTasks.handler` to be configured in the main auth options.
241
+ *
242
+ * ⚠️ Warning: Enabling this introduces eventual consistency where the response
243
+ * returns optimistic data before the database is updated. If the deferred update
244
+ * fails, the database will have stale values. Only enable if your application
245
+ * can tolerate this trade-off for improved latency.
246
+ *
247
+ * @default false
248
+ */
249
+ deferUpdates?: boolean | undefined;
250
+ }
251
+ type ApiKey = {
252
+ /**
253
+ * ID
254
+ */
255
+ id: string;
256
+ /**
257
+ * The name of the key
258
+ */
259
+ name: string | null;
260
+ /**
261
+ * Shows the first few characters of the API key, including the prefix.
262
+ * This allows you to show those few characters in the UI to make it easier for users to identify the API key.
263
+ */
264
+ start: string | null;
265
+ /**
266
+ * The API Key prefix. Stored as plain text.
267
+ */
268
+ prefix: string | null;
269
+ /**
270
+ * The hashed API key value
271
+ */
272
+ key: string;
273
+ /**
274
+ * The owner of the user id
275
+ */
276
+ userId: string;
277
+ /**
278
+ * The interval in milliseconds between refills of the `remaining` count
279
+ *
280
+ * @example 3600000 // refill every hour (3600000ms = 1h)
281
+ */
282
+ refillInterval: number | null;
283
+ /**
284
+ * The amount to refill
285
+ */
286
+ refillAmount: number | null;
287
+ /**
288
+ * The last refill date
289
+ */
290
+ lastRefillAt: Date | null;
291
+ /**
292
+ * Sets if key is enabled or disabled
293
+ *
294
+ * @default true
295
+ */
296
+ enabled: boolean;
297
+ /**
298
+ * Whether the key has rate limiting enabled.
299
+ */
300
+ rateLimitEnabled: boolean;
301
+ /**
302
+ * The duration in milliseconds
303
+ */
304
+ rateLimitTimeWindow: number | null;
305
+ /**
306
+ * Maximum amount of requests allowed within a window
307
+ */
308
+ rateLimitMax: number | null;
309
+ /**
310
+ * The number of requests made within the rate limit time window
311
+ */
312
+ requestCount: number;
313
+ /**
314
+ * Remaining requests (every time API key is used this should updated and should be updated on refill as well)
315
+ */
316
+ remaining: number | null;
317
+ /**
318
+ * When last request occurred
319
+ */
320
+ lastRequest: Date | null;
321
+ /**
322
+ * Expiry date of a key
323
+ */
324
+ expiresAt: Date | null;
325
+ /**
326
+ * created at
327
+ */
328
+ createdAt: Date;
329
+ /**
330
+ * updated at
331
+ */
332
+ updatedAt: Date;
333
+ /**
334
+ * Extra metadata about the apiKey
335
+ */
336
+ metadata: Record<string, any> | null;
337
+ /**
338
+ * Permissions for the API key
339
+ */
340
+ permissions?: ({
341
+ [key: string]: string[];
342
+ } | null) | undefined;
343
+ };
344
+ //#endregion
345
+ export { ApiKey, ApiKeyOptions };
346
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1,25 @@
1
+ //#region src/plugins/bearer/index.d.ts
2
+ declare module "@better-auth/core" {
3
+ interface BetterAuthPluginRegistry<AuthOptions, Options> {
4
+ bearer: {
5
+ creator: typeof bearer;
6
+ };
7
+ }
8
+ }
9
+ interface BearerOptions {
10
+ /**
11
+ * If true, only signed tokens
12
+ * will be converted to session
13
+ * cookies
14
+ *
15
+ * @default false
16
+ */
17
+ requireSignature?: boolean | undefined;
18
+ }
19
+ /**
20
+ * Converts bearer token to session cookie
21
+ */
22
+ declare const bearer: (options?: BearerOptions | undefined) => BetterAuthPlugin;
23
+ //#endregion
24
+ export { BearerOptions, bearer };
25
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,66 @@
1
+ import { parseSetCookieHeader } from "../../cookies/cookie-utils.mjs";
2
+ import "../../cookies/index.mjs";
3
+ import { serializeSignedCookie } from "better-call";
4
+ import { createAuthMiddleware } from "@better-auth/core/api";
5
+ import { createHMAC } from "@better-auth/utils/hmac";
6
+
7
+ //#region src/plugins/bearer/index.ts
8
+ /**
9
+ * Converts bearer token to session cookie
10
+ */
11
+ const bearer = (options) => {
12
+ return {
13
+ id: "bearer",
14
+ hooks: {
15
+ before: [{
16
+ matcher(context) {
17
+ return Boolean(context.request?.headers.get("authorization") || context.headers?.get("authorization"));
18
+ },
19
+ handler: createAuthMiddleware(async (c) => {
20
+ const token = c.request?.headers.get("authorization")?.replace("Bearer ", "") || c.headers?.get("Authorization")?.replace("Bearer ", "");
21
+ if (!token) return;
22
+ let signedToken = "";
23
+ if (token.includes(".")) signedToken = token.replace("=", "");
24
+ else {
25
+ if (options?.requireSignature) return;
26
+ signedToken = (await serializeSignedCookie("", token, c.context.secret)).replace("=", "");
27
+ }
28
+ try {
29
+ const decodedToken = decodeURIComponent(signedToken);
30
+ if (!await createHMAC("SHA-256", "base64urlnopad").verify(c.context.secret, decodedToken.split(".")[0], decodedToken.split(".")[1])) return;
31
+ } catch {
32
+ return;
33
+ }
34
+ const existingHeaders = c.request?.headers || c.headers;
35
+ const headers = new Headers({ ...Object.fromEntries(existingHeaders?.entries()) });
36
+ headers.append("cookie", `${c.context.authCookies.sessionToken.name}=${signedToken}`);
37
+ return { context: { headers } };
38
+ })
39
+ }],
40
+ after: [{
41
+ matcher(context) {
42
+ return true;
43
+ },
44
+ handler: createAuthMiddleware(async (ctx) => {
45
+ const setCookie = ctx.context.responseHeaders?.get("set-cookie");
46
+ if (!setCookie) return;
47
+ const parsedCookies = parseSetCookieHeader(setCookie);
48
+ const cookieName = ctx.context.authCookies.sessionToken.name;
49
+ const sessionCookie = parsedCookies.get(cookieName);
50
+ if (!sessionCookie || !sessionCookie.value || sessionCookie["max-age"] === 0) return;
51
+ const token = sessionCookie.value;
52
+ const exposedHeaders = ctx.context.responseHeaders?.get("access-control-expose-headers") || "";
53
+ const headersSet = new Set(exposedHeaders.split(",").map((header) => header.trim()).filter(Boolean));
54
+ headersSet.add("set-auth-token");
55
+ ctx.setHeader("set-auth-token", token);
56
+ ctx.setHeader("Access-Control-Expose-Headers", Array.from(headersSet).join(", "));
57
+ })
58
+ }]
59
+ },
60
+ options
61
+ };
62
+ };
63
+
64
+ //#endregion
65
+ export { bearer };
66
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/bearer/index.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"@better-auth/core\";\nimport { createAuthMiddleware } from \"@better-auth/core/api\";\nimport { createHMAC } from \"@better-auth/utils/hmac\";\nimport { serializeSignedCookie } from \"better-call\";\nimport { parseSetCookieHeader } from \"../../cookies\";\n\ndeclare module \"@better-auth/core\" {\n\tinterface BetterAuthPluginRegistry<AuthOptions, Options> {\n\t\tbearer: {\n\t\t\tcreator: typeof bearer;\n\t\t};\n\t}\n}\n\nexport interface BearerOptions {\n\t/**\n\t * If true, only signed tokens\n\t * will be converted to session\n\t * cookies\n\t *\n\t * @default false\n\t */\n\trequireSignature?: boolean | undefined;\n}\n\n/**\n * Converts bearer token to session cookie\n */\nexport const bearer = (options?: BearerOptions | undefined) => {\n\treturn {\n\t\tid: \"bearer\",\n\t\thooks: {\n\t\t\tbefore: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(context) {\n\t\t\t\t\t\treturn Boolean(\n\t\t\t\t\t\t\tcontext.request?.headers.get(\"authorization\") ||\n\t\t\t\t\t\t\t\tcontext.headers?.get(\"authorization\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (c) => {\n\t\t\t\t\t\tconst token =\n\t\t\t\t\t\t\tc.request?.headers.get(\"authorization\")?.replace(\"Bearer \", \"\") ||\n\t\t\t\t\t\t\tc.headers?.get(\"Authorization\")?.replace(\"Bearer \", \"\");\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet signedToken = \"\";\n\t\t\t\t\t\tif (token.includes(\".\")) {\n\t\t\t\t\t\t\tsignedToken = token.replace(\"=\", \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (options?.requireSignature) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsignedToken = (\n\t\t\t\t\t\t\t\tawait serializeSignedCookie(\"\", token, c.context.secret)\n\t\t\t\t\t\t\t).replace(\"=\", \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst decodedToken = decodeURIComponent(signedToken);\n\t\t\t\t\t\t\tconst isValid = await createHMAC(\n\t\t\t\t\t\t\t\t\"SHA-256\",\n\t\t\t\t\t\t\t\t\"base64urlnopad\",\n\t\t\t\t\t\t\t).verify(\n\t\t\t\t\t\t\t\tc.context.secret,\n\t\t\t\t\t\t\t\tdecodedToken.split(\".\")[0]!,\n\t\t\t\t\t\t\t\tdecodedToken.split(\".\")[1]!,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst existingHeaders = (c.request?.headers ||\n\t\t\t\t\t\t\tc.headers) as Headers;\n\t\t\t\t\t\tconst headers = new Headers({\n\t\t\t\t\t\t\t...Object.fromEntries(existingHeaders?.entries()),\n\t\t\t\t\t\t});\n\t\t\t\t\t\theaders.append(\n\t\t\t\t\t\t\t\"cookie\",\n\t\t\t\t\t\t\t`${c.context.authCookies.sessionToken.name}=${signedToken}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\t\theaders,\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\tafter: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(context) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (ctx) => {\n\t\t\t\t\t\tconst setCookie = ctx.context.responseHeaders?.get(\"set-cookie\");\n\t\t\t\t\t\tif (!setCookie) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst parsedCookies = parseSetCookieHeader(setCookie);\n\t\t\t\t\t\tconst cookieName = ctx.context.authCookies.sessionToken.name;\n\t\t\t\t\t\tconst sessionCookie = parsedCookies.get(cookieName);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!sessionCookie ||\n\t\t\t\t\t\t\t!sessionCookie.value ||\n\t\t\t\t\t\t\tsessionCookie[\"max-age\"] === 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = sessionCookie.value;\n\t\t\t\t\t\tconst exposedHeaders =\n\t\t\t\t\t\t\tctx.context.responseHeaders?.get(\n\t\t\t\t\t\t\t\t\"access-control-expose-headers\",\n\t\t\t\t\t\t\t) || \"\";\n\t\t\t\t\t\tconst headersSet = new Set(\n\t\t\t\t\t\t\texposedHeaders\n\t\t\t\t\t\t\t\t.split(\",\")\n\t\t\t\t\t\t\t\t.map((header) => header.trim())\n\t\t\t\t\t\t\t\t.filter(Boolean),\n\t\t\t\t\t\t);\n\t\t\t\t\t\theadersSet.add(\"set-auth-token\");\n\t\t\t\t\t\tctx.setHeader(\"set-auth-token\", token);\n\t\t\t\t\t\tctx.setHeader(\n\t\t\t\t\t\t\t\"Access-Control-Expose-Headers\",\n\t\t\t\t\t\t\tArray.from(headersSet).join(\", \"),\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\toptions,\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":";;;;;;;;;;AA4BA,MAAa,UAAU,YAAwC;AAC9D,QAAO;EACN,IAAI;EACJ,OAAO;GACN,QAAQ,CACP;IACC,QAAQ,SAAS;AAChB,YAAO,QACN,QAAQ,SAAS,QAAQ,IAAI,gBAAgB,IAC5C,QAAQ,SAAS,IAAI,gBAAgB,CACtC;;IAEF,SAAS,qBAAqB,OAAO,MAAM;KAC1C,MAAM,QACL,EAAE,SAAS,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,WAAW,GAAG,IAC/D,EAAE,SAAS,IAAI,gBAAgB,EAAE,QAAQ,WAAW,GAAG;AACxD,SAAI,CAAC,MACJ;KAGD,IAAI,cAAc;AAClB,SAAI,MAAM,SAAS,IAAI,CACtB,eAAc,MAAM,QAAQ,KAAK,GAAG;UAC9B;AACN,UAAI,SAAS,iBACZ;AAED,qBACC,MAAM,sBAAsB,IAAI,OAAO,EAAE,QAAQ,OAAO,EACvD,QAAQ,KAAK,GAAG;;AAEnB,SAAI;MACH,MAAM,eAAe,mBAAmB,YAAY;AASpD,UAAI,CARY,MAAM,WACrB,WACA,iBACA,CAAC,OACD,EAAE,QAAQ,QACV,aAAa,MAAM,IAAI,CAAC,IACxB,aAAa,MAAM,IAAI,CAAC,GACxB,CAEA;aAEM;AACP;;KAED,MAAM,kBAAmB,EAAE,SAAS,WACnC,EAAE;KACH,MAAM,UAAU,IAAI,QAAQ,EAC3B,GAAG,OAAO,YAAY,iBAAiB,SAAS,CAAC,EACjD,CAAC;AACF,aAAQ,OACP,UACA,GAAG,EAAE,QAAQ,YAAY,aAAa,KAAK,GAAG,cAC9C;AACD,YAAO,EACN,SAAS,EACR,SACA,EACD;MACA;IACF,CACD;GACD,OAAO,CACN;IACC,QAAQ,SAAS;AAChB,YAAO;;IAER,SAAS,qBAAqB,OAAO,QAAQ;KAC5C,MAAM,YAAY,IAAI,QAAQ,iBAAiB,IAAI,aAAa;AAChE,SAAI,CAAC,UACJ;KAED,MAAM,gBAAgB,qBAAqB,UAAU;KACrD,MAAM,aAAa,IAAI,QAAQ,YAAY,aAAa;KACxD,MAAM,gBAAgB,cAAc,IAAI,WAAW;AACnD,SACC,CAAC,iBACD,CAAC,cAAc,SACf,cAAc,eAAe,EAE7B;KAED,MAAM,QAAQ,cAAc;KAC5B,MAAM,iBACL,IAAI,QAAQ,iBAAiB,IAC5B,gCACA,IAAI;KACN,MAAM,aAAa,IAAI,IACtB,eACE,MAAM,IAAI,CACV,KAAK,WAAW,OAAO,MAAM,CAAC,CAC9B,OAAO,QAAQ,CACjB;AACD,gBAAW,IAAI,iBAAiB;AAChC,SAAI,UAAU,kBAAkB,MAAM;AACtC,SAAI,UACH,iCACA,MAAM,KAAK,WAAW,CAAC,KAAK,KAAK,CACjC;MACA;IACF,CACD;GACD;EACD;EACA"}
@@ -0,0 +1,10 @@
1
+ //#region src/plugins/captcha/constants.d.ts
2
+ declare const Providers: {
3
+ readonly CLOUDFLARE_TURNSTILE: "cloudflare-turnstile";
4
+ readonly GOOGLE_RECAPTCHA: "google-recaptcha";
5
+ readonly HCAPTCHA: "hcaptcha";
6
+ readonly CAPTCHAFOX: "captchafox";
7
+ };
8
+ //#endregion
9
+ export { Providers };
10
+ //# sourceMappingURL=constants.d.mts.map
@@ -0,0 +1,22 @@
1
+ //#region src/plugins/captcha/constants.ts
2
+ const defaultEndpoints = [
3
+ "/sign-up/email",
4
+ "/sign-in/email",
5
+ "/request-password-reset"
6
+ ];
7
+ const Providers = {
8
+ CLOUDFLARE_TURNSTILE: "cloudflare-turnstile",
9
+ GOOGLE_RECAPTCHA: "google-recaptcha",
10
+ HCAPTCHA: "hcaptcha",
11
+ CAPTCHAFOX: "captchafox"
12
+ };
13
+ const siteVerifyMap = {
14
+ [Providers.CLOUDFLARE_TURNSTILE]: "https://challenges.cloudflare.com/turnstile/v0/siteverify",
15
+ [Providers.GOOGLE_RECAPTCHA]: "https://www.google.com/recaptcha/api/siteverify",
16
+ [Providers.HCAPTCHA]: "https://api.hcaptcha.com/siteverify",
17
+ [Providers.CAPTCHAFOX]: "https://api.captchafox.com/siteverify"
18
+ };
19
+
20
+ //#endregion
21
+ export { Providers, defaultEndpoints, siteVerifyMap };
22
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","names":[],"sources":["../../../src/plugins/captcha/constants.ts"],"sourcesContent":["import type { Provider } from \"./types\";\n\nexport const defaultEndpoints = [\n\t\"/sign-up/email\",\n\t\"/sign-in/email\",\n\t\"/request-password-reset\",\n];\n\nexport const Providers = {\n\tCLOUDFLARE_TURNSTILE: \"cloudflare-turnstile\",\n\tGOOGLE_RECAPTCHA: \"google-recaptcha\",\n\tHCAPTCHA: \"hcaptcha\",\n\tCAPTCHAFOX: \"captchafox\",\n} as const;\n\nexport const siteVerifyMap: Record<Provider, string> = {\n\t[Providers.CLOUDFLARE_TURNSTILE]:\n\t\t\"https://challenges.cloudflare.com/turnstile/v0/siteverify\",\n\t[Providers.GOOGLE_RECAPTCHA]:\n\t\t\"https://www.google.com/recaptcha/api/siteverify\",\n\t[Providers.HCAPTCHA]: \"https://api.hcaptcha.com/siteverify\",\n\t[Providers.CAPTCHAFOX]: \"https://api.captchafox.com/siteverify\",\n};\n"],"mappings":";AAEA,MAAa,mBAAmB;CAC/B;CACA;CACA;CACA;AAED,MAAa,YAAY;CACxB,sBAAsB;CACtB,kBAAkB;CAClB,UAAU;CACV,YAAY;CACZ;AAED,MAAa,gBAA0C;EACrD,UAAU,uBACV;EACA,UAAU,mBACV;EACA,UAAU,WAAW;EACrB,UAAU,aAAa;CACxB"}
@@ -0,0 +1,16 @@
1
+ import { defineErrorCodes } from "@better-auth/core/utils/error-codes";
2
+
3
+ //#region src/plugins/captcha/error-codes.ts
4
+ const EXTERNAL_ERROR_CODES = defineErrorCodes({
5
+ VERIFICATION_FAILED: "Captcha verification failed",
6
+ MISSING_RESPONSE: "Missing CAPTCHA response",
7
+ UNKNOWN_ERROR: "Something went wrong"
8
+ });
9
+ const INTERNAL_ERROR_CODES = defineErrorCodes({
10
+ MISSING_SECRET_KEY: "Missing secret key",
11
+ SERVICE_UNAVAILABLE: "CAPTCHA service unavailable"
12
+ });
13
+
14
+ //#endregion
15
+ export { EXTERNAL_ERROR_CODES, INTERNAL_ERROR_CODES };
16
+ //# sourceMappingURL=error-codes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.mjs","names":[],"sources":["../../../src/plugins/captcha/error-codes.ts"],"sourcesContent":["// These error codes are returned by the API\nimport { defineErrorCodes } from \"@better-auth/core/utils/error-codes\";\n\nexport const EXTERNAL_ERROR_CODES = defineErrorCodes({\n\tVERIFICATION_FAILED: \"Captcha verification failed\",\n\tMISSING_RESPONSE: \"Missing CAPTCHA response\",\n\tUNKNOWN_ERROR: \"Something went wrong\",\n});\n\n// These error codes are only visible in the server logs\nexport const INTERNAL_ERROR_CODES = defineErrorCodes({\n\tMISSING_SECRET_KEY: \"Missing secret key\",\n\tSERVICE_UNAVAILABLE: \"CAPTCHA service unavailable\",\n});\n"],"mappings":";;;AAGA,MAAa,uBAAuB,iBAAiB;CACpD,qBAAqB;CACrB,kBAAkB;CAClB,eAAe;CACf,CAAC;AAGF,MAAa,uBAAuB,iBAAiB;CACpD,oBAAoB;CACpB,qBAAqB;CACrB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { BaseCaptchaOptions, CaptchaFoxOptions, CaptchaOptions, CloudflareTurnstileOptions, GoogleRecaptchaOptions, HCaptchaOptions, Provider } from "./types.mjs";
2
+
3
+ //#region src/plugins/captcha/index.d.ts
4
+ declare module "@better-auth/core" {
5
+ interface BetterAuthPluginRegistry<AuthOptions, Options> {
6
+ captcha: {
7
+ creator: typeof captcha;
8
+ };
9
+ }
10
+ }
11
+ declare const captcha: (options: CaptchaOptions) => BetterAuthPlugin;
12
+ //#endregion
13
+ export { BaseCaptchaOptions, CaptchaFoxOptions, CaptchaOptions, CloudflareTurnstileOptions, GoogleRecaptchaOptions, HCaptchaOptions, Provider, captcha };
14
+ //# sourceMappingURL=index.d.mts.map