@better-auth/core 1.7.0-rc.4 → 1.7.0-rc.6

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 (113) hide show
  1. package/dist/api/index.d.mts +39 -60
  2. package/dist/api/index.mjs +39 -26
  3. package/dist/async_hooks/index.d.mts +1 -0
  4. package/dist/async_hooks/pure.index.d.mts +1 -0
  5. package/dist/context/endpoint-context.d.mts +1 -1
  6. package/dist/context/global.d.mts +1 -0
  7. package/dist/context/global.mjs +1 -1
  8. package/dist/context/request-state.d.mts +1 -0
  9. package/dist/context/transaction.d.mts +2 -3
  10. package/dist/db/adapter/factory.d.mts +5 -3
  11. package/dist/db/adapter/factory.mjs +1 -1
  12. package/dist/db/adapter/get-default-field-name.d.mts +9 -2
  13. package/dist/db/adapter/get-default-model-name.d.mts +5 -1
  14. package/dist/db/adapter/get-field-attributes.d.mts +11 -4
  15. package/dist/db/adapter/get-field-name.d.mts +9 -2
  16. package/dist/db/adapter/get-id-field.d.mts +12 -4
  17. package/dist/db/adapter/get-model-name.d.mts +5 -1
  18. package/dist/db/adapter/index.d.mts +32 -7
  19. package/dist/db/adapter/types.d.mts +17 -5
  20. package/dist/db/adapter/utils.d.mts +1 -0
  21. package/dist/db/database-index.d.mts +12 -2
  22. package/dist/db/get-tables.d.mts +0 -1
  23. package/dist/db/plugin.d.mts +3 -3
  24. package/dist/db/schema/account.d.mts +1 -1
  25. package/dist/db/schema/rate-limit.d.mts +1 -1
  26. package/dist/db/schema/session.d.mts +1 -1
  27. package/dist/db/schema/shared.d.mts +1 -0
  28. package/dist/db/schema/user.d.mts +1 -1
  29. package/dist/db/schema/verification.d.mts +1 -1
  30. package/dist/db/type.d.mts +11 -8
  31. package/dist/env/logger.d.mts +25 -25
  32. package/dist/error/codes.d.mts +1 -0
  33. package/dist/error/index.d.mts +1 -0
  34. package/dist/index.d.mts +1 -1
  35. package/dist/instrumentation/attributes.d.mts +1 -0
  36. package/dist/instrumentation/pure.index.d.mts +1 -0
  37. package/dist/instrumentation/tracer.mjs +1 -1
  38. package/dist/oauth2/authorization-params.d.mts +1 -0
  39. package/dist/oauth2/client-assertion.d.mts +13 -3
  40. package/dist/oauth2/client-credentials-token.d.mts +17 -3
  41. package/dist/oauth2/create-authorization-url.d.mts +21 -3
  42. package/dist/oauth2/dpop.d.mts +23 -2
  43. package/dist/oauth2/dpop.mjs +1 -1
  44. package/dist/oauth2/oauth-provider.d.mts +7 -13
  45. package/dist/oauth2/refresh-access-token.d.mts +19 -3
  46. package/dist/oauth2/refresh-access-token.mjs +1 -1
  47. package/dist/oauth2/reject-redirects.mjs +1 -1
  48. package/dist/oauth2/token-endpoint-auth.d.mts +1 -0
  49. package/dist/oauth2/utils.d.mts +1 -0
  50. package/dist/oauth2/utils.mjs +1 -1
  51. package/dist/oauth2/validate-authorization-code.d.mts +29 -5
  52. package/dist/oauth2/verify-id-token.d.mts +1 -1
  53. package/dist/oauth2/verify.d.mts +7 -5
  54. package/dist/oauth2/verify.mjs +2 -2
  55. package/dist/social-providers/apple.d.mts +18 -5
  56. package/dist/social-providers/atlassian.d.mts +15 -4
  57. package/dist/social-providers/cognito.d.mts +18 -5
  58. package/dist/social-providers/discord.d.mts +13 -4
  59. package/dist/social-providers/dropbox.d.mts +15 -4
  60. package/dist/social-providers/facebook.d.mts +18 -6
  61. package/dist/social-providers/figma.d.mts +15 -4
  62. package/dist/social-providers/github.d.mts +16 -4
  63. package/dist/social-providers/gitlab.d.mts +16 -4
  64. package/dist/social-providers/google.d.mts +25 -6
  65. package/dist/social-providers/huggingface.d.mts +15 -4
  66. package/dist/social-providers/index.d.mts +504 -113
  67. package/dist/social-providers/kakao.d.mts +13 -4
  68. package/dist/social-providers/kick.d.mts +15 -4
  69. package/dist/social-providers/line.d.mts +16 -4
  70. package/dist/social-providers/linear.d.mts +14 -4
  71. package/dist/social-providers/linkedin.d.mts +14 -4
  72. package/dist/social-providers/microsoft-entra-id.d.mts +14 -5
  73. package/dist/social-providers/microsoft-entra-id.mjs +1 -2
  74. package/dist/social-providers/naver.d.mts +22 -23
  75. package/dist/social-providers/notion.d.mts +14 -4
  76. package/dist/social-providers/paybin.d.mts +16 -4
  77. package/dist/social-providers/paypal.d.mts +13 -4
  78. package/dist/social-providers/polar.d.mts +15 -4
  79. package/dist/social-providers/railway.d.mts +15 -4
  80. package/dist/social-providers/reddit.d.mts +13 -4
  81. package/dist/social-providers/roblox.d.mts +13 -4
  82. package/dist/social-providers/salesforce.d.mts +15 -4
  83. package/dist/social-providers/slack.d.mts +13 -4
  84. package/dist/social-providers/spotify.d.mts +15 -4
  85. package/dist/social-providers/tiktok.d.mts +14 -6
  86. package/dist/social-providers/twitch.d.mts +13 -4
  87. package/dist/social-providers/twitter.d.mts +19 -26
  88. package/dist/social-providers/vercel.d.mts +15 -4
  89. package/dist/social-providers/vk.d.mts +16 -4
  90. package/dist/social-providers/wechat.d.mts +12 -4
  91. package/dist/social-providers/zoom.d.mts +18 -6
  92. package/dist/types/context.d.mts +2 -2
  93. package/dist/types/cookie.d.mts +1 -1
  94. package/dist/types/helper.d.mts +1 -1
  95. package/dist/types/index.d.mts +1 -1
  96. package/dist/types/init-options.d.mts +18 -26
  97. package/dist/types/plugin-client.d.mts +3 -1
  98. package/dist/types/plugin.d.mts +2 -2
  99. package/dist/utils/async.d.mts +1 -0
  100. package/dist/utils/db.d.mts +0 -1
  101. package/dist/utils/deprecate.d.mts +1 -0
  102. package/dist/utils/email.d.mts +4 -1
  103. package/dist/utils/error-codes.d.mts +2 -2
  104. package/dist/utils/host.d.mts +1 -27
  105. package/dist/utils/host.mjs +1 -1
  106. package/dist/utils/ip.d.mts +0 -1
  107. package/dist/utils/ip.mjs +1 -1
  108. package/dist/utils/is-api-error.d.mts +1 -0
  109. package/dist/utils/redirect-uri.d.mts +1 -0
  110. package/package.json +4 -4
  111. package/src/api/index.ts +96 -95
  112. package/src/db/type.ts +2 -1
  113. package/src/types/init-options.ts +6 -4
@@ -1,12 +1,12 @@
1
1
  import { BetterAuthDBSchema, ModelNames, SecondaryStorage } from "../db/type.mjs";
2
2
  import { DBAdapter } from "../db/adapter/index.mjs";
3
3
  import { createLogger } from "../env/logger.mjs";
4
- import "../db/index.mjs";
5
4
  import { AuthContext } from "../types/context.mjs";
6
- import "../types/index.mjs";
7
5
  import { OAuthProvider } from "../oauth2/oauth-provider.mjs";
8
- import "../oauth2/index.mjs";
9
- import { EndpointContext, EndpointOptions, StrictEndpoint } from "better-call";
6
+ import * as _$better_call0 from "better-call";
7
+ import { EndpointHandler, EndpointOptions, MiddlewareHandler, StrictEndpoint } from "better-call";
8
+ import * as _$_better_auth_core0 from "@better-auth/core";
9
+
10
10
  //#region src/api/index.d.ts
11
11
  /**
12
12
  * Response headers that forbid any intermediary (proxy, CDN, browser) from
@@ -26,13 +26,10 @@ declare const NO_STORE_HEADERS: {
26
26
  readonly "Cache-Control": "no-store";
27
27
  readonly Pragma: "no-cache";
28
28
  };
29
- declare const optionsMiddleware: <InputCtx extends import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>>(inputContext: InputCtx) => Promise<AuthContext>;
29
+ declare const optionsMiddleware: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, <InputCtx extends _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>>(inputContext: InputCtx) => Promise<AuthContext>>;
30
30
  declare const createAuthMiddleware: {
31
- <Options extends import("better-call").MiddlewareOptions, R>(options: Options, handler: (ctx: import("better-call").MiddlewareContext<Options, {
32
- returned?: unknown | undefined;
33
- responseHeaders?: Headers | undefined;
34
- } & import("@better-auth/core").PluginContext<import("@better-auth/core").BetterAuthOptions> & import("@better-auth/core").InfoContext & {
35
- options: import("@better-auth/core").BetterAuthOptions;
31
+ <Options extends _$better_call0.MiddlewareOptions, R>(options: Options, handler: (ctx: _$better_call0.MiddlewareContext<Options, _$_better_auth_core0.PluginContext<_$_better_auth_core0.BetterAuthOptions> & _$_better_auth_core0.InfoContext & {
32
+ options: _$_better_auth_core0.BetterAuthOptions;
36
33
  trustedOrigins: string[];
37
34
  trustedProviders: string[];
38
35
  isTrustedOrigin: (url: string, settings?: {
@@ -106,24 +103,24 @@ declare const createAuthMiddleware: {
106
103
  } & Record<string, any>;
107
104
  } | null) => void;
108
105
  socialProviders: OAuthProvider[];
109
- authCookies: import("@better-auth/core").BetterAuthCookies;
106
+ authCookies: _$_better_auth_core0.BetterAuthCookies;
110
107
  logger: ReturnType<typeof createLogger>;
111
108
  rateLimit: {
112
109
  enabled: boolean;
113
110
  window: number;
114
111
  max: number;
115
112
  storage: "memory" | "database" | "secondary-storage";
116
- } & Omit<import("@better-auth/core").BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
117
- adapter: DBAdapter<import("@better-auth/core").BetterAuthOptions>;
118
- internalAdapter: import("@better-auth/core").InternalAdapter<import("@better-auth/core").BetterAuthOptions>;
119
- createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-call").CookieOptions> | undefined) => import("@better-auth/core").BetterAuthCookie;
113
+ } & Omit<_$_better_auth_core0.BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
114
+ adapter: DBAdapter<_$_better_auth_core0.BetterAuthOptions>;
115
+ internalAdapter: _$_better_auth_core0.InternalAdapter<_$_better_auth_core0.BetterAuthOptions>;
116
+ createAuthCookie: (cookieName: string, overrideAttributes?: Partial<_$better_call0.CookieOptions> | undefined) => _$_better_auth_core0.BetterAuthCookie;
120
117
  secret: string;
121
- secretConfig: string | import("@better-auth/core").SecretConfig;
118
+ secretConfig: string | _$_better_auth_core0.SecretConfig;
122
119
  sessionConfig: {
123
120
  updateAge: number;
124
121
  expiresIn: number;
125
122
  freshAge: number;
126
- cookieCacheSigner?: import("@better-auth/core").CookieCacheSigner | undefined;
123
+ cookieCacheSigner?: _$_better_auth_core0.CookieCacheSigner | undefined;
127
124
  cookieRefreshCache: false | {
128
125
  enabled: true;
129
126
  updateAge: number;
@@ -144,7 +141,7 @@ declare const createAuthMiddleware: {
144
141
  minPasswordLength: number;
145
142
  maxPasswordLength: number;
146
143
  };
147
- checkPassword: (userId: string, ctx: import("@better-auth/core").GenericEndpointContext<import("@better-auth/core").BetterAuthOptions>) => Promise<boolean>;
144
+ checkPassword: (userId: string, ctx: _$_better_auth_core0.GenericEndpointContext<_$_better_auth_core0.BetterAuthOptions>) => Promise<boolean>;
148
145
  };
149
146
  tables: BetterAuthDBSchema;
150
147
  runMigrations: () => Promise<void>;
@@ -156,13 +153,13 @@ declare const createAuthMiddleware: {
156
153
  skipOriginCheck: boolean | string[];
157
154
  skipCSRFCheck: boolean;
158
155
  runInBackground: (promise: Promise<unknown>) => void;
159
- runInBackgroundOrAwait: (promise: Promise<unknown> | void) => import("@better-auth/core").Awaitable<unknown>;
160
- }>) => Promise<R>): (inputContext: import("better-call").MiddlewareInputContext<Options>) => Promise<R>;
161
- <Options extends import("better-call").MiddlewareOptions, R_1>(handler: (ctx: import("better-call").MiddlewareContext<Options, {
156
+ runInBackgroundOrAwait: (promise: Promise<unknown> | void) => _$_better_auth_core0.Awaitable<unknown>;
157
+ } & {
162
158
  returned?: unknown | undefined;
163
159
  responseHeaders?: Headers | undefined;
164
- } & import("@better-auth/core").PluginContext<import("@better-auth/core").BetterAuthOptions> & import("@better-auth/core").InfoContext & {
165
- options: import("@better-auth/core").BetterAuthOptions;
160
+ }>) => Promise<R>): _$better_call0.Middleware<Options, (inputContext: _$better_call0.MiddlewareInputContext<Options>) => Promise<R>>;
161
+ <Options extends _$better_call0.MiddlewareOptions, R_1>(handler: (ctx: _$better_call0.MiddlewareContext<Options, _$_better_auth_core0.PluginContext<_$_better_auth_core0.BetterAuthOptions> & _$_better_auth_core0.InfoContext & {
162
+ options: _$_better_auth_core0.BetterAuthOptions;
166
163
  trustedOrigins: string[];
167
164
  trustedProviders: string[];
168
165
  isTrustedOrigin: (url: string, settings?: {
@@ -236,24 +233,24 @@ declare const createAuthMiddleware: {
236
233
  } & Record<string, any>;
237
234
  } | null) => void;
238
235
  socialProviders: OAuthProvider[];
239
- authCookies: import("@better-auth/core").BetterAuthCookies;
236
+ authCookies: _$_better_auth_core0.BetterAuthCookies;
240
237
  logger: ReturnType<typeof createLogger>;
241
238
  rateLimit: {
242
239
  enabled: boolean;
243
240
  window: number;
244
241
  max: number;
245
242
  storage: "memory" | "database" | "secondary-storage";
246
- } & Omit<import("@better-auth/core").BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
247
- adapter: DBAdapter<import("@better-auth/core").BetterAuthOptions>;
248
- internalAdapter: import("@better-auth/core").InternalAdapter<import("@better-auth/core").BetterAuthOptions>;
249
- createAuthCookie: (cookieName: string, overrideAttributes?: Partial<import("better-call").CookieOptions> | undefined) => import("@better-auth/core").BetterAuthCookie;
243
+ } & Omit<_$_better_auth_core0.BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
244
+ adapter: DBAdapter<_$_better_auth_core0.BetterAuthOptions>;
245
+ internalAdapter: _$_better_auth_core0.InternalAdapter<_$_better_auth_core0.BetterAuthOptions>;
246
+ createAuthCookie: (cookieName: string, overrideAttributes?: Partial<_$better_call0.CookieOptions> | undefined) => _$_better_auth_core0.BetterAuthCookie;
250
247
  secret: string;
251
- secretConfig: string | import("@better-auth/core").SecretConfig;
248
+ secretConfig: string | _$_better_auth_core0.SecretConfig;
252
249
  sessionConfig: {
253
250
  updateAge: number;
254
251
  expiresIn: number;
255
252
  freshAge: number;
256
- cookieCacheSigner?: import("@better-auth/core").CookieCacheSigner | undefined;
253
+ cookieCacheSigner?: _$_better_auth_core0.CookieCacheSigner | undefined;
257
254
  cookieRefreshCache: false | {
258
255
  enabled: true;
259
256
  updateAge: number;
@@ -274,7 +271,7 @@ declare const createAuthMiddleware: {
274
271
  minPasswordLength: number;
275
272
  maxPasswordLength: number;
276
273
  };
277
- checkPassword: (userId: string, ctx: import("@better-auth/core").GenericEndpointContext<import("@better-auth/core").BetterAuthOptions>) => Promise<boolean>;
274
+ checkPassword: (userId: string, ctx: _$_better_auth_core0.GenericEndpointContext<_$_better_auth_core0.BetterAuthOptions>) => Promise<boolean>;
278
275
  };
279
276
  tables: BetterAuthDBSchema;
280
277
  runMigrations: () => Promise<void>;
@@ -286,38 +283,20 @@ declare const createAuthMiddleware: {
286
283
  skipOriginCheck: boolean | string[];
287
284
  skipCSRFCheck: boolean;
288
285
  runInBackground: (promise: Promise<unknown>) => void;
289
- runInBackgroundOrAwait: (promise: Promise<unknown> | void) => import("@better-auth/core").Awaitable<unknown>;
290
- }>) => Promise<R_1>): (inputContext: import("better-call").MiddlewareInputContext<Options>) => Promise<R_1>;
286
+ runInBackgroundOrAwait: (promise: Promise<unknown> | void) => _$_better_auth_core0.Awaitable<unknown>;
287
+ } & {
288
+ returned?: unknown | undefined;
289
+ responseHeaders?: Headers | undefined;
290
+ }>) => Promise<R_1>): _$better_call0.Middleware<Options, (inputContext: _$better_call0.MiddlewareInputContext<Options>) => Promise<R_1>>;
291
291
  };
292
- type EndpointHandler<Path extends string, Options extends EndpointOptions, R> = (context: EndpointContext<Path, Options, AuthContext>) => Promise<R>;
293
- declare function createAuthEndpoint<Path extends string, Options extends EndpointOptions, R>(path: Path, options: Options, handler: EndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
294
- declare function createAuthEndpoint<Path extends string, Options extends EndpointOptions, R>(options: Options, handler: EndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
292
+ type AuthEndpointHandler<Path extends string, Options extends EndpointOptions, R> = EndpointHandler<Path, Options, R, AuthContext>;
293
+ type PathlessAuthEndpointHandler<Options extends EndpointOptions, R> = AuthEndpointHandler<string, Options, R>;
294
+ declare function createAuthEndpoint<Path extends string, Options extends EndpointOptions, R>(path: Path, options: Options, handler: AuthEndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
295
+ declare function createAuthEndpoint<InferredPath extends string, Options extends EndpointOptions, R>(options: Options, handler: PathlessAuthEndpointHandler<Options, R>): StrictEndpoint<InferredPath, Options, R>;
295
296
  declare namespace createAuthEndpoint {
296
- /**
297
- * Declare a **server-only** endpoint.
298
- *
299
- * The endpoint is callable through `auth.api.*` from trusted server code but is
300
- * never registered on the HTTP router and never emitted into the OpenAPI
301
- * schema. It takes no path because it has no URL to be reached at.
302
- *
303
- * Prefer this over the path-less `createAuthEndpoint({ ... }, handler)` form.
304
- * Setting `metadata.SERVER_ONLY` makes the intent explicit at the call site and
305
- * keeps the endpoint off the HTTP surface even if a path is later added by
306
- * mistake: better-call's router skips an endpoint when its path is missing *or*
307
- * when `SERVER_ONLY` is set, so the two together are defense in depth. Relying
308
- * on path omission alone is invisible and one keystroke away from exposure.
309
- *
310
- * @example
311
- * ```ts
312
- * viewBackupCodes: createAuthEndpoint.serverOnly(
313
- * { method: "POST", body: schema },
314
- * async (ctx) => { ... },
315
- * )
316
- * ```
317
- */
318
- function serverOnly<Path extends string, Options extends EndpointOptions, R>(options: Options, handler: EndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
297
+ var serverOnly: <InferredPath extends string, Options extends EndpointOptions, R>(options: Options, handler: PathlessAuthEndpointHandler<Options, R>) => StrictEndpoint<InferredPath, Options, R>;
319
298
  }
320
299
  type AuthEndpoint<Path extends string, Opts extends EndpointOptions, R> = ReturnType<typeof createAuthEndpoint<Path, Opts, R>>;
321
- type AuthMiddleware = ReturnType<typeof createAuthMiddleware>;
300
+ type AuthMiddleware = MiddlewareHandler;
322
301
  //#endregion
323
302
  export { AuthEndpoint, AuthMiddleware, NO_STORE_HEADERS, createAuthEndpoint, createAuthMiddleware, optionsMiddleware };
@@ -47,30 +47,26 @@ const optionsMiddleware = createMiddleware(async () => {
47
47
  const createAuthMiddleware = createMiddleware.create({ use: [optionsMiddleware, createMiddleware(async () => {
48
48
  return {};
49
49
  })] });
50
- const use = [optionsMiddleware];
51
- function createAuthEndpoint(pathOrOptions, handlerOrOptions, handlerOrNever) {
52
- const path = typeof pathOrOptions === "string" ? pathOrOptions : void 0;
53
- const options = typeof handlerOrOptions === "object" ? handlerOrOptions : pathOrOptions;
54
- const handler = typeof handlerOrOptions === "function" ? handlerOrOptions : handlerOrNever;
50
+ const createEndpointWithAuthContext = createEndpoint.create({ use: [optionsMiddleware] });
51
+ function wrapEndpointHandler(handler, options) {
55
52
  const noStore = options.metadata?.noStore === true;
56
- const wrapped = async (ctx) => {
57
- if (noStore) for (const [name, value] of Object.entries(NO_STORE_HEADERS)) ctx.setHeader(name, value);
58
- const runtimeCtx = ctx;
53
+ return async (context) => {
54
+ if (noStore) for (const [name, value] of Object.entries(NO_STORE_HEADERS)) context.setHeader(name, value);
59
55
  try {
60
- return await runWithEndpointContext(ctx, () => handler(ctx));
61
- } catch (e) {
62
- attachResponseHeadersToAPIError(runtimeCtx.responseHeaders, e);
63
- throw e;
56
+ return await runWithEndpointContext(context, () => handler(context));
57
+ } catch (error) {
58
+ attachResponseHeadersToAPIError(context.responseHeaders, error);
59
+ throw error;
64
60
  }
65
61
  };
66
- if (path) return createEndpoint(path, {
67
- ...options,
68
- use: [...options?.use || [], ...use]
69
- }, wrapped);
70
- return createEndpoint({
71
- ...options,
72
- use: [...options?.use || [], ...use]
73
- }, wrapped);
62
+ }
63
+ function createAuthEndpoint(...args) {
64
+ if (args.length === 3) {
65
+ const [path, options, handler] = args;
66
+ return createEndpointWithAuthContext(path, options, wrapEndpointHandler(handler, options));
67
+ }
68
+ const [options, handler] = args;
69
+ return createEndpointWithAuthContext(options, wrapEndpointHandler(handler, options));
74
70
  }
75
71
  /**
76
72
  * Set `metadata.SERVER_ONLY` while preserving any existing metadata
@@ -85,11 +81,28 @@ function withServerOnly(options) {
85
81
  }
86
82
  };
87
83
  }
88
- (function(_createAuthEndpoint) {
89
- function serverOnly(options, handler) {
90
- return createAuthEndpoint(withServerOnly(options), handler);
91
- }
92
- _createAuthEndpoint.serverOnly = serverOnly;
93
- })(createAuthEndpoint || (createAuthEndpoint = {}));
84
+ /**
85
+ * Declare a **server-only** endpoint.
86
+ *
87
+ * The endpoint is callable through `auth.api.*` from trusted server code but is
88
+ * never registered on the HTTP router and never emitted into the OpenAPI
89
+ * schema. It takes no path because it has no URL to be reached at.
90
+ *
91
+ * Prefer this over the path-less `createAuthEndpoint({ ... }, handler)` form.
92
+ * Setting `metadata.SERVER_ONLY` makes the intent explicit at the call site and
93
+ * keeps the endpoint off the HTTP surface even if a path is later added by
94
+ * mistake: better-call's router skips an endpoint when its path is missing *or*
95
+ * when `SERVER_ONLY` is set, so the two together are defense in depth. Relying
96
+ * on path omission alone is invisible and one keystroke away from exposure.
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * viewBackupCodes: createAuthEndpoint.serverOnly(
101
+ * { method: "POST", body: schema },
102
+ * async (ctx) => { ... },
103
+ * )
104
+ * ```
105
+ */
106
+ createAuthEndpoint.serverOnly = (options, handler) => createAuthEndpoint(withServerOnly(options), handler);
94
107
  //#endregion
95
108
  export { NO_STORE_HEADERS, createAuthEndpoint, createAuthMiddleware, optionsMiddleware };
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
+
2
3
  //#region src/async_hooks/index.d.ts
3
4
  declare function getAsyncLocalStorage(): Promise<typeof AsyncLocalStorage>;
4
5
  //#endregion
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
+
2
3
  //#region src/async_hooks/pure.index.d.ts
3
4
  declare function getAsyncLocalStorage(): Promise<typeof AsyncLocalStorage>;
4
5
  //#endregion
@@ -1,7 +1,7 @@
1
1
  import { AuthContext } from "../types/context.mjs";
2
- import "../types/index.mjs";
3
2
  import { EndpointContext, InputContext } from "better-call";
4
3
  import { AsyncLocalStorage } from "@better-auth/core/async_hooks";
4
+
5
5
  //#region src/context/endpoint-context.d.ts
6
6
  type AuthEndpointContext = Partial<InputContext<string, any> & EndpointContext<string, any>> & {
7
7
  context: AuthContext;
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "@better-auth/core/async_hooks";
2
+
2
3
  //#region src/context/global.d.ts
3
4
  declare function getBetterAuthVersion(): string;
4
5
  //#endregion
@@ -2,7 +2,7 @@
2
2
  const symbol = Symbol.for("better-auth:global");
3
3
  let bind = null;
4
4
  const __context = {};
5
- const __betterAuthVersion = "1.7.0-rc.4";
5
+ const __betterAuthVersion = "1.7.0-rc.6";
6
6
  /**
7
7
  * We store context instance in the globalThis.
8
8
  *
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from "@better-auth/core/async_hooks";
2
+
2
3
  //#region src/context/request-state.d.ts
3
4
  type RequestStateWeakMap = WeakMap<object, any>;
4
5
  declare function getRequestStateAsyncLocalStorage(): Promise<AsyncLocalStorage<RequestStateWeakMap>>;
@@ -1,7 +1,7 @@
1
1
  import { DBAdapter, DBTransactionAdapter } from "../db/adapter/index.mjs";
2
2
  import { BetterAuthOptions } from "../types/init-options.mjs";
3
- import "../types/index.mjs";
4
3
  import { AsyncLocalStorage } from "node:async_hooks";
4
+
5
5
  //#region src/context/transaction.d.ts
6
6
  type StoredAdapter = DBTransactionAdapter<BetterAuthOptions>;
7
7
  type HookContext = {
@@ -25,8 +25,7 @@ declare const runWithTransaction: <R, Options extends BetterAuthOptions = Better
25
25
  * If not in a transaction, the hook will execute immediately.
26
26
  */
27
27
  declare const queueAfterTransactionHook: (hook: () => Promise<void>, options?: {
28
- /** Handles a queued hook failure after the surrounding work has committed. */
29
- onError?: (error: unknown) => void | Promise<void>;
28
+ /** Handles a queued hook failure after the surrounding work has committed. */onError?: (error: unknown) => void | Promise<void>;
30
29
  }) => Promise<void>;
31
30
  //#endregion
32
31
  export { getCurrentAdapter, getCurrentDBAdapterAsyncLocalStorage, queueAfterTransactionHook, runWithAdapter, runWithTransaction };
@@ -7,9 +7,11 @@ import { initGetModelName } from "./get-model-name.mjs";
7
7
  import { AdapterFactoryConfig, AdapterFactoryCustomizeAdapterCreator, AdapterFactoryOptions, AdapterTestDebugLogs } from "./types.mjs";
8
8
  import { DBAdapter } from "./index.mjs";
9
9
  import { BetterAuthOptions } from "../../types/init-options.mjs";
10
- import "../../types/index.mjs";
11
10
  //#region src/db/adapter/factory.d.ts
12
11
  type AdapterFactory<Options extends BetterAuthOptions> = (options: Options) => DBAdapter<Options>;
13
- declare const createAdapterFactory: <Options extends BetterAuthOptions>({ adapter: customAdapter, config: cfg }: AdapterFactoryOptions) => AdapterFactory<Options>;
12
+ declare const createAdapterFactory: <Options extends BetterAuthOptions>({
13
+ adapter: customAdapter,
14
+ config: cfg
15
+ }: AdapterFactoryOptions) => AdapterFactory<Options>;
14
16
  //#endregion
15
- export { AdapterFactory, AdapterFactoryConfig, AdapterFactoryCustomizeAdapterCreator, AdapterFactoryOptions, AdapterTestDebugLogs, createAdapterFactory, initGetDefaultFieldName, initGetDefaultModelName, initGetFieldAttributes, initGetFieldName, initGetIdField, initGetModelName };
17
+ export { AdapterFactory, createAdapterFactory };
@@ -841,4 +841,4 @@ function formatAction(action) {
841
841
  return `${TTY_COLORS.dim}(${action})${TTY_COLORS.reset}`;
842
842
  }
843
843
  //#endregion
844
- export { createAdapterFactory, initGetDefaultFieldName, initGetDefaultModelName, initGetFieldAttributes, initGetFieldName, initGetIdField, initGetModelName };
844
+ export { createAdapterFactory };
@@ -1,9 +1,16 @@
1
1
  import { BetterAuthDBSchema } from "../type.mjs";
2
+
2
3
  //#region src/db/adapter/get-default-field-name.d.ts
3
- declare const initGetDefaultFieldName: ({ schema, usePlural }: {
4
+ declare const initGetDefaultFieldName: ({
5
+ schema,
6
+ usePlural
7
+ }: {
4
8
  schema: BetterAuthDBSchema;
5
9
  usePlural: boolean | undefined;
6
- }) => ({ field, model: unsafeModel }: {
10
+ }) => ({
11
+ field,
12
+ model: unsafeModel
13
+ }: {
7
14
  model: string;
8
15
  field: string;
9
16
  }) => string;
@@ -1,6 +1,10 @@
1
1
  import { BetterAuthDBSchema } from "../type.mjs";
2
+
2
3
  //#region src/db/adapter/get-default-model-name.d.ts
3
- declare const initGetDefaultModelName: ({ usePlural, schema }: {
4
+ declare const initGetDefaultModelName: ({
5
+ usePlural,
6
+ schema
7
+ }: {
4
8
  usePlural: boolean | undefined;
5
9
  schema: BetterAuthDBSchema;
6
10
  }) => (model: string) => string;
@@ -1,9 +1,13 @@
1
1
  import { BetterAuthDBSchema, DBFieldAttribute, DBFieldType } from "../type.mjs";
2
2
  import { BetterAuthOptions } from "../../types/init-options.mjs";
3
- import "../index.mjs";
4
- import "../../types/index.mjs";
5
3
  //#region src/db/adapter/get-field-attributes.d.ts
6
- declare const initGetFieldAttributes: ({ usePlural, schema, options, customIdGenerator, disableIdGeneration }: {
4
+ declare const initGetFieldAttributes: ({
5
+ usePlural,
6
+ schema,
7
+ options,
8
+ customIdGenerator,
9
+ disableIdGeneration
10
+ }: {
7
11
  usePlural?: boolean;
8
12
  schema: BetterAuthDBSchema;
9
13
  options: BetterAuthOptions;
@@ -11,7 +15,10 @@ declare const initGetFieldAttributes: ({ usePlural, schema, options, customIdGen
11
15
  customIdGenerator?: ((props: {
12
16
  model: string;
13
17
  }) => string) | undefined;
14
- }) => ({ model, field }: {
18
+ }) => ({
19
+ model,
20
+ field
21
+ }: {
15
22
  model: string;
16
23
  field: string;
17
24
  }) => DBFieldAttribute<DBFieldType>;
@@ -1,9 +1,16 @@
1
1
  import { BetterAuthDBSchema } from "../type.mjs";
2
+
2
3
  //#region src/db/adapter/get-field-name.d.ts
3
- declare const initGetFieldName: ({ schema, usePlural }: {
4
+ declare const initGetFieldName: ({
5
+ schema,
6
+ usePlural
7
+ }: {
4
8
  schema: BetterAuthDBSchema;
5
9
  usePlural: boolean | undefined;
6
- }) => ({ model: modelName, field: fieldName }: {
10
+ }) => ({
11
+ model: modelName,
12
+ field: fieldName
13
+ }: {
7
14
  model: string;
8
15
  field: string;
9
16
  }) => string;
@@ -1,9 +1,14 @@
1
1
  import { BetterAuthDBSchema, DBPrimitive } from "../type.mjs";
2
2
  import { BetterAuthOptions } from "../../types/init-options.mjs";
3
- import "../index.mjs";
4
- import "../../types/index.mjs";
5
3
  //#region src/db/adapter/get-id-field.d.ts
6
- declare const initGetIdField: ({ usePlural, schema, disableIdGeneration, options, customIdGenerator, supportsUUIDs }: {
4
+ declare const initGetIdField: ({
5
+ usePlural,
6
+ schema,
7
+ disableIdGeneration,
8
+ options,
9
+ customIdGenerator,
10
+ supportsUUIDs
11
+ }: {
7
12
  usePlural?: boolean;
8
13
  schema: BetterAuthDBSchema;
9
14
  options: BetterAuthOptions;
@@ -12,7 +17,10 @@ declare const initGetIdField: ({ usePlural, schema, disableIdGeneration, options
12
17
  model: string;
13
18
  }) => string) | undefined;
14
19
  supportsUUIDs?: boolean;
15
- }) => ({ customModelName, forceAllowId }: {
20
+ }) => ({
21
+ customModelName,
22
+ forceAllowId
23
+ }: {
16
24
  customModelName?: string;
17
25
  forceAllowId?: boolean;
18
26
  }) => {
@@ -1,6 +1,10 @@
1
1
  import { BetterAuthDBSchema } from "../type.mjs";
2
+
2
3
  //#region src/db/adapter/get-model-name.d.ts
3
- declare const initGetModelName: ({ usePlural, schema }: {
4
+ declare const initGetModelName: ({
5
+ usePlural,
6
+ schema
7
+ }: {
4
8
  usePlural: boolean | undefined;
5
9
  schema: BetterAuthDBSchema;
6
10
  }) => (model: string) => string;
@@ -9,7 +9,6 @@ import { AdapterFactoryConfig, AdapterFactoryCustomizeAdapterCreator, AdapterFac
9
9
  import { AdapterFactory, createAdapterFactory } from "./factory.mjs";
10
10
  import { deepmerge, withApplyDefault } from "./utils.mjs";
11
11
  import { BetterAuthOptions } from "../../types/init-options.mjs";
12
- import "../../types/index.mjs";
13
12
  //#region src/db/adapter/index.d.ts
14
13
  type DBAdapterDebugLogOption = boolean | {
15
14
  /**
@@ -489,7 +488,11 @@ type DBAdapter<Options extends BetterAuthOptions = BetterAuthOptions> = {
489
488
  };
490
489
  type CleanedWhere = Required<Where>;
491
490
  interface CustomAdapter {
492
- create: <T extends Record<string, any>>({ data, model, select }: {
491
+ create: <T extends Record<string, any>>({
492
+ data,
493
+ model,
494
+ select
495
+ }: {
493
496
  model: string;
494
497
  data: T;
495
498
  select?: string[] | undefined;
@@ -504,13 +507,26 @@ interface CustomAdapter {
504
507
  where: CleanedWhere[];
505
508
  update: Record<string, any>;
506
509
  }) => Promise<number>;
507
- findOne: <T>({ model, where, select, join }: {
510
+ findOne: <T>({
511
+ model,
512
+ where,
513
+ select,
514
+ join
515
+ }: {
508
516
  model: string;
509
517
  where: CleanedWhere[];
510
518
  select?: string[] | undefined;
511
519
  join?: JoinConfig | undefined;
512
520
  }) => Promise<T | null>;
513
- findMany: <T>({ model, where, limit, select, sortBy, offset, join }: {
521
+ findMany: <T>({
522
+ model,
523
+ where,
524
+ limit,
525
+ select,
526
+ sortBy,
527
+ offset,
528
+ join
529
+ }: {
514
530
  model: string;
515
531
  where?: CleanedWhere[] | undefined;
516
532
  limit: number;
@@ -522,11 +538,17 @@ interface CustomAdapter {
522
538
  offset?: number | undefined;
523
539
  join?: JoinConfig | undefined;
524
540
  }) => Promise<T[]>;
525
- delete: ({ model, where }: {
541
+ delete: ({
542
+ model,
543
+ where
544
+ }: {
526
545
  model: string;
527
546
  where: CleanedWhere[];
528
547
  }) => Promise<void>;
529
- deleteMany: ({ model, where }: {
548
+ deleteMany: ({
549
+ model,
550
+ where
551
+ }: {
530
552
  model: string;
531
553
  where: CleanedWhere[];
532
554
  }) => Promise<number>;
@@ -558,7 +580,10 @@ interface CustomAdapter {
558
580
  increment: Record<string, number>;
559
581
  set?: Record<string, unknown> | undefined;
560
582
  }) => Promise<T | null>;
561
- count: ({ model, where }: {
583
+ count: ({
584
+ model,
585
+ where
586
+ }: {
562
587
  model: string;
563
588
  where?: CleanedWhere[] | undefined;
564
589
  }) => Promise<number>;
@@ -1,7 +1,6 @@
1
1
  import { BetterAuthDBSchema, DBFieldAttribute } from "../type.mjs";
2
2
  import { CleanedWhere, CustomAdapter, DBAdapterFactoryConfig, DBTransactionAdapter, JoinConfig, Where } from "./index.mjs";
3
3
  import { BetterAuthOptions } from "../../types/init-options.mjs";
4
- import "../../types/index.mjs";
5
4
  //#region src/db/adapter/types.d.ts
6
5
  type AdapterFactoryOptions = {
7
6
  config: AdapterFactoryConfig;
@@ -36,7 +35,10 @@ type AdapterFactoryCustomizeAdapterCreator = (config: {
36
35
  /**
37
36
  * Get the field name which is expected to be saved in the database based on the user's schema.
38
37
  */
39
- getFieldName: ({ model, field }: {
38
+ getFieldName: ({
39
+ model,
40
+ field
41
+ }: {
40
42
  model: string;
41
43
  field: string;
42
44
  }) => string;
@@ -64,7 +66,10 @@ type AdapterFactoryCustomizeAdapterCreator = (config: {
64
66
  * 2. When using a custom fieldName, doing something like `schema[model].fields[field]` will not work.
65
67
  *
66
68
  */
67
- getDefaultFieldName: ({ model, field }: {
69
+ getDefaultFieldName: ({
70
+ model,
71
+ field
72
+ }: {
68
73
  model: string;
69
74
  field: string;
70
75
  }) => string;
@@ -73,13 +78,20 @@ type AdapterFactoryCustomizeAdapterCreator = (config: {
73
78
  *
74
79
  * Note: any model name or field name is allowed, whether default to schema or not.
75
80
  */
76
- getFieldAttributes: ({ model, field }: {
81
+ getFieldAttributes: ({
82
+ model,
83
+ field
84
+ }: {
77
85
  model: string;
78
86
  field: string;
79
87
  }) => DBFieldAttribute;
80
88
  transformInput: (data: Record<string, unknown>, defaultModelName: string, action: "create" | "update", forceAllowId?: boolean | undefined) => Promise<Record<string, unknown>>;
81
89
  transformOutput: (data: Record<string, unknown>, defaultModelName: string, select?: string[] | undefined, joinConfig?: JoinConfig | undefined) => Promise<Record<string, unknown>>;
82
- transformWhereClause: <W extends Where[] | undefined>({ model, where, action }: {
90
+ transformWhereClause: <W extends Where[] | undefined>({
91
+ model,
92
+ where,
93
+ action
94
+ }: {
83
95
  where: W;
84
96
  model: string;
85
97
  action: "create" | "update" | "findOne" | "findMany" | "updateMany" | "delete" | "deleteMany" | "consumeOne" | "incrementOne" | "count";
@@ -1,4 +1,5 @@
1
1
  import { DBFieldAttribute } from "../type.mjs";
2
+
2
3
  //#region src/db/adapter/utils.d.ts
3
4
  declare function withApplyDefault(value: any, field: DBFieldAttribute, action: "create" | "update" | "findOne" | "findMany"): any;
4
5
  declare function deepmerge<T>(target: T, source: Partial<T>): T;