@better-auth/core 1.5.6 → 1.5.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/api/index.d.mts +41 -11
  2. package/dist/api/index.mjs +1 -2
  3. package/dist/api/index.mjs.map +1 -1
  4. package/dist/async_hooks/index.mjs +1 -1
  5. package/dist/async_hooks/pure.index.mjs +1 -1
  6. package/dist/async_hooks/pure.index.mjs.map +1 -1
  7. package/dist/context/endpoint-context.d.mts +1 -1
  8. package/dist/context/endpoint-context.mjs +1 -2
  9. package/dist/context/endpoint-context.mjs.map +1 -1
  10. package/dist/context/global.mjs +2 -2
  11. package/dist/context/global.mjs.map +1 -1
  12. package/dist/context/index.mjs +1 -2
  13. package/dist/context/request-state.mjs +1 -2
  14. package/dist/context/request-state.mjs.map +1 -1
  15. package/dist/context/transaction.mjs +1 -2
  16. package/dist/context/transaction.mjs.map +1 -1
  17. package/dist/db/adapter/factory.mjs +1 -2
  18. package/dist/db/adapter/factory.mjs.map +1 -1
  19. package/dist/db/adapter/get-default-field-name.mjs +1 -2
  20. package/dist/db/adapter/get-default-field-name.mjs.map +1 -1
  21. package/dist/db/adapter/get-default-model-name.mjs +1 -2
  22. package/dist/db/adapter/get-default-model-name.mjs.map +1 -1
  23. package/dist/db/adapter/get-field-attributes.mjs +1 -2
  24. package/dist/db/adapter/get-field-attributes.mjs.map +1 -1
  25. package/dist/db/adapter/get-field-name.mjs +1 -2
  26. package/dist/db/adapter/get-field-name.mjs.map +1 -1
  27. package/dist/db/adapter/get-id-field.mjs +1 -2
  28. package/dist/db/adapter/get-id-field.mjs.map +1 -1
  29. package/dist/db/adapter/get-model-name.mjs +1 -2
  30. package/dist/db/adapter/get-model-name.mjs.map +1 -1
  31. package/dist/db/adapter/index.mjs +1 -2
  32. package/dist/db/adapter/index.mjs.map +1 -1
  33. package/dist/db/adapter/utils.mjs +1 -1
  34. package/dist/db/adapter/utils.mjs.map +1 -1
  35. package/dist/db/get-tables.mjs +1 -1
  36. package/dist/db/index.mjs +1 -2
  37. package/dist/db/schema/account.mjs +1 -2
  38. package/dist/db/schema/account.mjs.map +1 -1
  39. package/dist/db/schema/rate-limit.mjs +1 -2
  40. package/dist/db/schema/rate-limit.mjs.map +1 -1
  41. package/dist/db/schema/session.mjs +1 -2
  42. package/dist/db/schema/session.mjs.map +1 -1
  43. package/dist/db/schema/shared.mjs +1 -2
  44. package/dist/db/schema/shared.mjs.map +1 -1
  45. package/dist/db/schema/user.mjs +1 -2
  46. package/dist/db/schema/user.mjs.map +1 -1
  47. package/dist/db/schema/verification.mjs +1 -2
  48. package/dist/db/schema/verification.mjs.map +1 -1
  49. package/dist/env/color-depth.mjs +1 -2
  50. package/dist/env/color-depth.mjs.map +1 -1
  51. package/dist/env/env-impl.mjs +1 -1
  52. package/dist/env/env-impl.mjs.map +1 -1
  53. package/dist/env/index.mjs +1 -2
  54. package/dist/env/logger.mjs +1 -2
  55. package/dist/env/logger.mjs.map +1 -1
  56. package/dist/error/codes.mjs +1 -2
  57. package/dist/error/codes.mjs.map +1 -1
  58. package/dist/error/index.mjs +1 -2
  59. package/dist/error/index.mjs.map +1 -1
  60. package/dist/index.mjs +1 -1
  61. package/dist/instrumentation/attributes.mjs +1 -2
  62. package/dist/instrumentation/attributes.mjs.map +1 -1
  63. package/dist/instrumentation/index.mjs +1 -2
  64. package/dist/instrumentation/tracer.mjs +2 -3
  65. package/dist/instrumentation/tracer.mjs.map +1 -1
  66. package/dist/oauth2/client-credentials-token.mjs +1 -2
  67. package/dist/oauth2/client-credentials-token.mjs.map +1 -1
  68. package/dist/oauth2/create-authorization-url.mjs +1 -2
  69. package/dist/oauth2/create-authorization-url.mjs.map +1 -1
  70. package/dist/oauth2/index.mjs +1 -2
  71. package/dist/oauth2/refresh-access-token.mjs +1 -2
  72. package/dist/oauth2/refresh-access-token.mjs.map +1 -1
  73. package/dist/oauth2/utils.mjs +1 -2
  74. package/dist/oauth2/utils.mjs.map +1 -1
  75. package/dist/oauth2/validate-authorization-code.mjs +1 -2
  76. package/dist/oauth2/validate-authorization-code.mjs.map +1 -1
  77. package/dist/oauth2/verify.mjs +1 -2
  78. package/dist/oauth2/verify.mjs.map +1 -1
  79. package/dist/social-providers/apple.mjs +1 -2
  80. package/dist/social-providers/apple.mjs.map +1 -1
  81. package/dist/social-providers/atlassian.mjs +1 -2
  82. package/dist/social-providers/atlassian.mjs.map +1 -1
  83. package/dist/social-providers/cognito.mjs +1 -2
  84. package/dist/social-providers/cognito.mjs.map +1 -1
  85. package/dist/social-providers/discord.mjs +1 -2
  86. package/dist/social-providers/discord.mjs.map +1 -1
  87. package/dist/social-providers/dropbox.mjs +1 -2
  88. package/dist/social-providers/dropbox.mjs.map +1 -1
  89. package/dist/social-providers/facebook.mjs +1 -2
  90. package/dist/social-providers/facebook.mjs.map +1 -1
  91. package/dist/social-providers/figma.mjs +1 -2
  92. package/dist/social-providers/figma.mjs.map +1 -1
  93. package/dist/social-providers/github.mjs +1 -2
  94. package/dist/social-providers/github.mjs.map +1 -1
  95. package/dist/social-providers/gitlab.mjs +1 -2
  96. package/dist/social-providers/gitlab.mjs.map +1 -1
  97. package/dist/social-providers/google.mjs +1 -2
  98. package/dist/social-providers/google.mjs.map +1 -1
  99. package/dist/social-providers/huggingface.mjs +1 -2
  100. package/dist/social-providers/huggingface.mjs.map +1 -1
  101. package/dist/social-providers/index.mjs +1 -2
  102. package/dist/social-providers/index.mjs.map +1 -1
  103. package/dist/social-providers/kakao.mjs +1 -2
  104. package/dist/social-providers/kakao.mjs.map +1 -1
  105. package/dist/social-providers/kick.mjs +1 -2
  106. package/dist/social-providers/kick.mjs.map +1 -1
  107. package/dist/social-providers/line.mjs +1 -2
  108. package/dist/social-providers/line.mjs.map +1 -1
  109. package/dist/social-providers/linear.mjs +1 -2
  110. package/dist/social-providers/linear.mjs.map +1 -1
  111. package/dist/social-providers/linkedin.mjs +1 -2
  112. package/dist/social-providers/linkedin.mjs.map +1 -1
  113. package/dist/social-providers/microsoft-entra-id.mjs +1 -2
  114. package/dist/social-providers/microsoft-entra-id.mjs.map +1 -1
  115. package/dist/social-providers/naver.mjs +1 -2
  116. package/dist/social-providers/naver.mjs.map +1 -1
  117. package/dist/social-providers/notion.mjs +1 -2
  118. package/dist/social-providers/notion.mjs.map +1 -1
  119. package/dist/social-providers/paybin.mjs +1 -2
  120. package/dist/social-providers/paybin.mjs.map +1 -1
  121. package/dist/social-providers/paypal.mjs +1 -2
  122. package/dist/social-providers/paypal.mjs.map +1 -1
  123. package/dist/social-providers/polar.mjs +1 -2
  124. package/dist/social-providers/polar.mjs.map +1 -1
  125. package/dist/social-providers/railway.mjs +1 -2
  126. package/dist/social-providers/railway.mjs.map +1 -1
  127. package/dist/social-providers/reddit.mjs +1 -2
  128. package/dist/social-providers/reddit.mjs.map +1 -1
  129. package/dist/social-providers/roblox.mjs +1 -2
  130. package/dist/social-providers/roblox.mjs.map +1 -1
  131. package/dist/social-providers/salesforce.mjs +1 -2
  132. package/dist/social-providers/salesforce.mjs.map +1 -1
  133. package/dist/social-providers/slack.mjs +1 -2
  134. package/dist/social-providers/slack.mjs.map +1 -1
  135. package/dist/social-providers/spotify.mjs +1 -2
  136. package/dist/social-providers/spotify.mjs.map +1 -1
  137. package/dist/social-providers/tiktok.mjs +1 -2
  138. package/dist/social-providers/tiktok.mjs.map +1 -1
  139. package/dist/social-providers/twitch.mjs +1 -2
  140. package/dist/social-providers/twitch.mjs.map +1 -1
  141. package/dist/social-providers/twitter.mjs +1 -2
  142. package/dist/social-providers/twitter.mjs.map +1 -1
  143. package/dist/social-providers/vercel.mjs +1 -2
  144. package/dist/social-providers/vercel.mjs.map +1 -1
  145. package/dist/social-providers/vk.mjs +1 -2
  146. package/dist/social-providers/vk.mjs.map +1 -1
  147. package/dist/social-providers/wechat.mjs +1 -2
  148. package/dist/social-providers/wechat.mjs.map +1 -1
  149. package/dist/social-providers/zoom.mjs +1 -2
  150. package/dist/social-providers/zoom.mjs.map +1 -1
  151. package/dist/types/context.d.mts +1 -3
  152. package/dist/types/plugin.d.mts +4 -1
  153. package/dist/utils/db.mjs +1 -1
  154. package/dist/utils/deprecate.mjs +1 -1
  155. package/dist/utils/error-codes.mjs +1 -1
  156. package/dist/utils/fetch-metadata.mjs +1 -1
  157. package/dist/utils/id.mjs +1 -2
  158. package/dist/utils/id.mjs.map +1 -1
  159. package/dist/utils/ip.mjs +1 -2
  160. package/dist/utils/ip.mjs.map +1 -1
  161. package/dist/utils/json.mjs +1 -2
  162. package/dist/utils/json.mjs.map +1 -1
  163. package/dist/utils/string.mjs +1 -1
  164. package/dist/utils/url.mjs +1 -1
  165. package/package.json +5 -5
  166. package/src/api/index.ts +151 -41
  167. package/src/context/endpoint-context.ts +2 -1
  168. package/src/types/context.ts +1 -3
  169. package/src/types/plugin.ts +14 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-auth/core",
3
- "version": "1.5.6",
3
+ "version": "1.5.7-beta.1",
4
4
  "description": "The most comprehensive authentication framework for TypeScript.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -148,18 +148,18 @@
148
148
  "@opentelemetry/api": "^1.9.0",
149
149
  "@opentelemetry/sdk-trace-base": "^1.30.0",
150
150
  "@opentelemetry/sdk-trace-node": "^1.30.0",
151
- "better-call": "1.3.2",
151
+ "better-call": "2.0.2",
152
152
  "@cloudflare/workers-types": "^4.20250121.0",
153
153
  "jose": "^6.1.3",
154
- "kysely": "^0.28.12",
154
+ "kysely": "^0.28.14",
155
155
  "nanostores": "^1.1.1",
156
- "tsdown": "0.21.0-beta.2"
156
+ "tsdown": "0.21.1"
157
157
  },
158
158
  "peerDependencies": {
159
159
  "@better-auth/utils": "0.3.1",
160
160
  "@better-fetch/fetch": "1.1.21",
161
161
  "@opentelemetry/api": "^1.9.0",
162
- "better-call": "1.3.2",
162
+ "better-call": "2.0.2",
163
163
  "@cloudflare/workers-types": ">=4",
164
164
  "jose": "^6.1.0",
165
165
  "kysely": "^0.28.5",
package/src/api/index.ts CHANGED
@@ -1,7 +1,15 @@
1
1
  import type {
2
+ Endpoint,
2
3
  EndpointContext,
3
- EndpointOptions,
4
- StrictEndpoint,
4
+ EndpointMetadata,
5
+ EndpointRuntimeOptions,
6
+ HTTPMethod,
7
+ Middleware,
8
+ ResolveBodyInput,
9
+ ResolveErrorInput,
10
+ ResolveMetaInput,
11
+ ResolveQueryInput,
12
+ StandardSchemaV1,
5
13
  } from "better-call";
6
14
  import { createEndpoint, createMiddleware } from "better-call";
7
15
  import { runWithEndpointContext } from "../context";
@@ -33,47 +41,145 @@ export const createAuthMiddleware = createMiddleware.create({
33
41
 
34
42
  const use = [optionsMiddleware];
35
43
 
36
- type EndpointHandler<
37
- Path extends string,
38
- Options extends EndpointOptions,
39
- R,
40
- > = (context: EndpointContext<Path, Options, AuthContext>) => Promise<R>;
44
+ type BodyOption<M, B extends object | undefined = undefined> = M extends
45
+ | "GET"
46
+ | "HEAD"
47
+ | ("GET" | "HEAD")[]
48
+ ? { body?: never }
49
+ : { body?: B };
50
+
51
+ type AuthEndpointOptions<
52
+ Method extends HTTPMethod | HTTPMethod[] | "*",
53
+ BodySchema extends object | undefined,
54
+ QuerySchema extends object | undefined,
55
+ Use extends Middleware[],
56
+ ReqHeaders extends boolean,
57
+ ReqRequest extends boolean,
58
+ Meta extends EndpointMetadata | undefined,
59
+ ErrorSchema extends StandardSchemaV1 | undefined = undefined,
60
+ > = { method: Method } & BodyOption<Method, BodySchema> & {
61
+ query?: QuerySchema;
62
+ use?: [...Use];
63
+ requireHeaders?: ReqHeaders;
64
+ requireRequest?: ReqRequest;
65
+ error?: ErrorSchema;
66
+ cloneRequest?: boolean;
67
+ disableBody?: boolean;
68
+ metadata?: Meta;
69
+ [key: string]: any;
70
+ };
71
+
72
+ /**
73
+ * Normalize readonly tuples produced by `const` type parameters
74
+ * into mutable arrays so downstream `M extends Array<any>` checks work.
75
+ */
76
+ type NormalizeMethod<M> = M extends readonly (infer E)[] ? E[] : M;
41
77
 
78
+ // Path + options + handler overload
42
79
  export function createAuthEndpoint<
43
80
  Path extends string,
44
- Options extends EndpointOptions,
45
- R,
81
+ const Method extends HTTPMethod | HTTPMethod[] | "*",
82
+ BodySchema extends object | undefined = undefined,
83
+ QuerySchema extends object | undefined = undefined,
84
+ Use extends Middleware[] = [],
85
+ ReqHeaders extends boolean = false,
86
+ ReqRequest extends boolean = false,
87
+ R = unknown,
88
+ Meta extends EndpointMetadata | undefined = undefined,
89
+ ErrorSchema extends StandardSchemaV1 | undefined = undefined,
46
90
  >(
47
91
  path: Path,
48
- options: Options,
49
- handler: EndpointHandler<Path, Options, R>,
50
- ): StrictEndpoint<Path, Options, R>;
51
-
52
- export function createAuthEndpoint<
53
- Path extends string,
54
- Options extends EndpointOptions,
92
+ options: AuthEndpointOptions<
93
+ Method,
94
+ BodySchema,
95
+ QuerySchema,
96
+ Use,
97
+ ReqHeaders,
98
+ ReqRequest,
99
+ Meta,
100
+ ErrorSchema
101
+ >,
102
+ handler: (
103
+ ctx: EndpointContext<
104
+ Path,
105
+ Method,
106
+ BodySchema,
107
+ QuerySchema,
108
+ Use,
109
+ ReqHeaders,
110
+ ReqRequest,
111
+ AuthContext,
112
+ Meta
113
+ >,
114
+ ) => Promise<R>,
115
+ ): Endpoint<
116
+ Path,
117
+ NormalizeMethod<Method>,
118
+ ResolveBodyInput<BodySchema, Meta>,
119
+ ResolveQueryInput<QuerySchema, Meta>,
120
+ Use,
55
121
  R,
56
- >(
57
- options: Options,
58
- handler: EndpointHandler<Path, Options, R>,
59
- ): StrictEndpoint<Path, Options, R>;
122
+ ResolveMetaInput<Meta>,
123
+ ResolveErrorInput<ErrorSchema, Meta>
124
+ >;
60
125
 
126
+ // Options-only (virtual/path-less) overload
61
127
  export function createAuthEndpoint<
62
- Path extends string,
63
- Opts extends EndpointOptions,
64
- R,
128
+ const Method extends HTTPMethod | HTTPMethod[] | "*",
129
+ BodySchema extends object | undefined = undefined,
130
+ QuerySchema extends object | undefined = undefined,
131
+ Use extends Middleware[] = [],
132
+ ReqHeaders extends boolean = false,
133
+ ReqRequest extends boolean = false,
134
+ R = unknown,
135
+ Meta extends EndpointMetadata | undefined = undefined,
136
+ ErrorSchema extends StandardSchemaV1 | undefined = undefined,
65
137
  >(
66
- pathOrOptions: Path | Opts,
67
- handlerOrOptions: EndpointHandler<Path, Opts, R> | Opts,
138
+ options: AuthEndpointOptions<
139
+ Method,
140
+ BodySchema,
141
+ QuerySchema,
142
+ Use,
143
+ ReqHeaders,
144
+ ReqRequest,
145
+ Meta,
146
+ ErrorSchema
147
+ >,
148
+ handler: (
149
+ ctx: EndpointContext<
150
+ string,
151
+ Method,
152
+ BodySchema,
153
+ QuerySchema,
154
+ Use,
155
+ ReqHeaders,
156
+ ReqRequest,
157
+ AuthContext,
158
+ Meta
159
+ >,
160
+ ) => Promise<R>,
161
+ ): Endpoint<
162
+ string,
163
+ NormalizeMethod<Method>,
164
+ ResolveBodyInput<BodySchema, Meta>,
165
+ ResolveQueryInput<QuerySchema, Meta>,
166
+ Use,
167
+ R,
168
+ ResolveMetaInput<Meta>,
169
+ ResolveErrorInput<ErrorSchema, Meta>
170
+ >;
171
+
172
+ // Implementation
173
+ export function createAuthEndpoint(
174
+ pathOrOptions: any,
175
+ handlerOrOptions: any,
68
176
  handlerOrNever?: any,
69
177
  ) {
70
- const path: Path | undefined =
178
+ const path: string | undefined =
71
179
  typeof pathOrOptions === "string" ? pathOrOptions : undefined;
72
- const options: Opts =
73
- typeof handlerOrOptions === "object"
74
- ? handlerOrOptions
75
- : (pathOrOptions as Opts);
76
- const handler: EndpointHandler<Path, Opts, R> =
180
+ const options: EndpointRuntimeOptions =
181
+ typeof handlerOrOptions === "object" ? handlerOrOptions : pathOrOptions;
182
+ const handler =
77
183
  typeof handlerOrOptions === "function" ? handlerOrOptions : handlerOrNever;
78
184
 
79
185
  if (path) {
@@ -82,9 +188,9 @@ export function createAuthEndpoint<
82
188
  {
83
189
  ...options,
84
190
  use: [...(options?.use || []), ...use],
85
- },
191
+ } as any,
86
192
  // todo: prettify the code, we want to call `runWithEndpointContext` to top level
87
- async (ctx) => runWithEndpointContext(ctx as any, () => handler(ctx)),
193
+ async (ctx: any) => runWithEndpointContext(ctx, () => handler(ctx)),
88
194
  );
89
195
  }
90
196
 
@@ -92,15 +198,19 @@ export function createAuthEndpoint<
92
198
  {
93
199
  ...options,
94
200
  use: [...(options?.use || []), ...use],
95
- },
201
+ } as any,
96
202
  // todo: prettify the code, we want to call `runWithEndpointContext` to top level
97
- async (ctx) => runWithEndpointContext(ctx as any, () => handler(ctx)),
203
+ async (ctx: any) => runWithEndpointContext(ctx, () => handler(ctx)),
98
204
  );
99
205
  }
100
206
 
101
- export type AuthEndpoint<
102
- Path extends string,
103
- Opts extends EndpointOptions,
104
- R,
105
- > = ReturnType<typeof createAuthEndpoint<Path, Opts, R>>;
106
- export type AuthMiddleware = ReturnType<typeof createAuthMiddleware>;
207
+ export type AuthEndpoint = ReturnType<typeof createAuthEndpoint>;
208
+ /**
209
+ * The handler type for plugin hooks.
210
+ *
211
+ * Accepts both `Middleware` instances (from `createAuthMiddleware`)
212
+ * and plain async functions for better-call v1/v2 compatibility.
213
+ */
214
+ export type AuthMiddleware = (
215
+ inputContext: Record<string, any>,
216
+ ) => Promise<unknown>;
@@ -5,7 +5,8 @@ import type { AuthContext } from "../types";
5
5
  import { __getBetterAuthGlobal } from "./global";
6
6
 
7
7
  export type AuthEndpointContext = Partial<
8
- InputContext<string, any> & EndpointContext<string, any>
8
+ InputContext<string, any, any, any, any, any> &
9
+ EndpointContext<string, any, any, any, any, any, any, AuthContext>
9
10
  > & {
10
11
  context: AuthContext;
11
12
  };
@@ -79,9 +79,7 @@ export type BetterAuthPluginRegistryIdentifier = keyof BetterAuthPluginRegistry<
79
79
 
80
80
  export type GenericEndpointContext<
81
81
  Options extends BetterAuthOptions = BetterAuthOptions,
82
- > = EndpointContext<string, any> & {
83
- context: AuthContext<Options>;
84
- };
82
+ > = EndpointContext<string, any, any, any, any, any, any, AuthContext<Options>>;
85
83
 
86
84
  export interface InternalAdapter<
87
85
  _Options extends BetterAuthOptions = BetterAuthOptions,
@@ -19,7 +19,20 @@ type DeepPartial<T> = T extends Function
19
19
  : T;
20
20
 
21
21
  export type HookEndpointContext = Partial<
22
- EndpointContext<string, any> & Omit<InputContext<string, any>, "method">
22
+ EndpointContext<
23
+ string,
24
+ any,
25
+ any,
26
+ any,
27
+ any,
28
+ any,
29
+ any,
30
+ AuthContext & {
31
+ returned?: unknown | undefined;
32
+ responseHeaders?: Headers | undefined;
33
+ }
34
+ > &
35
+ Omit<InputContext<string, any, any, any, any, any>, "method">
23
36
  > & {
24
37
  path?: string;
25
38
  context: AuthContext & {