@depup/better-auth__core 1.6.23-depup.2

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 (310) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +32 -0
  3. package/changes.json +14 -0
  4. package/dist/api/index.d.mts +281 -0
  5. package/dist/api/index.mjs +92 -0
  6. package/dist/async_hooks/index.d.mts +6 -0
  7. package/dist/async_hooks/index.mjs +20 -0
  8. package/dist/async_hooks/pure.index.d.mts +6 -0
  9. package/dist/async_hooks/pure.index.mjs +33 -0
  10. package/dist/context/endpoint-context.d.mts +18 -0
  11. package/dist/context/endpoint-context.mjs +29 -0
  12. package/dist/context/global.d.mts +6 -0
  13. package/dist/context/global.mjs +36 -0
  14. package/dist/context/index.d.mts +5 -0
  15. package/dist/context/index.mjs +5 -0
  16. package/dist/context/request-state.d.mts +27 -0
  17. package/dist/context/request-state.mjs +47 -0
  18. package/dist/context/transaction.d.mts +27 -0
  19. package/dist/context/transaction.mjs +96 -0
  20. package/dist/db/adapter/factory.d.mts +17 -0
  21. package/dist/db/adapter/factory.mjs +905 -0
  22. package/dist/db/adapter/get-default-field-name.d.mts +18 -0
  23. package/dist/db/adapter/get-default-field-name.mjs +36 -0
  24. package/dist/db/adapter/get-default-model-name.d.mts +12 -0
  25. package/dist/db/adapter/get-default-model-name.mjs +30 -0
  26. package/dist/db/adapter/get-field-attributes.d.mts +26 -0
  27. package/dist/db/adapter/get-field-attributes.mjs +37 -0
  28. package/dist/db/adapter/get-field-name.d.mts +18 -0
  29. package/dist/db/adapter/get-field-name.mjs +31 -0
  30. package/dist/db/adapter/get-id-field.d.mts +36 -0
  31. package/dist/db/adapter/get-id-field.mjs +64 -0
  32. package/dist/db/adapter/get-model-name.d.mts +12 -0
  33. package/dist/db/adapter/get-model-name.mjs +21 -0
  34. package/dist/db/adapter/index.d.mts +615 -0
  35. package/dist/db/adapter/index.mjs +24 -0
  36. package/dist/db/adapter/types.d.mts +105 -0
  37. package/dist/db/adapter/utils.d.mts +7 -0
  38. package/dist/db/adapter/utils.mjs +37 -0
  39. package/dist/db/get-tables.d.mts +6 -0
  40. package/dist/db/get-tables.mjs +266 -0
  41. package/dist/db/index.d.mts +10 -0
  42. package/dist/db/index.mjs +8 -0
  43. package/dist/db/plugin.d.mts +12 -0
  44. package/dist/db/schema/account.d.mts +28 -0
  45. package/dist/db/schema/account.mjs +17 -0
  46. package/dist/db/schema/rate-limit.d.mts +18 -0
  47. package/dist/db/schema/rate-limit.mjs +9 -0
  48. package/dist/db/schema/session.d.mts +23 -0
  49. package/dist/db/schema/session.mjs +12 -0
  50. package/dist/db/schema/shared.d.mts +10 -0
  51. package/dist/db/schema/shared.mjs +9 -0
  52. package/dist/db/schema/user.d.mts +22 -0
  53. package/dist/db/schema/user.mjs +11 -0
  54. package/dist/db/schema/verification.d.mts +21 -0
  55. package/dist/db/schema/verification.mjs +10 -0
  56. package/dist/db/type.d.mts +194 -0
  57. package/dist/env/color-depth.d.mts +4 -0
  58. package/dist/env/color-depth.mjs +86 -0
  59. package/dist/env/env-impl.d.mts +32 -0
  60. package/dist/env/env-impl.mjs +81 -0
  61. package/dist/env/index.d.mts +4 -0
  62. package/dist/env/index.mjs +4 -0
  63. package/dist/env/logger.d.mts +48 -0
  64. package/dist/env/logger.mjs +79 -0
  65. package/dist/error/codes.d.mts +69 -0
  66. package/dist/error/codes.mjs +55 -0
  67. package/dist/error/index.d.mts +26 -0
  68. package/dist/error/index.mjs +27 -0
  69. package/dist/index.d.mts +9 -0
  70. package/dist/index.mjs +1 -0
  71. package/dist/instrumentation/api.mjs +12 -0
  72. package/dist/instrumentation/attributes.d.mts +11 -0
  73. package/dist/instrumentation/attributes.mjs +10 -0
  74. package/dist/instrumentation/index.d.mts +3 -0
  75. package/dist/instrumentation/index.mjs +3 -0
  76. package/dist/instrumentation/noop.mjs +42 -0
  77. package/dist/instrumentation/pure.index.d.mts +7 -0
  78. package/dist/instrumentation/pure.index.mjs +7 -0
  79. package/dist/instrumentation/tracer.d.mts +13 -0
  80. package/dist/instrumentation/tracer.mjs +53 -0
  81. package/dist/oauth2/client-credentials-token.d.mts +56 -0
  82. package/dist/oauth2/client-credentials-token.mjs +64 -0
  83. package/dist/oauth2/create-authorization-url.d.mts +44 -0
  84. package/dist/oauth2/create-authorization-url.mjs +41 -0
  85. package/dist/oauth2/index.d.mts +8 -0
  86. package/dist/oauth2/index.mjs +7 -0
  87. package/dist/oauth2/oauth-provider.d.mts +192 -0
  88. package/dist/oauth2/refresh-access-token.d.mts +54 -0
  89. package/dist/oauth2/refresh-access-token.mjs +73 -0
  90. package/dist/oauth2/reject-redirects.mjs +60 -0
  91. package/dist/oauth2/utils.d.mts +24 -0
  92. package/dist/oauth2/utils.mjs +48 -0
  93. package/dist/oauth2/validate-authorization-code.d.mts +85 -0
  94. package/dist/oauth2/validate-authorization-code.mjs +86 -0
  95. package/dist/oauth2/verify.d.mts +65 -0
  96. package/dist/oauth2/verify.mjs +202 -0
  97. package/dist/social-providers/apple.d.mts +133 -0
  98. package/dist/social-providers/apple.mjs +117 -0
  99. package/dist/social-providers/atlassian.d.mts +70 -0
  100. package/dist/social-providers/atlassian.mjs +80 -0
  101. package/dist/social-providers/cognito.d.mts +85 -0
  102. package/dist/social-providers/cognito.mjs +162 -0
  103. package/dist/social-providers/discord.d.mts +124 -0
  104. package/dist/social-providers/discord.mjs +62 -0
  105. package/dist/social-providers/dropbox.d.mts +69 -0
  106. package/dist/social-providers/dropbox.mjs +72 -0
  107. package/dist/social-providers/facebook.d.mts +79 -0
  108. package/dist/social-providers/facebook.mjs +157 -0
  109. package/dist/social-providers/figma.d.mts +61 -0
  110. package/dist/social-providers/figma.mjs +83 -0
  111. package/dist/social-providers/github.d.mts +102 -0
  112. package/dist/social-providers/github.mjs +92 -0
  113. package/dist/social-providers/gitlab.d.mts +123 -0
  114. package/dist/social-providers/gitlab.mjs +79 -0
  115. package/dist/social-providers/google.d.mts +123 -0
  116. package/dist/social-providers/google.mjs +137 -0
  117. package/dist/social-providers/huggingface.d.mts +83 -0
  118. package/dist/social-providers/huggingface.mjs +73 -0
  119. package/dist/social-providers/index.d.mts +1834 -0
  120. package/dist/social-providers/index.mjs +78 -0
  121. package/dist/social-providers/kakao.d.mts +161 -0
  122. package/dist/social-providers/kakao.mjs +70 -0
  123. package/dist/social-providers/kick.d.mts +73 -0
  124. package/dist/social-providers/kick.mjs +68 -0
  125. package/dist/social-providers/line.d.mts +105 -0
  126. package/dist/social-providers/line.mjs +110 -0
  127. package/dist/social-providers/linear.d.mts +68 -0
  128. package/dist/social-providers/linear.mjs +85 -0
  129. package/dist/social-providers/linkedin.d.mts +67 -0
  130. package/dist/social-providers/linkedin.mjs +73 -0
  131. package/dist/social-providers/microsoft-entra-id.d.mts +174 -0
  132. package/dist/social-providers/microsoft-entra-id.mjs +152 -0
  133. package/dist/social-providers/naver.d.mts +92 -0
  134. package/dist/social-providers/naver.mjs +65 -0
  135. package/dist/social-providers/notion.d.mts +64 -0
  136. package/dist/social-providers/notion.mjs +72 -0
  137. package/dist/social-providers/paybin.d.mts +71 -0
  138. package/dist/social-providers/paybin.mjs +81 -0
  139. package/dist/social-providers/paypal.d.mts +131 -0
  140. package/dist/social-providers/paypal.mjs +188 -0
  141. package/dist/social-providers/polar.d.mts +74 -0
  142. package/dist/social-providers/polar.mjs +71 -0
  143. package/dist/social-providers/railway.d.mts +65 -0
  144. package/dist/social-providers/railway.mjs +74 -0
  145. package/dist/social-providers/reddit.d.mts +62 -0
  146. package/dist/social-providers/reddit.mjs +81 -0
  147. package/dist/social-providers/roblox.d.mts +70 -0
  148. package/dist/social-providers/roblox.mjs +57 -0
  149. package/dist/social-providers/salesforce.d.mts +79 -0
  150. package/dist/social-providers/salesforce.mjs +87 -0
  151. package/dist/social-providers/slack.d.mts +83 -0
  152. package/dist/social-providers/slack.mjs +66 -0
  153. package/dist/social-providers/spotify.d.mts +63 -0
  154. package/dist/social-providers/spotify.mjs +69 -0
  155. package/dist/social-providers/tiktok.d.mts +168 -0
  156. package/dist/social-providers/tiktok.mjs +60 -0
  157. package/dist/social-providers/twitch.d.mts +79 -0
  158. package/dist/social-providers/twitch.mjs +75 -0
  159. package/dist/social-providers/twitter.d.mts +126 -0
  160. package/dist/social-providers/twitter.mjs +85 -0
  161. package/dist/social-providers/vercel.d.mts +62 -0
  162. package/dist/social-providers/vercel.mjs +58 -0
  163. package/dist/social-providers/vk.d.mts +70 -0
  164. package/dist/social-providers/vk.mjs +81 -0
  165. package/dist/social-providers/wechat.d.mts +113 -0
  166. package/dist/social-providers/wechat.mjs +81 -0
  167. package/dist/social-providers/zoom.d.mts +163 -0
  168. package/dist/social-providers/zoom.mjs +69 -0
  169. package/dist/types/context.d.mts +319 -0
  170. package/dist/types/cookie.d.mts +15 -0
  171. package/dist/types/helper.d.mts +10 -0
  172. package/dist/types/index.d.mts +9 -0
  173. package/dist/types/init-options.d.mts +1430 -0
  174. package/dist/types/plugin-client.d.mts +123 -0
  175. package/dist/types/plugin.d.mts +124 -0
  176. package/dist/types/secret.d.mts +11 -0
  177. package/dist/utils/async.d.mts +22 -0
  178. package/dist/utils/async.mjs +32 -0
  179. package/dist/utils/db.d.mts +9 -0
  180. package/dist/utils/db.mjs +15 -0
  181. package/dist/utils/deprecate.d.mts +9 -0
  182. package/dist/utils/deprecate.mjs +16 -0
  183. package/dist/utils/error-codes.d.mts +13 -0
  184. package/dist/utils/error-codes.mjs +10 -0
  185. package/dist/utils/fetch-metadata.d.mts +4 -0
  186. package/dist/utils/fetch-metadata.mjs +6 -0
  187. package/dist/utils/host.d.mts +147 -0
  188. package/dist/utils/host.mjs +295 -0
  189. package/dist/utils/id.d.mts +4 -0
  190. package/dist/utils/id.mjs +7 -0
  191. package/dist/utils/ip.d.mts +77 -0
  192. package/dist/utils/ip.mjs +230 -0
  193. package/dist/utils/is-api-error.d.mts +6 -0
  194. package/dist/utils/is-api-error.mjs +8 -0
  195. package/dist/utils/json.d.mts +4 -0
  196. package/dist/utils/json.mjs +41 -0
  197. package/dist/utils/redirect-uri.d.mts +20 -0
  198. package/dist/utils/redirect-uri.mjs +48 -0
  199. package/dist/utils/string.d.mts +8 -0
  200. package/dist/utils/string.mjs +25 -0
  201. package/dist/utils/url.d.mts +37 -0
  202. package/dist/utils/url.mjs +61 -0
  203. package/package.json +216 -0
  204. package/src/api/index.ts +185 -0
  205. package/src/async_hooks/index.ts +40 -0
  206. package/src/async_hooks/pure.index.ts +46 -0
  207. package/src/context/endpoint-context.ts +50 -0
  208. package/src/context/global.ts +57 -0
  209. package/src/context/index.ts +23 -0
  210. package/src/context/request-state.ts +91 -0
  211. package/src/context/transaction.ts +169 -0
  212. package/src/db/adapter/factory.ts +1740 -0
  213. package/src/db/adapter/get-default-field-name.ts +59 -0
  214. package/src/db/adapter/get-default-model-name.ts +51 -0
  215. package/src/db/adapter/get-field-attributes.ts +62 -0
  216. package/src/db/adapter/get-field-name.ts +43 -0
  217. package/src/db/adapter/get-id-field.ts +150 -0
  218. package/src/db/adapter/get-model-name.ts +36 -0
  219. package/src/db/adapter/index.ts +656 -0
  220. package/src/db/adapter/types.ts +134 -0
  221. package/src/db/adapter/utils.ts +61 -0
  222. package/src/db/get-tables.ts +304 -0
  223. package/src/db/index.ts +43 -0
  224. package/src/db/plugin.ts +11 -0
  225. package/src/db/schema/account.ts +47 -0
  226. package/src/db/schema/rate-limit.ts +36 -0
  227. package/src/db/schema/session.ts +29 -0
  228. package/src/db/schema/shared.ts +7 -0
  229. package/src/db/schema/user.ts +31 -0
  230. package/src/db/schema/verification.ts +28 -0
  231. package/src/db/type.ts +360 -0
  232. package/src/env/color-depth.ts +172 -0
  233. package/src/env/env-impl.ts +123 -0
  234. package/src/env/index.ts +23 -0
  235. package/src/env/logger.ts +145 -0
  236. package/src/error/codes.ts +72 -0
  237. package/src/error/index.ts +44 -0
  238. package/src/index.ts +1 -0
  239. package/src/instrumentation/api.ts +17 -0
  240. package/src/instrumentation/attributes.ts +22 -0
  241. package/src/instrumentation/index.ts +2 -0
  242. package/src/instrumentation/noop.ts +74 -0
  243. package/src/instrumentation/pure.index.ts +31 -0
  244. package/src/instrumentation/tracer.ts +95 -0
  245. package/src/oauth2/client-credentials-token.ts +126 -0
  246. package/src/oauth2/create-authorization-url.ts +89 -0
  247. package/src/oauth2/index.ts +34 -0
  248. package/src/oauth2/oauth-provider.ts +222 -0
  249. package/src/oauth2/refresh-access-token.ts +157 -0
  250. package/src/oauth2/reject-redirects.ts +70 -0
  251. package/src/oauth2/utils.ts +70 -0
  252. package/src/oauth2/validate-authorization-code.ts +190 -0
  253. package/src/oauth2/verify.ts +408 -0
  254. package/src/social-providers/apple.ts +249 -0
  255. package/src/social-providers/atlassian.ts +133 -0
  256. package/src/social-providers/cognito.ts +281 -0
  257. package/src/social-providers/discord.ts +170 -0
  258. package/src/social-providers/dropbox.ts +112 -0
  259. package/src/social-providers/facebook.ts +288 -0
  260. package/src/social-providers/figma.ts +118 -0
  261. package/src/social-providers/github.ts +184 -0
  262. package/src/social-providers/gitlab.ts +155 -0
  263. package/src/social-providers/google.ts +263 -0
  264. package/src/social-providers/huggingface.ts +119 -0
  265. package/src/social-providers/index.ts +132 -0
  266. package/src/social-providers/kakao.ts +179 -0
  267. package/src/social-providers/kick.ts +109 -0
  268. package/src/social-providers/line.ts +169 -0
  269. package/src/social-providers/linear.ts +121 -0
  270. package/src/social-providers/linkedin.ts +110 -0
  271. package/src/social-providers/microsoft-entra-id.ts +391 -0
  272. package/src/social-providers/naver.ts +113 -0
  273. package/src/social-providers/notion.ts +108 -0
  274. package/src/social-providers/paybin.ts +118 -0
  275. package/src/social-providers/paypal.ts +371 -0
  276. package/src/social-providers/polar.ts +111 -0
  277. package/src/social-providers/railway.ts +100 -0
  278. package/src/social-providers/reddit.ts +126 -0
  279. package/src/social-providers/roblox.ts +112 -0
  280. package/src/social-providers/salesforce.ts +159 -0
  281. package/src/social-providers/slack.ts +112 -0
  282. package/src/social-providers/spotify.ts +94 -0
  283. package/src/social-providers/tiktok.ts +211 -0
  284. package/src/social-providers/twitch.ts +112 -0
  285. package/src/social-providers/twitter.ts +199 -0
  286. package/src/social-providers/vercel.ts +87 -0
  287. package/src/social-providers/vk.ts +125 -0
  288. package/src/social-providers/wechat.ts +220 -0
  289. package/src/social-providers/zoom.ts +230 -0
  290. package/src/types/context.ts +460 -0
  291. package/src/types/cookie.ts +10 -0
  292. package/src/types/helper.ts +27 -0
  293. package/src/types/index.ts +40 -0
  294. package/src/types/init-options.ts +1679 -0
  295. package/src/types/plugin-client.ts +143 -0
  296. package/src/types/plugin.ts +163 -0
  297. package/src/types/secret.ts +8 -0
  298. package/src/utils/async.ts +53 -0
  299. package/src/utils/db.ts +20 -0
  300. package/src/utils/deprecate.ts +21 -0
  301. package/src/utils/error-codes.ts +68 -0
  302. package/src/utils/fetch-metadata.ts +3 -0
  303. package/src/utils/host.ts +416 -0
  304. package/src/utils/id.ts +5 -0
  305. package/src/utils/ip.ts +395 -0
  306. package/src/utils/is-api-error.ts +10 -0
  307. package/src/utils/json.ts +56 -0
  308. package/src/utils/redirect-uri.ts +54 -0
  309. package/src/utils/string.ts +40 -0
  310. package/src/utils/url.ts +77 -0
@@ -0,0 +1,319 @@
1
+ import { BetterAuthDBSchema, ModelNames, SecondaryStorage } from "../db/type.mjs";
2
+ import { DBAdapter, Where } from "../db/adapter/index.mjs";
3
+ import { Session } from "../db/schema/session.mjs";
4
+ import { User } from "../db/schema/user.mjs";
5
+ import { Verification } from "../db/schema/verification.mjs";
6
+ import { createLogger } from "../env/logger.mjs";
7
+ import { Awaitable, LiteralString } from "./helper.mjs";
8
+ import { BetterAuthPlugin } from "./plugin.mjs";
9
+ import { BetterAuthOptions, BetterAuthRateLimitOptions } from "./init-options.mjs";
10
+ import { Account } from "../db/schema/account.mjs";
11
+ import { BetterAuthCookie, BetterAuthCookies } from "./cookie.mjs";
12
+ import { SecretConfig } from "./secret.mjs";
13
+ import { OAuthProvider } from "../oauth2/oauth-provider.mjs";
14
+ import { CookieOptions, EndpointContext } from "better-call";
15
+
16
+ //#region src/types/context.d.ts
17
+ /**
18
+ * @internal
19
+ */
20
+ type InferPluginID<O extends BetterAuthOptions> = O["plugins"] extends Array<infer P> ? P extends BetterAuthPlugin ? P["id"] : never : never;
21
+ /**
22
+ * @internal
23
+ */
24
+ type InferPluginOptions<O extends BetterAuthOptions, ID extends BetterAuthPluginRegistryIdentifier | LiteralString> = O["plugins"] extends Array<infer P> ? P extends BetterAuthPlugin ? P["id"] extends ID ? P extends {
25
+ options: infer O;
26
+ } ? O : never : never : never : never;
27
+ /**
28
+ * Mutators are defined in each plugin
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * interface MyPluginOptions {
33
+ * useFeature: boolean
34
+ * }
35
+ *
36
+ * const createMyPlugin = <Options extends MyPluginOptions>(options?: Options) => ({
37
+ * id: 'my-plugin',
38
+ * version: '1.0.0',
39
+ * options,
40
+ * } satisfies BetterAuthPlugin);
41
+ *
42
+ * declare module "@better-auth/core" {
43
+ * interface BetterAuthPluginRegistry<AuthOptions, Options> {
44
+ * 'my-plugin': {
45
+ * creator: Options extends MyPluginOptions ? typeof createMyPlugin<Options>: typeof createMyPlugin
46
+ * }
47
+ * }
48
+ * }
49
+ * ```
50
+ */
51
+ interface BetterAuthPluginRegistry<AuthOptions, Options> {}
52
+ type BetterAuthPluginRegistryIdentifier = keyof BetterAuthPluginRegistry<unknown, unknown>;
53
+ type GenericEndpointContext<Options extends BetterAuthOptions = BetterAuthOptions> = EndpointContext<string, any> & {
54
+ context: AuthContext<Options>;
55
+ };
56
+ interface InternalAdapter<_Options extends BetterAuthOptions = BetterAuthOptions> {
57
+ createOAuthUser(user: Omit<User, "id" | "createdAt" | "updatedAt">, account: Omit<Account, "userId" | "id" | "createdAt" | "updatedAt"> & Partial<Account>): Promise<{
58
+ user: User;
59
+ account: Account;
60
+ }>;
61
+ createUser<T extends Record<string, any>>(user: Omit<User, "id" | "createdAt" | "updatedAt" | "emailVerified"> & Partial<User> & Record<string, any>): Promise<T & User>;
62
+ createAccount<T extends Record<string, any>>(account: Omit<Account, "id" | "createdAt" | "updatedAt"> & Partial<Account> & T): Promise<T & Account>;
63
+ listSessions(userId: string, options?: {
64
+ onlyActiveSessions?: boolean | undefined;
65
+ } | undefined): Promise<Session[]>;
66
+ listUsers(limit?: number | undefined, offset?: number | undefined, sortBy?: {
67
+ field: string;
68
+ direction: "asc" | "desc";
69
+ } | undefined, where?: Where[] | undefined): Promise<User[]>;
70
+ countTotalUsers(where?: Where[] | undefined): Promise<number>;
71
+ deleteUser(userId: string): Promise<void>;
72
+ createSession(userId: string, dontRememberMe?: boolean | undefined, override?: (Partial<Session> & Record<string, any>) | undefined, overrideAll?: boolean | undefined): Promise<Session>;
73
+ findSession(token: string): Promise<{
74
+ session: Session & Record<string, any>;
75
+ user: User & Record<string, any>;
76
+ } | null>;
77
+ findSessions(sessionTokens: string[], options?: {
78
+ onlyActiveSessions?: boolean | undefined;
79
+ } | undefined): Promise<{
80
+ session: Session;
81
+ user: User;
82
+ }[]>;
83
+ updateSession(sessionToken: string, session: Partial<Session> & Record<string, any>): Promise<Session | null>;
84
+ deleteSession(token: string): Promise<void>;
85
+ deleteAccounts(userId: string): Promise<void>;
86
+ /**
87
+ * Delete an account by its primary key.
88
+ *
89
+ * @param id - The account row's primary key (the `id` column, not the `accountId` column).
90
+ */
91
+ deleteAccount(id: string): Promise<void>;
92
+ /**
93
+ * Delete every session belonging to a user.
94
+ */
95
+ deleteUserSessions(userId: string): Promise<void>;
96
+ /**
97
+ * Delete sessions by their session tokens.
98
+ */
99
+ deleteSessions(sessionTokens: string[]): Promise<void>;
100
+ findOAuthUser(email: string, accountId: string, providerId: string): Promise<{
101
+ user: User;
102
+ linkedAccount: Account | null;
103
+ accounts: Account[];
104
+ } | null>;
105
+ findUserByEmail(email: string, options?: {
106
+ includeAccounts: boolean;
107
+ } | undefined): Promise<{
108
+ user: User;
109
+ accounts: Account[];
110
+ } | null>;
111
+ findUserById(userId: string): Promise<User | null>;
112
+ linkAccount(account: Omit<Account, "id" | "createdAt" | "updatedAt"> & Partial<Account>): Promise<Account>;
113
+ updateUser<T extends Record<string, any>>(userId: string, data: Partial<User> & Record<string, any>): Promise<User & T>;
114
+ updateUserByEmail<T extends Record<string, any>>(email: string, data: Partial<User & Record<string, any>>): Promise<User & T>;
115
+ updatePassword(userId: string, password: string): Promise<void>;
116
+ findAccounts(userId: string): Promise<Account[]>;
117
+ findAccountByProviderId(accountId: string, providerId: string): Promise<Account | null>;
118
+ findAccountByUserId(userId: string): Promise<Account[]>;
119
+ updateAccount(id: string, data: Partial<Account>): Promise<Account>;
120
+ createVerificationValue(data: Omit<Verification, "createdAt" | "id" | "updatedAt"> & Partial<Verification>): Promise<Verification>;
121
+ findVerificationValue(identifier: string): Promise<Verification | null>;
122
+ deleteVerificationByIdentifier(identifier: string): Promise<void>;
123
+ /**
124
+ * Atomically consume a single-use verification row by `identifier` and
125
+ * return it. Only the first concurrent caller receives the latest row;
126
+ * subsequent callers receive `null`. Consuming one row invalidates the
127
+ * whole identifier so stale rows cannot be replayed. Rows past their
128
+ * `expiresAt` are treated as already invalid: the row is deleted but
129
+ * `null` is returned, so callers do not need to gate on `expiresAt`
130
+ * themselves. Callers MUST gate any state change (issue session, mint
131
+ * token, change password) on a non-null result.
132
+ *
133
+ * Replaces the racy `findVerificationValue` + `deleteVerificationByIdentifier`
134
+ * pair at single-use credential consumption sites.
135
+ */
136
+ consumeVerificationValue(identifier: string): Promise<Verification | null>;
137
+ /**
138
+ * First-writer-wins create keyed by a deterministic primary key derived from
139
+ * `identifier`. Returns `true` when this caller created the row and `false`
140
+ * when a row for the same identifier already existed.
141
+ *
142
+ * The dual of `consumeVerificationValue`: reserve races to create a marker
143
+ * exactly once, where consume races to delete one exactly once. Use it for
144
+ * replay tombstones (a SAML assertion id, a JWT `jti`) where the first caller
145
+ * wins. The database path is atomic via the primary key; the
146
+ * secondary-storage-only path is best-effort under concurrency.
147
+ */
148
+ reserveVerificationValue(data: {
149
+ identifier: string;
150
+ value: string;
151
+ expiresAt: Date;
152
+ }): Promise<boolean>;
153
+ updateVerificationByIdentifier(identifier: string, data: Partial<Verification>): Promise<Verification>;
154
+ refreshUserSessions(user: User): Promise<void>;
155
+ }
156
+ type CreateCookieGetterFn = (cookieName: string, overrideAttributes?: Partial<CookieOptions> | undefined) => BetterAuthCookie;
157
+ type CheckPasswordFn<Options extends BetterAuthOptions = BetterAuthOptions> = (userId: string, ctx: GenericEndpointContext<Options>) => Promise<boolean>;
158
+ type PluginContext<Options extends BetterAuthOptions> = {
159
+ getPlugin: <ID extends BetterAuthPluginRegistryIdentifier | LiteralString, PluginOptions extends InferPluginOptions<Options, ID>>(pluginId: ID) => (ID extends BetterAuthPluginRegistryIdentifier ? BetterAuthPluginRegistry<Options, PluginOptions>[ID] extends {
160
+ creator: infer C;
161
+ } ? C extends ((...args: any[]) => infer R) ? R : never : never : BetterAuthPlugin) | null;
162
+ /**
163
+ * Checks if a plugin is enabled by its ID.
164
+ *
165
+ * @param pluginId - The ID of the plugin to check
166
+ * @returns `true` if the plugin is enabled, `false` otherwise
167
+ *
168
+ * @example
169
+ * ```ts
170
+ * if (ctx.context.hasPlugin("organization")) {
171
+ * // organization plugin is enabled
172
+ * }
173
+ * ```
174
+ */
175
+ hasPlugin: <ID extends BetterAuthPluginRegistryIdentifier | LiteralString>(pluginId: ID) => ID extends InferPluginID<Options> ? true : boolean;
176
+ };
177
+ type InfoContext = {
178
+ appName: string;
179
+ baseURL: string;
180
+ version: string;
181
+ };
182
+ type AuthContext<Options extends BetterAuthOptions = BetterAuthOptions> = PluginContext<Options> & InfoContext & {
183
+ options: Options;
184
+ trustedOrigins: string[];
185
+ /**
186
+ * Resolved list of trusted providers for account linking.
187
+ * Populated from "account.accountLinking.trustedProviders" (supports static array or async function).
188
+ */
189
+ trustedProviders: string[];
190
+ /**
191
+ * Verifies whether url is a trusted origin according to the "trustedOrigins" configuration
192
+ * @param url The url to verify against the "trustedOrigins" configuration
193
+ * @param settings Specify supported pattern matching settings
194
+ * @returns {boolean} true if the URL matches the origin pattern, false otherwise.
195
+ */
196
+ isTrustedOrigin: (url: string, settings?: {
197
+ allowRelativePaths: boolean;
198
+ }) => boolean;
199
+ oauthConfig: {
200
+ /**
201
+ * This is dangerous and should only be used in dev or staging environments.
202
+ */
203
+ skipStateCookieCheck?: boolean | undefined;
204
+ /**
205
+ * Strategy for storing OAuth state
206
+ *
207
+ * - "cookie": Store state in an encrypted cookie (stateless)
208
+ * - "database": Store state in the database
209
+ *
210
+ * @default "database" when `database` or `secondaryStorage` is configured, "cookie" otherwise
211
+ */
212
+ storeStateStrategy: "database" | "cookie";
213
+ };
214
+ /**
215
+ * New session that will be set after the request
216
+ * meaning: there is a `set-cookie` header that will set
217
+ * the session cookie. This is the fetched session. And it's set
218
+ * by `setNewSession` method.
219
+ */
220
+ newSession: {
221
+ session: Session & Record<string, any>;
222
+ user: User & Record<string, any>;
223
+ } | null;
224
+ session: {
225
+ session: Session & Record<string, any>;
226
+ user: User & Record<string, any>;
227
+ } | null;
228
+ setNewSession: (session: {
229
+ session: Session & Record<string, any>;
230
+ user: User & Record<string, any>;
231
+ } | null) => void;
232
+ socialProviders: OAuthProvider[];
233
+ authCookies: BetterAuthCookies;
234
+ logger: ReturnType<typeof createLogger>;
235
+ rateLimit: {
236
+ enabled: boolean;
237
+ window: number;
238
+ max: number;
239
+ storage: "memory" | "database" | "secondary-storage";
240
+ } & Omit<BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
241
+ adapter: DBAdapter<Options>;
242
+ internalAdapter: InternalAdapter<Options>;
243
+ createAuthCookie: CreateCookieGetterFn;
244
+ secret: string;
245
+ secretConfig: string | SecretConfig;
246
+ sessionConfig: {
247
+ updateAge: number;
248
+ expiresIn: number;
249
+ freshAge: number;
250
+ cookieRefreshCache: false | {
251
+ enabled: true;
252
+ updateAge: number;
253
+ };
254
+ };
255
+ generateId: (options: {
256
+ model: ModelNames;
257
+ size?: number | undefined;
258
+ }) => string | false;
259
+ secondaryStorage: SecondaryStorage | undefined;
260
+ password: {
261
+ hash: (password: string) => Promise<string>;
262
+ verify: (data: {
263
+ password: string;
264
+ hash: string;
265
+ }) => Promise<boolean>;
266
+ config: {
267
+ minPasswordLength: number;
268
+ maxPasswordLength: number;
269
+ };
270
+ checkPassword: CheckPasswordFn<Options>;
271
+ };
272
+ tables: BetterAuthDBSchema;
273
+ runMigrations: () => Promise<void>;
274
+ publishTelemetry: (event: {
275
+ type: string;
276
+ anonymousId?: string | undefined;
277
+ payload: Record<string, any>;
278
+ }) => Promise<void>;
279
+ /**
280
+ * Skip origin check for requests.
281
+ *
282
+ * - `true`: Skip for ALL requests (DANGEROUS - disables CSRF protection)
283
+ * - `string[]`: Skip only for specific paths (e.g., SAML callbacks)
284
+ * - `false`: Enable origin check (default)
285
+ *
286
+ * Paths support prefix matching (e.g., "/sso/saml2/callback" matches
287
+ * "/sso/saml2/callback/provider-name").
288
+ *
289
+ * @default false (true in test environments)
290
+ */
291
+ skipOriginCheck: boolean | string[];
292
+ /**
293
+ * This skips the CSRF check for all requests.
294
+ *
295
+ * This is inferred from the `options.advanced?.
296
+ * disableCSRFCheck` option.
297
+ *
298
+ * @default false
299
+ */
300
+ skipCSRFCheck: boolean;
301
+ /**
302
+ * Background task handler for deferred operations.
303
+ *
304
+ * This is inferred from the `options.advanced?.backgroundTasks?.handler` option.
305
+ * Defaults to a no-op that just runs the promise.
306
+ */
307
+ runInBackground: (promise: Promise<unknown>) => void;
308
+ /**
309
+ * Runs a task in the background if `runInBackground` is configured,
310
+ * otherwise awaits the task directly.
311
+ *
312
+ * This is useful for operations like sending emails where we want
313
+ * to avoid blocking the response when possible (for timing attack
314
+ * mitigation), but still ensure the operation completes.
315
+ */
316
+ runInBackgroundOrAwait: (promise: Promise<unknown> | void) => Awaitable<unknown>;
317
+ };
318
+ //#endregion
319
+ export { AuthContext, BetterAuthPluginRegistry, BetterAuthPluginRegistryIdentifier, GenericEndpointContext, InfoContext, InternalAdapter, PluginContext };
@@ -0,0 +1,15 @@
1
+ import { CookieOptions } from "better-call";
2
+
3
+ //#region src/types/cookie.d.ts
4
+ type BetterAuthCookie = {
5
+ name: string;
6
+ attributes: CookieOptions;
7
+ };
8
+ type BetterAuthCookies = {
9
+ sessionToken: BetterAuthCookie;
10
+ sessionData: BetterAuthCookie;
11
+ accountData: BetterAuthCookie;
12
+ dontRememberToken: BetterAuthCookie;
13
+ };
14
+ //#endregion
15
+ export { BetterAuthCookie, BetterAuthCookies };
@@ -0,0 +1,10 @@
1
+ //#region src/types/helper.d.ts
2
+ type Primitive = string | number | symbol | bigint | boolean | null | undefined;
3
+ type Awaitable<T> = T | Promise<T>;
4
+ type AwaitableFunction<T> = T | (() => Awaitable<T>);
5
+ type LiteralString = "" | (string & Record<never, never>);
6
+ type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>);
7
+ type Prettify<T> = { [K in keyof T]: T[K] } & {};
8
+ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
9
+ //#endregion
10
+ export { Awaitable, AwaitableFunction, LiteralString, LiteralUnion, Prettify, Primitive, UnionToIntersection };
@@ -0,0 +1,9 @@
1
+ import { Awaitable, AwaitableFunction, LiteralString, LiteralUnion, Prettify, Primitive, UnionToIntersection } from "./helper.mjs";
2
+ import { BetterAuthPlugin, BetterAuthPluginErrorCodePart, HookEndpointContext } from "./plugin.mjs";
3
+ import { BaseURLConfig, BetterAuthAdvancedOptions, BetterAuthDBOptions, BetterAuthOptions, BetterAuthRateLimitOptions, BetterAuthRateLimitRule, BetterAuthRateLimitStorage, DynamicBaseURLConfig, GenerateIdFn, StoreIdentifierOption } from "./init-options.mjs";
4
+ import { BetterAuthCookie, BetterAuthCookies } from "./cookie.mjs";
5
+ import { SecretConfig } from "./secret.mjs";
6
+ import { AuthContext, BetterAuthPluginRegistry, BetterAuthPluginRegistryIdentifier, GenericEndpointContext, InfoContext, InternalAdapter, PluginContext } from "./context.mjs";
7
+ import { BetterAuthClientOptions, BetterAuthClientPlugin, ClientAtomListener, ClientFetchOption, ClientStore } from "./plugin-client.mjs";
8
+ import { StandardSchemaV1 as StandardSchemaV1$1 } from "@standard-schema/spec";
9
+ export { type StandardSchemaV1$1 as StandardSchemaV1 };