@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,460 @@
1
+ import type { CookieOptions, EndpointContext } from "better-call";
2
+ import type {
3
+ Account,
4
+ BetterAuthDBSchema,
5
+ ModelNames,
6
+ SecondaryStorage,
7
+ Session,
8
+ User,
9
+ Verification,
10
+ } from "../db";
11
+ import type { DBAdapter, Where } from "../db/adapter";
12
+ import type { createLogger } from "../env";
13
+ import type { OAuthProvider } from "../oauth2";
14
+ import type { BetterAuthCookie, BetterAuthCookies } from "./cookie";
15
+ import type { Awaitable, LiteralString } from "./helper";
16
+ import type {
17
+ BetterAuthOptions,
18
+ BetterAuthRateLimitOptions,
19
+ } from "./init-options";
20
+ import type { BetterAuthPlugin } from "./plugin";
21
+ import type { SecretConfig } from "./secret";
22
+
23
+ /**
24
+ * @internal
25
+ */
26
+ type InferPluginID<O extends BetterAuthOptions> =
27
+ O["plugins"] extends Array<infer P>
28
+ ? P extends BetterAuthPlugin
29
+ ? P["id"]
30
+ : never
31
+ : never;
32
+
33
+ /**
34
+ * @internal
35
+ */
36
+ type InferPluginOptions<
37
+ O extends BetterAuthOptions,
38
+ ID extends BetterAuthPluginRegistryIdentifier | LiteralString,
39
+ > =
40
+ O["plugins"] extends Array<infer P>
41
+ ? P extends BetterAuthPlugin
42
+ ? P["id"] extends ID
43
+ ? P extends { options: infer O }
44
+ ? O
45
+ : never
46
+ : never
47
+ : never
48
+ : never;
49
+
50
+ /**
51
+ * Mutators are defined in each plugin
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * interface MyPluginOptions {
56
+ * useFeature: boolean
57
+ * }
58
+ *
59
+ * const createMyPlugin = <Options extends MyPluginOptions>(options?: Options) => ({
60
+ * id: 'my-plugin',
61
+ * version: '1.0.0',
62
+ * options,
63
+ * } satisfies BetterAuthPlugin);
64
+ *
65
+ * declare module "@better-auth/core" {
66
+ * interface BetterAuthPluginRegistry<AuthOptions, Options> {
67
+ * 'my-plugin': {
68
+ * creator: Options extends MyPluginOptions ? typeof createMyPlugin<Options>: typeof createMyPlugin
69
+ * }
70
+ * }
71
+ * }
72
+ * ```
73
+ */
74
+ // biome-ignore lint/correctness/noUnusedVariables: Auth and Context is used in the declaration merging
75
+ export interface BetterAuthPluginRegistry<AuthOptions, Options> {}
76
+ export type BetterAuthPluginRegistryIdentifier = keyof BetterAuthPluginRegistry<
77
+ unknown,
78
+ unknown
79
+ >;
80
+
81
+ export type GenericEndpointContext<
82
+ Options extends BetterAuthOptions = BetterAuthOptions,
83
+ > = EndpointContext<string, any> & {
84
+ context: AuthContext<Options>;
85
+ };
86
+
87
+ export interface InternalAdapter<
88
+ _Options extends BetterAuthOptions = BetterAuthOptions,
89
+ > {
90
+ createOAuthUser(
91
+ user: Omit<User, "id" | "createdAt" | "updatedAt">,
92
+ account: Omit<Account, "userId" | "id" | "createdAt" | "updatedAt"> &
93
+ Partial<Account>,
94
+ ): Promise<{ user: User; account: Account }>;
95
+
96
+ createUser<T extends Record<string, any>>(
97
+ user: Omit<User, "id" | "createdAt" | "updatedAt" | "emailVerified"> &
98
+ Partial<User> &
99
+ Record<string, any>,
100
+ ): Promise<T & User>;
101
+
102
+ createAccount<T extends Record<string, any>>(
103
+ account: Omit<Account, "id" | "createdAt" | "updatedAt"> &
104
+ Partial<Account> &
105
+ T,
106
+ ): Promise<T & Account>;
107
+
108
+ listSessions(
109
+ userId: string,
110
+ options?: { onlyActiveSessions?: boolean | undefined } | undefined,
111
+ ): Promise<Session[]>;
112
+
113
+ listUsers(
114
+ limit?: number | undefined,
115
+ offset?: number | undefined,
116
+ sortBy?: { field: string; direction: "asc" | "desc" } | undefined,
117
+ where?: Where[] | undefined,
118
+ ): Promise<User[]>;
119
+
120
+ countTotalUsers(where?: Where[] | undefined): Promise<number>;
121
+
122
+ deleteUser(userId: string): Promise<void>;
123
+
124
+ createSession(
125
+ userId: string,
126
+ dontRememberMe?: boolean | undefined,
127
+ override?: (Partial<Session> & Record<string, any>) | undefined,
128
+ overrideAll?: boolean | undefined,
129
+ ): Promise<Session>;
130
+
131
+ findSession(token: string): Promise<{
132
+ session: Session & Record<string, any>;
133
+ user: User & Record<string, any>;
134
+ } | null>;
135
+
136
+ findSessions(
137
+ sessionTokens: string[],
138
+ options?:
139
+ | {
140
+ onlyActiveSessions?: boolean | undefined;
141
+ }
142
+ | undefined,
143
+ ): Promise<{ session: Session; user: User }[]>;
144
+
145
+ updateSession(
146
+ sessionToken: string,
147
+ session: Partial<Session> & Record<string, any>,
148
+ ): Promise<Session | null>;
149
+
150
+ deleteSession(token: string): Promise<void>;
151
+
152
+ deleteAccounts(userId: string): Promise<void>;
153
+
154
+ /**
155
+ * Delete an account by its primary key.
156
+ *
157
+ * @param id - The account row's primary key (the `id` column, not the `accountId` column).
158
+ */
159
+ deleteAccount(id: string): Promise<void>;
160
+
161
+ /**
162
+ * Delete every session belonging to a user.
163
+ */
164
+ deleteUserSessions(userId: string): Promise<void>;
165
+
166
+ /**
167
+ * Delete sessions by their session tokens.
168
+ */
169
+ deleteSessions(sessionTokens: string[]): Promise<void>;
170
+
171
+ findOAuthUser(
172
+ email: string,
173
+ accountId: string,
174
+ providerId: string,
175
+ ): Promise<{
176
+ user: User;
177
+ linkedAccount: Account | null;
178
+ accounts: Account[];
179
+ } | null>;
180
+
181
+ findUserByEmail(
182
+ email: string,
183
+ options?: { includeAccounts: boolean } | undefined,
184
+ ): Promise<{ user: User; accounts: Account[] } | null>;
185
+
186
+ findUserById(userId: string): Promise<User | null>;
187
+
188
+ linkAccount(
189
+ account: Omit<Account, "id" | "createdAt" | "updatedAt"> & Partial<Account>,
190
+ ): Promise<Account>;
191
+
192
+ // Record<string, any> is to take into account additional fields or plugin-added fields
193
+ updateUser<T extends Record<string, any>>(
194
+ userId: string,
195
+ data: Partial<User> & Record<string, any>,
196
+ ): Promise<User & T>;
197
+
198
+ updateUserByEmail<T extends Record<string, any>>(
199
+ email: string,
200
+ data: Partial<User & Record<string, any>>,
201
+ ): Promise<User & T>;
202
+
203
+ updatePassword(userId: string, password: string): Promise<void>;
204
+
205
+ findAccounts(userId: string): Promise<Account[]>;
206
+
207
+ findAccountByProviderId(
208
+ accountId: string,
209
+ providerId: string,
210
+ ): Promise<Account | null>;
211
+
212
+ findAccountByUserId(userId: string): Promise<Account[]>;
213
+
214
+ updateAccount(id: string, data: Partial<Account>): Promise<Account>;
215
+
216
+ createVerificationValue(
217
+ data: Omit<Verification, "createdAt" | "id" | "updatedAt"> &
218
+ Partial<Verification>,
219
+ ): Promise<Verification>;
220
+
221
+ findVerificationValue(identifier: string): Promise<Verification | null>;
222
+
223
+ deleteVerificationByIdentifier(identifier: string): Promise<void>;
224
+
225
+ /**
226
+ * Atomically consume a single-use verification row by `identifier` and
227
+ * return it. Only the first concurrent caller receives the latest row;
228
+ * subsequent callers receive `null`. Consuming one row invalidates the
229
+ * whole identifier so stale rows cannot be replayed. Rows past their
230
+ * `expiresAt` are treated as already invalid: the row is deleted but
231
+ * `null` is returned, so callers do not need to gate on `expiresAt`
232
+ * themselves. Callers MUST gate any state change (issue session, mint
233
+ * token, change password) on a non-null result.
234
+ *
235
+ * Replaces the racy `findVerificationValue` + `deleteVerificationByIdentifier`
236
+ * pair at single-use credential consumption sites.
237
+ */
238
+ consumeVerificationValue(identifier: string): Promise<Verification | null>;
239
+
240
+ /**
241
+ * First-writer-wins create keyed by a deterministic primary key derived from
242
+ * `identifier`. Returns `true` when this caller created the row and `false`
243
+ * when a row for the same identifier already existed.
244
+ *
245
+ * The dual of `consumeVerificationValue`: reserve races to create a marker
246
+ * exactly once, where consume races to delete one exactly once. Use it for
247
+ * replay tombstones (a SAML assertion id, a JWT `jti`) where the first caller
248
+ * wins. The database path is atomic via the primary key; the
249
+ * secondary-storage-only path is best-effort under concurrency.
250
+ */
251
+ reserveVerificationValue(data: {
252
+ identifier: string;
253
+ value: string;
254
+ expiresAt: Date;
255
+ }): Promise<boolean>;
256
+
257
+ updateVerificationByIdentifier(
258
+ identifier: string,
259
+ data: Partial<Verification>,
260
+ ): Promise<Verification>;
261
+
262
+ refreshUserSessions(user: User): Promise<void>;
263
+ }
264
+
265
+ type CreateCookieGetterFn = (
266
+ cookieName: string,
267
+ overrideAttributes?: Partial<CookieOptions> | undefined,
268
+ ) => BetterAuthCookie;
269
+
270
+ type CheckPasswordFn<Options extends BetterAuthOptions = BetterAuthOptions> = (
271
+ userId: string,
272
+ ctx: GenericEndpointContext<Options>,
273
+ ) => Promise<boolean>;
274
+
275
+ export type PluginContext<Options extends BetterAuthOptions> = {
276
+ getPlugin: <
277
+ ID extends BetterAuthPluginRegistryIdentifier | LiteralString,
278
+ PluginOptions extends InferPluginOptions<Options, ID>,
279
+ >(
280
+ pluginId: ID,
281
+ ) =>
282
+ | (ID extends BetterAuthPluginRegistryIdentifier
283
+ ? BetterAuthPluginRegistry<Options, PluginOptions>[ID] extends {
284
+ creator: infer C;
285
+ }
286
+ ? C extends (...args: any[]) => infer R
287
+ ? R
288
+ : never
289
+ : never
290
+ : BetterAuthPlugin)
291
+ | null;
292
+ /**
293
+ * Checks if a plugin is enabled by its ID.
294
+ *
295
+ * @param pluginId - The ID of the plugin to check
296
+ * @returns `true` if the plugin is enabled, `false` otherwise
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * if (ctx.context.hasPlugin("organization")) {
301
+ * // organization plugin is enabled
302
+ * }
303
+ * ```
304
+ */
305
+ hasPlugin: <ID extends BetterAuthPluginRegistryIdentifier | LiteralString>(
306
+ pluginId: ID,
307
+ ) => ID extends InferPluginID<Options> ? true : boolean;
308
+ };
309
+
310
+ export type InfoContext = {
311
+ appName: string;
312
+ baseURL: string;
313
+ version: string;
314
+ };
315
+
316
+ export type AuthContext<Options extends BetterAuthOptions = BetterAuthOptions> =
317
+ PluginContext<Options> &
318
+ InfoContext & {
319
+ options: Options;
320
+ trustedOrigins: string[];
321
+ /**
322
+ * Resolved list of trusted providers for account linking.
323
+ * Populated from "account.accountLinking.trustedProviders" (supports static array or async function).
324
+ */
325
+ trustedProviders: string[];
326
+ /**
327
+ * Verifies whether url is a trusted origin according to the "trustedOrigins" configuration
328
+ * @param url The url to verify against the "trustedOrigins" configuration
329
+ * @param settings Specify supported pattern matching settings
330
+ * @returns {boolean} true if the URL matches the origin pattern, false otherwise.
331
+ */
332
+ isTrustedOrigin: (
333
+ url: string,
334
+ settings?: { allowRelativePaths: boolean },
335
+ ) => boolean;
336
+ oauthConfig: {
337
+ /**
338
+ * This is dangerous and should only be used in dev or staging environments.
339
+ */
340
+ skipStateCookieCheck?: boolean | undefined;
341
+ /**
342
+ * Strategy for storing OAuth state
343
+ *
344
+ * - "cookie": Store state in an encrypted cookie (stateless)
345
+ * - "database": Store state in the database
346
+ *
347
+ * @default "database" when `database` or `secondaryStorage` is configured, "cookie" otherwise
348
+ */
349
+ storeStateStrategy: "database" | "cookie";
350
+ };
351
+ /**
352
+ * New session that will be set after the request
353
+ * meaning: there is a `set-cookie` header that will set
354
+ * the session cookie. This is the fetched session. And it's set
355
+ * by `setNewSession` method.
356
+ */
357
+ newSession: {
358
+ session: Session & Record<string, any>;
359
+ user: User & Record<string, any>;
360
+ } | null;
361
+ session: {
362
+ session: Session & Record<string, any>;
363
+ user: User & Record<string, any>;
364
+ } | null;
365
+ setNewSession: (
366
+ session: {
367
+ session: Session & Record<string, any>;
368
+ user: User & Record<string, any>;
369
+ } | null,
370
+ ) => void;
371
+ socialProviders: OAuthProvider[];
372
+ authCookies: BetterAuthCookies;
373
+ logger: ReturnType<typeof createLogger>;
374
+ rateLimit: {
375
+ enabled: boolean;
376
+ window: number;
377
+ max: number;
378
+ storage: "memory" | "database" | "secondary-storage";
379
+ } & Omit<
380
+ BetterAuthRateLimitOptions,
381
+ "enabled" | "window" | "max" | "storage"
382
+ >;
383
+ adapter: DBAdapter<Options>;
384
+ internalAdapter: InternalAdapter<Options>;
385
+ createAuthCookie: CreateCookieGetterFn;
386
+ secret: string;
387
+ secretConfig: string | SecretConfig;
388
+ sessionConfig: {
389
+ updateAge: number;
390
+ expiresIn: number;
391
+ freshAge: number;
392
+ cookieRefreshCache:
393
+ | false
394
+ | {
395
+ enabled: true;
396
+ updateAge: number;
397
+ };
398
+ };
399
+ generateId: (options: {
400
+ model: ModelNames;
401
+ size?: number | undefined;
402
+ }) => string | false;
403
+ secondaryStorage: SecondaryStorage | undefined;
404
+ password: {
405
+ hash: (password: string) => Promise<string>;
406
+ verify: (data: { password: string; hash: string }) => Promise<boolean>;
407
+ config: {
408
+ minPasswordLength: number;
409
+ maxPasswordLength: number;
410
+ };
411
+ checkPassword: CheckPasswordFn<Options>;
412
+ };
413
+ tables: BetterAuthDBSchema;
414
+ runMigrations: () => Promise<void>;
415
+ publishTelemetry: (event: {
416
+ type: string;
417
+ anonymousId?: string | undefined;
418
+ payload: Record<string, any>;
419
+ }) => Promise<void>;
420
+ /**
421
+ * Skip origin check for requests.
422
+ *
423
+ * - `true`: Skip for ALL requests (DANGEROUS - disables CSRF protection)
424
+ * - `string[]`: Skip only for specific paths (e.g., SAML callbacks)
425
+ * - `false`: Enable origin check (default)
426
+ *
427
+ * Paths support prefix matching (e.g., "/sso/saml2/callback" matches
428
+ * "/sso/saml2/callback/provider-name").
429
+ *
430
+ * @default false (true in test environments)
431
+ */
432
+ skipOriginCheck: boolean | string[];
433
+ /**
434
+ * This skips the CSRF check for all requests.
435
+ *
436
+ * This is inferred from the `options.advanced?.
437
+ * disableCSRFCheck` option.
438
+ *
439
+ * @default false
440
+ */
441
+ skipCSRFCheck: boolean;
442
+ /**
443
+ * Background task handler for deferred operations.
444
+ *
445
+ * This is inferred from the `options.advanced?.backgroundTasks?.handler` option.
446
+ * Defaults to a no-op that just runs the promise.
447
+ */
448
+ runInBackground: (promise: Promise<unknown>) => void;
449
+ /**
450
+ * Runs a task in the background if `runInBackground` is configured,
451
+ * otherwise awaits the task directly.
452
+ *
453
+ * This is useful for operations like sending emails where we want
454
+ * to avoid blocking the response when possible (for timing attack
455
+ * mitigation), but still ensure the operation completes.
456
+ */
457
+ runInBackgroundOrAwait: (
458
+ promise: Promise<unknown> | void,
459
+ ) => Awaitable<unknown>;
460
+ };
@@ -0,0 +1,10 @@
1
+ import type { CookieOptions } from "better-call";
2
+
3
+ export type BetterAuthCookie = { name: string; attributes: CookieOptions };
4
+
5
+ export type BetterAuthCookies = {
6
+ sessionToken: BetterAuthCookie;
7
+ sessionData: BetterAuthCookie;
8
+ accountData: BetterAuthCookie;
9
+ dontRememberToken: BetterAuthCookie;
10
+ };
@@ -0,0 +1,27 @@
1
+ export type Primitive =
2
+ | string
3
+ | number
4
+ | symbol
5
+ | bigint
6
+ | boolean
7
+ | null
8
+ | undefined;
9
+
10
+ export type Awaitable<T> = T | Promise<T>;
11
+ export type AwaitableFunction<T> = T | (() => Awaitable<T>);
12
+ export type LiteralString = "" | (string & Record<never, never>);
13
+ export type LiteralUnion<LiteralType, BaseType extends Primitive> =
14
+ | LiteralType
15
+ | (BaseType & Record<never, never>);
16
+
17
+ export type Prettify<T> = {
18
+ [K in keyof T]: T[K];
19
+ } & {};
20
+
21
+ export type UnionToIntersection<U> = (
22
+ U extends any
23
+ ? (k: U) => void
24
+ : never
25
+ ) extends (k: infer I) => void
26
+ ? I
27
+ : never;
@@ -0,0 +1,40 @@
1
+ export type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ export type {
3
+ AuthContext,
4
+ BetterAuthPluginRegistry,
5
+ BetterAuthPluginRegistryIdentifier,
6
+ GenericEndpointContext,
7
+ InfoContext,
8
+ InternalAdapter,
9
+ PluginContext,
10
+ } from "./context";
11
+ export type {
12
+ BetterAuthCookie,
13
+ BetterAuthCookies,
14
+ } from "./cookie";
15
+ export type * from "./helper";
16
+ export type {
17
+ BaseURLConfig,
18
+ BetterAuthAdvancedOptions,
19
+ BetterAuthDBOptions,
20
+ BetterAuthOptions,
21
+ BetterAuthRateLimitOptions,
22
+ BetterAuthRateLimitRule,
23
+ BetterAuthRateLimitStorage,
24
+ DynamicBaseURLConfig,
25
+ GenerateIdFn,
26
+ StoreIdentifierOption,
27
+ } from "./init-options";
28
+ export type {
29
+ BetterAuthPlugin,
30
+ BetterAuthPluginErrorCodePart,
31
+ HookEndpointContext,
32
+ } from "./plugin";
33
+ export type {
34
+ BetterAuthClientOptions,
35
+ BetterAuthClientPlugin,
36
+ ClientAtomListener,
37
+ ClientFetchOption,
38
+ ClientStore,
39
+ } from "./plugin-client";
40
+ export type { SecretConfig } from "./secret";