@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.
- package/LICENSE.md +20 -0
- package/README.md +32 -0
- package/changes.json +14 -0
- package/dist/api/index.d.mts +281 -0
- package/dist/api/index.mjs +92 -0
- package/dist/async_hooks/index.d.mts +6 -0
- package/dist/async_hooks/index.mjs +20 -0
- package/dist/async_hooks/pure.index.d.mts +6 -0
- package/dist/async_hooks/pure.index.mjs +33 -0
- package/dist/context/endpoint-context.d.mts +18 -0
- package/dist/context/endpoint-context.mjs +29 -0
- package/dist/context/global.d.mts +6 -0
- package/dist/context/global.mjs +36 -0
- package/dist/context/index.d.mts +5 -0
- package/dist/context/index.mjs +5 -0
- package/dist/context/request-state.d.mts +27 -0
- package/dist/context/request-state.mjs +47 -0
- package/dist/context/transaction.d.mts +27 -0
- package/dist/context/transaction.mjs +96 -0
- package/dist/db/adapter/factory.d.mts +17 -0
- package/dist/db/adapter/factory.mjs +905 -0
- package/dist/db/adapter/get-default-field-name.d.mts +18 -0
- package/dist/db/adapter/get-default-field-name.mjs +36 -0
- package/dist/db/adapter/get-default-model-name.d.mts +12 -0
- package/dist/db/adapter/get-default-model-name.mjs +30 -0
- package/dist/db/adapter/get-field-attributes.d.mts +26 -0
- package/dist/db/adapter/get-field-attributes.mjs +37 -0
- package/dist/db/adapter/get-field-name.d.mts +18 -0
- package/dist/db/adapter/get-field-name.mjs +31 -0
- package/dist/db/adapter/get-id-field.d.mts +36 -0
- package/dist/db/adapter/get-id-field.mjs +64 -0
- package/dist/db/adapter/get-model-name.d.mts +12 -0
- package/dist/db/adapter/get-model-name.mjs +21 -0
- package/dist/db/adapter/index.d.mts +615 -0
- package/dist/db/adapter/index.mjs +24 -0
- package/dist/db/adapter/types.d.mts +105 -0
- package/dist/db/adapter/utils.d.mts +7 -0
- package/dist/db/adapter/utils.mjs +37 -0
- package/dist/db/get-tables.d.mts +6 -0
- package/dist/db/get-tables.mjs +266 -0
- package/dist/db/index.d.mts +10 -0
- package/dist/db/index.mjs +8 -0
- package/dist/db/plugin.d.mts +12 -0
- package/dist/db/schema/account.d.mts +28 -0
- package/dist/db/schema/account.mjs +17 -0
- package/dist/db/schema/rate-limit.d.mts +18 -0
- package/dist/db/schema/rate-limit.mjs +9 -0
- package/dist/db/schema/session.d.mts +23 -0
- package/dist/db/schema/session.mjs +12 -0
- package/dist/db/schema/shared.d.mts +10 -0
- package/dist/db/schema/shared.mjs +9 -0
- package/dist/db/schema/user.d.mts +22 -0
- package/dist/db/schema/user.mjs +11 -0
- package/dist/db/schema/verification.d.mts +21 -0
- package/dist/db/schema/verification.mjs +10 -0
- package/dist/db/type.d.mts +194 -0
- package/dist/env/color-depth.d.mts +4 -0
- package/dist/env/color-depth.mjs +86 -0
- package/dist/env/env-impl.d.mts +32 -0
- package/dist/env/env-impl.mjs +81 -0
- package/dist/env/index.d.mts +4 -0
- package/dist/env/index.mjs +4 -0
- package/dist/env/logger.d.mts +48 -0
- package/dist/env/logger.mjs +79 -0
- package/dist/error/codes.d.mts +69 -0
- package/dist/error/codes.mjs +55 -0
- package/dist/error/index.d.mts +26 -0
- package/dist/error/index.mjs +27 -0
- package/dist/index.d.mts +9 -0
- package/dist/index.mjs +1 -0
- package/dist/instrumentation/api.mjs +12 -0
- package/dist/instrumentation/attributes.d.mts +11 -0
- package/dist/instrumentation/attributes.mjs +10 -0
- package/dist/instrumentation/index.d.mts +3 -0
- package/dist/instrumentation/index.mjs +3 -0
- package/dist/instrumentation/noop.mjs +42 -0
- package/dist/instrumentation/pure.index.d.mts +7 -0
- package/dist/instrumentation/pure.index.mjs +7 -0
- package/dist/instrumentation/tracer.d.mts +13 -0
- package/dist/instrumentation/tracer.mjs +53 -0
- package/dist/oauth2/client-credentials-token.d.mts +56 -0
- package/dist/oauth2/client-credentials-token.mjs +64 -0
- package/dist/oauth2/create-authorization-url.d.mts +44 -0
- package/dist/oauth2/create-authorization-url.mjs +41 -0
- package/dist/oauth2/index.d.mts +8 -0
- package/dist/oauth2/index.mjs +7 -0
- package/dist/oauth2/oauth-provider.d.mts +192 -0
- package/dist/oauth2/refresh-access-token.d.mts +54 -0
- package/dist/oauth2/refresh-access-token.mjs +73 -0
- package/dist/oauth2/reject-redirects.mjs +60 -0
- package/dist/oauth2/utils.d.mts +24 -0
- package/dist/oauth2/utils.mjs +48 -0
- package/dist/oauth2/validate-authorization-code.d.mts +85 -0
- package/dist/oauth2/validate-authorization-code.mjs +86 -0
- package/dist/oauth2/verify.d.mts +65 -0
- package/dist/oauth2/verify.mjs +202 -0
- package/dist/social-providers/apple.d.mts +133 -0
- package/dist/social-providers/apple.mjs +117 -0
- package/dist/social-providers/atlassian.d.mts +70 -0
- package/dist/social-providers/atlassian.mjs +80 -0
- package/dist/social-providers/cognito.d.mts +85 -0
- package/dist/social-providers/cognito.mjs +162 -0
- package/dist/social-providers/discord.d.mts +124 -0
- package/dist/social-providers/discord.mjs +62 -0
- package/dist/social-providers/dropbox.d.mts +69 -0
- package/dist/social-providers/dropbox.mjs +72 -0
- package/dist/social-providers/facebook.d.mts +79 -0
- package/dist/social-providers/facebook.mjs +157 -0
- package/dist/social-providers/figma.d.mts +61 -0
- package/dist/social-providers/figma.mjs +83 -0
- package/dist/social-providers/github.d.mts +102 -0
- package/dist/social-providers/github.mjs +92 -0
- package/dist/social-providers/gitlab.d.mts +123 -0
- package/dist/social-providers/gitlab.mjs +79 -0
- package/dist/social-providers/google.d.mts +123 -0
- package/dist/social-providers/google.mjs +137 -0
- package/dist/social-providers/huggingface.d.mts +83 -0
- package/dist/social-providers/huggingface.mjs +73 -0
- package/dist/social-providers/index.d.mts +1834 -0
- package/dist/social-providers/index.mjs +78 -0
- package/dist/social-providers/kakao.d.mts +161 -0
- package/dist/social-providers/kakao.mjs +70 -0
- package/dist/social-providers/kick.d.mts +73 -0
- package/dist/social-providers/kick.mjs +68 -0
- package/dist/social-providers/line.d.mts +105 -0
- package/dist/social-providers/line.mjs +110 -0
- package/dist/social-providers/linear.d.mts +68 -0
- package/dist/social-providers/linear.mjs +85 -0
- package/dist/social-providers/linkedin.d.mts +67 -0
- package/dist/social-providers/linkedin.mjs +73 -0
- package/dist/social-providers/microsoft-entra-id.d.mts +174 -0
- package/dist/social-providers/microsoft-entra-id.mjs +152 -0
- package/dist/social-providers/naver.d.mts +92 -0
- package/dist/social-providers/naver.mjs +65 -0
- package/dist/social-providers/notion.d.mts +64 -0
- package/dist/social-providers/notion.mjs +72 -0
- package/dist/social-providers/paybin.d.mts +71 -0
- package/dist/social-providers/paybin.mjs +81 -0
- package/dist/social-providers/paypal.d.mts +131 -0
- package/dist/social-providers/paypal.mjs +188 -0
- package/dist/social-providers/polar.d.mts +74 -0
- package/dist/social-providers/polar.mjs +71 -0
- package/dist/social-providers/railway.d.mts +65 -0
- package/dist/social-providers/railway.mjs +74 -0
- package/dist/social-providers/reddit.d.mts +62 -0
- package/dist/social-providers/reddit.mjs +81 -0
- package/dist/social-providers/roblox.d.mts +70 -0
- package/dist/social-providers/roblox.mjs +57 -0
- package/dist/social-providers/salesforce.d.mts +79 -0
- package/dist/social-providers/salesforce.mjs +87 -0
- package/dist/social-providers/slack.d.mts +83 -0
- package/dist/social-providers/slack.mjs +66 -0
- package/dist/social-providers/spotify.d.mts +63 -0
- package/dist/social-providers/spotify.mjs +69 -0
- package/dist/social-providers/tiktok.d.mts +168 -0
- package/dist/social-providers/tiktok.mjs +60 -0
- package/dist/social-providers/twitch.d.mts +79 -0
- package/dist/social-providers/twitch.mjs +75 -0
- package/dist/social-providers/twitter.d.mts +126 -0
- package/dist/social-providers/twitter.mjs +85 -0
- package/dist/social-providers/vercel.d.mts +62 -0
- package/dist/social-providers/vercel.mjs +58 -0
- package/dist/social-providers/vk.d.mts +70 -0
- package/dist/social-providers/vk.mjs +81 -0
- package/dist/social-providers/wechat.d.mts +113 -0
- package/dist/social-providers/wechat.mjs +81 -0
- package/dist/social-providers/zoom.d.mts +163 -0
- package/dist/social-providers/zoom.mjs +69 -0
- package/dist/types/context.d.mts +319 -0
- package/dist/types/cookie.d.mts +15 -0
- package/dist/types/helper.d.mts +10 -0
- package/dist/types/index.d.mts +9 -0
- package/dist/types/init-options.d.mts +1430 -0
- package/dist/types/plugin-client.d.mts +123 -0
- package/dist/types/plugin.d.mts +124 -0
- package/dist/types/secret.d.mts +11 -0
- package/dist/utils/async.d.mts +22 -0
- package/dist/utils/async.mjs +32 -0
- package/dist/utils/db.d.mts +9 -0
- package/dist/utils/db.mjs +15 -0
- package/dist/utils/deprecate.d.mts +9 -0
- package/dist/utils/deprecate.mjs +16 -0
- package/dist/utils/error-codes.d.mts +13 -0
- package/dist/utils/error-codes.mjs +10 -0
- package/dist/utils/fetch-metadata.d.mts +4 -0
- package/dist/utils/fetch-metadata.mjs +6 -0
- package/dist/utils/host.d.mts +147 -0
- package/dist/utils/host.mjs +295 -0
- package/dist/utils/id.d.mts +4 -0
- package/dist/utils/id.mjs +7 -0
- package/dist/utils/ip.d.mts +77 -0
- package/dist/utils/ip.mjs +230 -0
- package/dist/utils/is-api-error.d.mts +6 -0
- package/dist/utils/is-api-error.mjs +8 -0
- package/dist/utils/json.d.mts +4 -0
- package/dist/utils/json.mjs +41 -0
- package/dist/utils/redirect-uri.d.mts +20 -0
- package/dist/utils/redirect-uri.mjs +48 -0
- package/dist/utils/string.d.mts +8 -0
- package/dist/utils/string.mjs +25 -0
- package/dist/utils/url.d.mts +37 -0
- package/dist/utils/url.mjs +61 -0
- package/package.json +216 -0
- package/src/api/index.ts +185 -0
- package/src/async_hooks/index.ts +40 -0
- package/src/async_hooks/pure.index.ts +46 -0
- package/src/context/endpoint-context.ts +50 -0
- package/src/context/global.ts +57 -0
- package/src/context/index.ts +23 -0
- package/src/context/request-state.ts +91 -0
- package/src/context/transaction.ts +169 -0
- package/src/db/adapter/factory.ts +1740 -0
- package/src/db/adapter/get-default-field-name.ts +59 -0
- package/src/db/adapter/get-default-model-name.ts +51 -0
- package/src/db/adapter/get-field-attributes.ts +62 -0
- package/src/db/adapter/get-field-name.ts +43 -0
- package/src/db/adapter/get-id-field.ts +150 -0
- package/src/db/adapter/get-model-name.ts +36 -0
- package/src/db/adapter/index.ts +656 -0
- package/src/db/adapter/types.ts +134 -0
- package/src/db/adapter/utils.ts +61 -0
- package/src/db/get-tables.ts +304 -0
- package/src/db/index.ts +43 -0
- package/src/db/plugin.ts +11 -0
- package/src/db/schema/account.ts +47 -0
- package/src/db/schema/rate-limit.ts +36 -0
- package/src/db/schema/session.ts +29 -0
- package/src/db/schema/shared.ts +7 -0
- package/src/db/schema/user.ts +31 -0
- package/src/db/schema/verification.ts +28 -0
- package/src/db/type.ts +360 -0
- package/src/env/color-depth.ts +172 -0
- package/src/env/env-impl.ts +123 -0
- package/src/env/index.ts +23 -0
- package/src/env/logger.ts +145 -0
- package/src/error/codes.ts +72 -0
- package/src/error/index.ts +44 -0
- package/src/index.ts +1 -0
- package/src/instrumentation/api.ts +17 -0
- package/src/instrumentation/attributes.ts +22 -0
- package/src/instrumentation/index.ts +2 -0
- package/src/instrumentation/noop.ts +74 -0
- package/src/instrumentation/pure.index.ts +31 -0
- package/src/instrumentation/tracer.ts +95 -0
- package/src/oauth2/client-credentials-token.ts +126 -0
- package/src/oauth2/create-authorization-url.ts +89 -0
- package/src/oauth2/index.ts +34 -0
- package/src/oauth2/oauth-provider.ts +222 -0
- package/src/oauth2/refresh-access-token.ts +157 -0
- package/src/oauth2/reject-redirects.ts +70 -0
- package/src/oauth2/utils.ts +70 -0
- package/src/oauth2/validate-authorization-code.ts +190 -0
- package/src/oauth2/verify.ts +408 -0
- package/src/social-providers/apple.ts +249 -0
- package/src/social-providers/atlassian.ts +133 -0
- package/src/social-providers/cognito.ts +281 -0
- package/src/social-providers/discord.ts +170 -0
- package/src/social-providers/dropbox.ts +112 -0
- package/src/social-providers/facebook.ts +288 -0
- package/src/social-providers/figma.ts +118 -0
- package/src/social-providers/github.ts +184 -0
- package/src/social-providers/gitlab.ts +155 -0
- package/src/social-providers/google.ts +263 -0
- package/src/social-providers/huggingface.ts +119 -0
- package/src/social-providers/index.ts +132 -0
- package/src/social-providers/kakao.ts +179 -0
- package/src/social-providers/kick.ts +109 -0
- package/src/social-providers/line.ts +169 -0
- package/src/social-providers/linear.ts +121 -0
- package/src/social-providers/linkedin.ts +110 -0
- package/src/social-providers/microsoft-entra-id.ts +391 -0
- package/src/social-providers/naver.ts +113 -0
- package/src/social-providers/notion.ts +108 -0
- package/src/social-providers/paybin.ts +118 -0
- package/src/social-providers/paypal.ts +371 -0
- package/src/social-providers/polar.ts +111 -0
- package/src/social-providers/railway.ts +100 -0
- package/src/social-providers/reddit.ts +126 -0
- package/src/social-providers/roblox.ts +112 -0
- package/src/social-providers/salesforce.ts +159 -0
- package/src/social-providers/slack.ts +112 -0
- package/src/social-providers/spotify.ts +94 -0
- package/src/social-providers/tiktok.ts +211 -0
- package/src/social-providers/twitch.ts +112 -0
- package/src/social-providers/twitter.ts +199 -0
- package/src/social-providers/vercel.ts +87 -0
- package/src/social-providers/vk.ts +125 -0
- package/src/social-providers/wechat.ts +220 -0
- package/src/social-providers/zoom.ts +230 -0
- package/src/types/context.ts +460 -0
- package/src/types/cookie.ts +10 -0
- package/src/types/helper.ts +27 -0
- package/src/types/index.ts +40 -0
- package/src/types/init-options.ts +1679 -0
- package/src/types/plugin-client.ts +143 -0
- package/src/types/plugin.ts +163 -0
- package/src/types/secret.ts +8 -0
- package/src/utils/async.ts +53 -0
- package/src/utils/db.ts +20 -0
- package/src/utils/deprecate.ts +21 -0
- package/src/utils/error-codes.ts +68 -0
- package/src/utils/fetch-metadata.ts +3 -0
- package/src/utils/host.ts +416 -0
- package/src/utils/id.ts +5 -0
- package/src/utils/ip.ts +395 -0
- package/src/utils/is-api-error.ts +10 -0
- package/src/utils/json.ts +56 -0
- package/src/utils/redirect-uri.ts +54 -0
- package/src/utils/string.ts +40 -0
- package/src/utils/url.ts +77 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
Copyright (c) 2024 - present, Bereket Engida
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
|
+
this software and associated documentation files (the “Software”), to deal in
|
|
6
|
+
the Software without restriction, including without limitation the rights to
|
|
7
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
8
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
9
|
+
subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
16
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
18
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
19
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
20
|
+
DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# @depup/better-auth__core
|
|
2
|
+
|
|
3
|
+
> Dependency-bumped version of [@better-auth/core](https://www.npmjs.com/package/@better-auth/core)
|
|
4
|
+
|
|
5
|
+
Generated by [DepUp](https://github.com/depup/npm) -- all production
|
|
6
|
+
dependencies bumped to latest versions.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @depup/better-auth__core
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Field | Value |
|
|
15
|
+
|-------|-------|
|
|
16
|
+
| Original | [@better-auth/core](https://www.npmjs.com/package/@better-auth/core) @ 1.6.23 |
|
|
17
|
+
| Processed | 2026-07-21 |
|
|
18
|
+
| Smoke test | passed |
|
|
19
|
+
| Deps updated | 2 |
|
|
20
|
+
|
|
21
|
+
## Dependency Changes
|
|
22
|
+
|
|
23
|
+
| Dependency | From | To |
|
|
24
|
+
|------------|------|-----|
|
|
25
|
+
| @opentelemetry/semantic-conventions | ^1.39.0 | ^1.43.0 |
|
|
26
|
+
| zod | ^4.3.6 | ^4.4.3 |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Source: https://github.com/depup/npm | Original: https://www.npmjs.com/package/@better-auth/core
|
|
31
|
+
|
|
32
|
+
License inherited from the original package.
|
package/changes.json
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { BetterAuthDBSchema, ModelNames, SecondaryStorage } from "../db/type.mjs";
|
|
2
|
+
import { DBAdapter } from "../db/adapter/index.mjs";
|
|
3
|
+
import { createLogger } from "../env/logger.mjs";
|
|
4
|
+
import { AuthContext } from "../types/context.mjs";
|
|
5
|
+
import { OAuthProvider } from "../oauth2/oauth-provider.mjs";
|
|
6
|
+
import * as better_call0 from "better-call";
|
|
7
|
+
import { EndpointContext, EndpointOptions, StrictEndpoint } from "better-call";
|
|
8
|
+
import * as _better_auth_core0 from "@better-auth/core";
|
|
9
|
+
|
|
10
|
+
//#region src/api/index.d.ts
|
|
11
|
+
declare const optionsMiddleware: <InputCtx extends better_call0.MiddlewareInputContext<better_call0.MiddlewareOptions>>(inputContext: InputCtx) => Promise<AuthContext>;
|
|
12
|
+
declare const createAuthMiddleware: {
|
|
13
|
+
<Options extends better_call0.MiddlewareOptions, R>(options: Options, handler: (ctx: better_call0.MiddlewareContext<Options, {
|
|
14
|
+
returned?: unknown | undefined;
|
|
15
|
+
responseHeaders?: Headers | undefined;
|
|
16
|
+
} & _better_auth_core0.PluginContext<_better_auth_core0.BetterAuthOptions> & _better_auth_core0.InfoContext & {
|
|
17
|
+
options: _better_auth_core0.BetterAuthOptions;
|
|
18
|
+
trustedOrigins: string[];
|
|
19
|
+
trustedProviders: string[];
|
|
20
|
+
isTrustedOrigin: (url: string, settings?: {
|
|
21
|
+
allowRelativePaths: boolean;
|
|
22
|
+
}) => boolean;
|
|
23
|
+
oauthConfig: {
|
|
24
|
+
skipStateCookieCheck?: boolean | undefined;
|
|
25
|
+
storeStateStrategy: "database" | "cookie";
|
|
26
|
+
};
|
|
27
|
+
newSession: {
|
|
28
|
+
session: {
|
|
29
|
+
id: string;
|
|
30
|
+
createdAt: Date;
|
|
31
|
+
updatedAt: Date;
|
|
32
|
+
userId: string;
|
|
33
|
+
expiresAt: Date;
|
|
34
|
+
token: string;
|
|
35
|
+
ipAddress?: string | null | undefined;
|
|
36
|
+
userAgent?: string | null | undefined;
|
|
37
|
+
} & Record<string, any>;
|
|
38
|
+
user: {
|
|
39
|
+
id: string;
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
updatedAt: Date;
|
|
42
|
+
email: string;
|
|
43
|
+
emailVerified: boolean;
|
|
44
|
+
name: string;
|
|
45
|
+
image?: string | null | undefined;
|
|
46
|
+
} & Record<string, any>;
|
|
47
|
+
} | null;
|
|
48
|
+
session: {
|
|
49
|
+
session: {
|
|
50
|
+
id: string;
|
|
51
|
+
createdAt: Date;
|
|
52
|
+
updatedAt: Date;
|
|
53
|
+
userId: string;
|
|
54
|
+
expiresAt: Date;
|
|
55
|
+
token: string;
|
|
56
|
+
ipAddress?: string | null | undefined;
|
|
57
|
+
userAgent?: string | null | undefined;
|
|
58
|
+
} & Record<string, any>;
|
|
59
|
+
user: {
|
|
60
|
+
id: string;
|
|
61
|
+
createdAt: Date;
|
|
62
|
+
updatedAt: Date;
|
|
63
|
+
email: string;
|
|
64
|
+
emailVerified: boolean;
|
|
65
|
+
name: string;
|
|
66
|
+
image?: string | null | undefined;
|
|
67
|
+
} & Record<string, any>;
|
|
68
|
+
} | null;
|
|
69
|
+
setNewSession: (session: {
|
|
70
|
+
session: {
|
|
71
|
+
id: string;
|
|
72
|
+
createdAt: Date;
|
|
73
|
+
updatedAt: Date;
|
|
74
|
+
userId: string;
|
|
75
|
+
expiresAt: Date;
|
|
76
|
+
token: string;
|
|
77
|
+
ipAddress?: string | null | undefined;
|
|
78
|
+
userAgent?: string | null | undefined;
|
|
79
|
+
} & Record<string, any>;
|
|
80
|
+
user: {
|
|
81
|
+
id: string;
|
|
82
|
+
createdAt: Date;
|
|
83
|
+
updatedAt: Date;
|
|
84
|
+
email: string;
|
|
85
|
+
emailVerified: boolean;
|
|
86
|
+
name: string;
|
|
87
|
+
image?: string | null | undefined;
|
|
88
|
+
} & Record<string, any>;
|
|
89
|
+
} | null) => void;
|
|
90
|
+
socialProviders: OAuthProvider[];
|
|
91
|
+
authCookies: _better_auth_core0.BetterAuthCookies;
|
|
92
|
+
logger: ReturnType<typeof createLogger>;
|
|
93
|
+
rateLimit: {
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
window: number;
|
|
96
|
+
max: number;
|
|
97
|
+
storage: "memory" | "database" | "secondary-storage";
|
|
98
|
+
} & Omit<_better_auth_core0.BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
|
|
99
|
+
adapter: DBAdapter<_better_auth_core0.BetterAuthOptions>;
|
|
100
|
+
internalAdapter: _better_auth_core0.InternalAdapter<_better_auth_core0.BetterAuthOptions>;
|
|
101
|
+
createAuthCookie: (cookieName: string, overrideAttributes?: Partial<better_call0.CookieOptions> | undefined) => _better_auth_core0.BetterAuthCookie;
|
|
102
|
+
secret: string;
|
|
103
|
+
secretConfig: string | _better_auth_core0.SecretConfig;
|
|
104
|
+
sessionConfig: {
|
|
105
|
+
updateAge: number;
|
|
106
|
+
expiresIn: number;
|
|
107
|
+
freshAge: number;
|
|
108
|
+
cookieRefreshCache: false | {
|
|
109
|
+
enabled: true;
|
|
110
|
+
updateAge: number;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
generateId: (options: {
|
|
114
|
+
model: ModelNames;
|
|
115
|
+
size?: number | undefined;
|
|
116
|
+
}) => string | false;
|
|
117
|
+
secondaryStorage: SecondaryStorage | undefined;
|
|
118
|
+
password: {
|
|
119
|
+
hash: (password: string) => Promise<string>;
|
|
120
|
+
verify: (data: {
|
|
121
|
+
password: string;
|
|
122
|
+
hash: string;
|
|
123
|
+
}) => Promise<boolean>;
|
|
124
|
+
config: {
|
|
125
|
+
minPasswordLength: number;
|
|
126
|
+
maxPasswordLength: number;
|
|
127
|
+
};
|
|
128
|
+
checkPassword: (userId: string, ctx: _better_auth_core0.GenericEndpointContext<_better_auth_core0.BetterAuthOptions>) => Promise<boolean>;
|
|
129
|
+
};
|
|
130
|
+
tables: BetterAuthDBSchema;
|
|
131
|
+
runMigrations: () => Promise<void>;
|
|
132
|
+
publishTelemetry: (event: {
|
|
133
|
+
type: string;
|
|
134
|
+
anonymousId?: string | undefined;
|
|
135
|
+
payload: Record<string, any>;
|
|
136
|
+
}) => Promise<void>;
|
|
137
|
+
skipOriginCheck: boolean | string[];
|
|
138
|
+
skipCSRFCheck: boolean;
|
|
139
|
+
runInBackground: (promise: Promise<unknown>) => void;
|
|
140
|
+
runInBackgroundOrAwait: (promise: Promise<unknown> | void) => _better_auth_core0.Awaitable<unknown>;
|
|
141
|
+
}>) => Promise<R>): (inputContext: better_call0.MiddlewareInputContext<Options>) => Promise<R>;
|
|
142
|
+
<Options extends better_call0.MiddlewareOptions, R_1>(handler: (ctx: better_call0.MiddlewareContext<Options, {
|
|
143
|
+
returned?: unknown | undefined;
|
|
144
|
+
responseHeaders?: Headers | undefined;
|
|
145
|
+
} & _better_auth_core0.PluginContext<_better_auth_core0.BetterAuthOptions> & _better_auth_core0.InfoContext & {
|
|
146
|
+
options: _better_auth_core0.BetterAuthOptions;
|
|
147
|
+
trustedOrigins: string[];
|
|
148
|
+
trustedProviders: string[];
|
|
149
|
+
isTrustedOrigin: (url: string, settings?: {
|
|
150
|
+
allowRelativePaths: boolean;
|
|
151
|
+
}) => boolean;
|
|
152
|
+
oauthConfig: {
|
|
153
|
+
skipStateCookieCheck?: boolean | undefined;
|
|
154
|
+
storeStateStrategy: "database" | "cookie";
|
|
155
|
+
};
|
|
156
|
+
newSession: {
|
|
157
|
+
session: {
|
|
158
|
+
id: string;
|
|
159
|
+
createdAt: Date;
|
|
160
|
+
updatedAt: Date;
|
|
161
|
+
userId: string;
|
|
162
|
+
expiresAt: Date;
|
|
163
|
+
token: string;
|
|
164
|
+
ipAddress?: string | null | undefined;
|
|
165
|
+
userAgent?: string | null | undefined;
|
|
166
|
+
} & Record<string, any>;
|
|
167
|
+
user: {
|
|
168
|
+
id: string;
|
|
169
|
+
createdAt: Date;
|
|
170
|
+
updatedAt: Date;
|
|
171
|
+
email: string;
|
|
172
|
+
emailVerified: boolean;
|
|
173
|
+
name: string;
|
|
174
|
+
image?: string | null | undefined;
|
|
175
|
+
} & Record<string, any>;
|
|
176
|
+
} | null;
|
|
177
|
+
session: {
|
|
178
|
+
session: {
|
|
179
|
+
id: string;
|
|
180
|
+
createdAt: Date;
|
|
181
|
+
updatedAt: Date;
|
|
182
|
+
userId: string;
|
|
183
|
+
expiresAt: Date;
|
|
184
|
+
token: string;
|
|
185
|
+
ipAddress?: string | null | undefined;
|
|
186
|
+
userAgent?: string | null | undefined;
|
|
187
|
+
} & Record<string, any>;
|
|
188
|
+
user: {
|
|
189
|
+
id: string;
|
|
190
|
+
createdAt: Date;
|
|
191
|
+
updatedAt: Date;
|
|
192
|
+
email: string;
|
|
193
|
+
emailVerified: boolean;
|
|
194
|
+
name: string;
|
|
195
|
+
image?: string | null | undefined;
|
|
196
|
+
} & Record<string, any>;
|
|
197
|
+
} | null;
|
|
198
|
+
setNewSession: (session: {
|
|
199
|
+
session: {
|
|
200
|
+
id: string;
|
|
201
|
+
createdAt: Date;
|
|
202
|
+
updatedAt: Date;
|
|
203
|
+
userId: string;
|
|
204
|
+
expiresAt: Date;
|
|
205
|
+
token: string;
|
|
206
|
+
ipAddress?: string | null | undefined;
|
|
207
|
+
userAgent?: string | null | undefined;
|
|
208
|
+
} & Record<string, any>;
|
|
209
|
+
user: {
|
|
210
|
+
id: string;
|
|
211
|
+
createdAt: Date;
|
|
212
|
+
updatedAt: Date;
|
|
213
|
+
email: string;
|
|
214
|
+
emailVerified: boolean;
|
|
215
|
+
name: string;
|
|
216
|
+
image?: string | null | undefined;
|
|
217
|
+
} & Record<string, any>;
|
|
218
|
+
} | null) => void;
|
|
219
|
+
socialProviders: OAuthProvider[];
|
|
220
|
+
authCookies: _better_auth_core0.BetterAuthCookies;
|
|
221
|
+
logger: ReturnType<typeof createLogger>;
|
|
222
|
+
rateLimit: {
|
|
223
|
+
enabled: boolean;
|
|
224
|
+
window: number;
|
|
225
|
+
max: number;
|
|
226
|
+
storage: "memory" | "database" | "secondary-storage";
|
|
227
|
+
} & Omit<_better_auth_core0.BetterAuthRateLimitOptions, "enabled" | "window" | "max" | "storage">;
|
|
228
|
+
adapter: DBAdapter<_better_auth_core0.BetterAuthOptions>;
|
|
229
|
+
internalAdapter: _better_auth_core0.InternalAdapter<_better_auth_core0.BetterAuthOptions>;
|
|
230
|
+
createAuthCookie: (cookieName: string, overrideAttributes?: Partial<better_call0.CookieOptions> | undefined) => _better_auth_core0.BetterAuthCookie;
|
|
231
|
+
secret: string;
|
|
232
|
+
secretConfig: string | _better_auth_core0.SecretConfig;
|
|
233
|
+
sessionConfig: {
|
|
234
|
+
updateAge: number;
|
|
235
|
+
expiresIn: number;
|
|
236
|
+
freshAge: number;
|
|
237
|
+
cookieRefreshCache: false | {
|
|
238
|
+
enabled: true;
|
|
239
|
+
updateAge: number;
|
|
240
|
+
};
|
|
241
|
+
};
|
|
242
|
+
generateId: (options: {
|
|
243
|
+
model: ModelNames;
|
|
244
|
+
size?: number | undefined;
|
|
245
|
+
}) => string | false;
|
|
246
|
+
secondaryStorage: SecondaryStorage | undefined;
|
|
247
|
+
password: {
|
|
248
|
+
hash: (password: string) => Promise<string>;
|
|
249
|
+
verify: (data: {
|
|
250
|
+
password: string;
|
|
251
|
+
hash: string;
|
|
252
|
+
}) => Promise<boolean>;
|
|
253
|
+
config: {
|
|
254
|
+
minPasswordLength: number;
|
|
255
|
+
maxPasswordLength: number;
|
|
256
|
+
};
|
|
257
|
+
checkPassword: (userId: string, ctx: _better_auth_core0.GenericEndpointContext<_better_auth_core0.BetterAuthOptions>) => Promise<boolean>;
|
|
258
|
+
};
|
|
259
|
+
tables: BetterAuthDBSchema;
|
|
260
|
+
runMigrations: () => Promise<void>;
|
|
261
|
+
publishTelemetry: (event: {
|
|
262
|
+
type: string;
|
|
263
|
+
anonymousId?: string | undefined;
|
|
264
|
+
payload: Record<string, any>;
|
|
265
|
+
}) => Promise<void>;
|
|
266
|
+
skipOriginCheck: boolean | string[];
|
|
267
|
+
skipCSRFCheck: boolean;
|
|
268
|
+
runInBackground: (promise: Promise<unknown>) => void;
|
|
269
|
+
runInBackgroundOrAwait: (promise: Promise<unknown> | void) => _better_auth_core0.Awaitable<unknown>;
|
|
270
|
+
}>) => Promise<R_1>): (inputContext: better_call0.MiddlewareInputContext<Options>) => Promise<R_1>;
|
|
271
|
+
};
|
|
272
|
+
type EndpointHandler<Path extends string, Options extends EndpointOptions, R> = (context: EndpointContext<Path, Options, AuthContext>) => Promise<R>;
|
|
273
|
+
declare function createAuthEndpoint<Path extends string, Options extends EndpointOptions, R>(path: Path, options: Options, handler: EndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
|
|
274
|
+
declare function createAuthEndpoint<Path extends string, Options extends EndpointOptions, R>(options: Options, handler: EndpointHandler<Path, Options, R>): StrictEndpoint<Path, Options, R>;
|
|
275
|
+
declare namespace createAuthEndpoint {
|
|
276
|
+
var serverOnly: <Path extends string, Options extends EndpointOptions, R>(options: Options, handler: EndpointHandler<Path, Options, R>) => StrictEndpoint<Path, Options, R>;
|
|
277
|
+
}
|
|
278
|
+
type AuthEndpoint<Path extends string, Opts extends EndpointOptions, R> = ReturnType<typeof createAuthEndpoint<Path, Opts, R>>;
|
|
279
|
+
type AuthMiddleware = ReturnType<typeof createAuthMiddleware>;
|
|
280
|
+
//#endregion
|
|
281
|
+
export { AuthEndpoint, AuthMiddleware, createAuthEndpoint, createAuthMiddleware, optionsMiddleware };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { runWithEndpointContext } from "../context/endpoint-context.mjs";
|
|
2
|
+
import { isAPIError } from "../utils/is-api-error.mjs";
|
|
3
|
+
import { createEndpoint, createMiddleware, kAPIErrorHeaderSymbol } from "better-call";
|
|
4
|
+
//#region src/api/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* Better-call's createEndpoint re-throws APIError without exposing the headers
|
|
7
|
+
* accumulated on ctx.responseHeaders (e.g. Set-Cookie from deleteSessionCookie
|
|
8
|
+
* before throw). Attach them to the error via kAPIErrorHeaderSymbol — matching
|
|
9
|
+
* better-call's createMiddleware contract so the outer pipeline can merge them
|
|
10
|
+
* into the response.
|
|
11
|
+
*/
|
|
12
|
+
function attachResponseHeadersToAPIError(responseHeaders, e) {
|
|
13
|
+
if (!isAPIError(e) || !responseHeaders) return;
|
|
14
|
+
Object.defineProperty(e, kAPIErrorHeaderSymbol, {
|
|
15
|
+
enumerable: false,
|
|
16
|
+
configurable: true,
|
|
17
|
+
value: responseHeaders,
|
|
18
|
+
writable: false
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const optionsMiddleware = createMiddleware(async () => {
|
|
22
|
+
/**
|
|
23
|
+
* This will be passed on the instance of
|
|
24
|
+
* the context. Used to infer the type
|
|
25
|
+
* here.
|
|
26
|
+
*/
|
|
27
|
+
return {};
|
|
28
|
+
});
|
|
29
|
+
const createAuthMiddleware = createMiddleware.create({ use: [optionsMiddleware, createMiddleware(async () => {
|
|
30
|
+
return {};
|
|
31
|
+
})] });
|
|
32
|
+
const use = [optionsMiddleware];
|
|
33
|
+
function createAuthEndpoint(pathOrOptions, handlerOrOptions, handlerOrNever) {
|
|
34
|
+
const path = typeof pathOrOptions === "string" ? pathOrOptions : void 0;
|
|
35
|
+
const options = typeof handlerOrOptions === "object" ? handlerOrOptions : pathOrOptions;
|
|
36
|
+
const handler = typeof handlerOrOptions === "function" ? handlerOrOptions : handlerOrNever;
|
|
37
|
+
const wrapped = async (ctx) => {
|
|
38
|
+
const runtimeCtx = ctx;
|
|
39
|
+
try {
|
|
40
|
+
return await runWithEndpointContext(ctx, () => handler(ctx));
|
|
41
|
+
} catch (e) {
|
|
42
|
+
attachResponseHeadersToAPIError(runtimeCtx.responseHeaders, e);
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
if (path) return createEndpoint(path, {
|
|
47
|
+
...options,
|
|
48
|
+
use: [...options?.use || [], ...use]
|
|
49
|
+
}, wrapped);
|
|
50
|
+
return createEndpoint({
|
|
51
|
+
...options,
|
|
52
|
+
use: [...options?.use || [], ...use]
|
|
53
|
+
}, wrapped);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set `metadata.SERVER_ONLY` while preserving any existing metadata
|
|
57
|
+
* (`$Infer`, `openapi`, ...).
|
|
58
|
+
*/
|
|
59
|
+
function withServerOnly(options) {
|
|
60
|
+
return {
|
|
61
|
+
...options,
|
|
62
|
+
metadata: {
|
|
63
|
+
...options.metadata,
|
|
64
|
+
SERVER_ONLY: true
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Declare a **server-only** endpoint.
|
|
70
|
+
*
|
|
71
|
+
* The endpoint is callable through `auth.api.*` from trusted server code but is
|
|
72
|
+
* never registered on the HTTP router and never emitted into the OpenAPI
|
|
73
|
+
* schema. It takes no path because it has no URL to be reached at.
|
|
74
|
+
*
|
|
75
|
+
* Prefer this over the path-less `createAuthEndpoint({ ... }, handler)` form.
|
|
76
|
+
* Setting `metadata.SERVER_ONLY` makes the intent explicit at the call site and
|
|
77
|
+
* keeps the endpoint off the HTTP surface even if a path is later added by
|
|
78
|
+
* mistake: better-call's router skips an endpoint when its path is missing *or*
|
|
79
|
+
* when `SERVER_ONLY` is set, so the two together are defense in depth. Relying
|
|
80
|
+
* on path omission alone is invisible and one keystroke away from exposure.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* viewBackupCodes: createAuthEndpoint.serverOnly(
|
|
85
|
+
* { method: "POST", body: schema },
|
|
86
|
+
* async (ctx) => { ... },
|
|
87
|
+
* )
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
createAuthEndpoint.serverOnly = (options, handler) => createAuthEndpoint(withServerOnly(options), handler);
|
|
91
|
+
//#endregion
|
|
92
|
+
export { createAuthEndpoint, createAuthMiddleware, optionsMiddleware };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/async_hooks/index.ts
|
|
2
|
+
const AsyncLocalStoragePromise = import(
|
|
3
|
+
/* @vite-ignore */
|
|
4
|
+
/* webpackIgnore: true */
|
|
5
|
+
"node:async_hooks"
|
|
6
|
+
).then((mod) => mod.AsyncLocalStorage).catch((err) => {
|
|
7
|
+
if ("AsyncLocalStorage" in globalThis) return globalThis.AsyncLocalStorage;
|
|
8
|
+
if (typeof window !== "undefined") return null;
|
|
9
|
+
console.warn("[better-auth] Warning: AsyncLocalStorage is not available in this environment. Some features may not work as expected.");
|
|
10
|
+
console.warn("[better-auth] Please read more about this warning at https://better-auth.com/docs/installation#mount-handler");
|
|
11
|
+
console.warn("[better-auth] If you are using Cloudflare Workers, please see: https://developers.cloudflare.com/workers/configuration/compatibility-flags/#nodejs-compatibility-flag");
|
|
12
|
+
throw err;
|
|
13
|
+
});
|
|
14
|
+
async function getAsyncLocalStorage() {
|
|
15
|
+
const mod = await AsyncLocalStoragePromise;
|
|
16
|
+
if (mod === null) throw new Error("getAsyncLocalStorage is only available in server code");
|
|
17
|
+
else return mod;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { getAsyncLocalStorage };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
//#region src/async_hooks/pure.index.ts
|
|
2
|
+
/**
|
|
3
|
+
* Due to the lack of AsyncLocalStorage in some environments (like Convex),
|
|
4
|
+
*
|
|
5
|
+
* We assume serverless functions are short-lived and single-threaded, so we can use a simple polyfill.
|
|
6
|
+
*/
|
|
7
|
+
var AsyncLocalStoragePolyfill = class {
|
|
8
|
+
#current = void 0;
|
|
9
|
+
run(store, fn) {
|
|
10
|
+
const prev = this.#current;
|
|
11
|
+
this.#current = store;
|
|
12
|
+
const result = fn();
|
|
13
|
+
if (result instanceof Promise) return result.finally(() => {
|
|
14
|
+
this.#current = prev;
|
|
15
|
+
});
|
|
16
|
+
this.#current = prev;
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
getStore() {
|
|
20
|
+
return this.#current;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const AsyncLocalStoragePromise = Promise.resolve().then(() => {
|
|
24
|
+
if ("AsyncLocalStorage" in globalThis) return globalThis.AsyncLocalStorage;
|
|
25
|
+
return AsyncLocalStoragePolyfill;
|
|
26
|
+
});
|
|
27
|
+
async function getAsyncLocalStorage() {
|
|
28
|
+
const mod = await AsyncLocalStoragePromise;
|
|
29
|
+
if (mod === null) throw new Error("getAsyncLocalStorage is only available in server code");
|
|
30
|
+
else return mod;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { getAsyncLocalStorage };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AuthContext } from "../types/context.mjs";
|
|
2
|
+
import { EndpointContext, InputContext } from "better-call";
|
|
3
|
+
import { AsyncLocalStorage } from "@better-auth/core/async_hooks";
|
|
4
|
+
|
|
5
|
+
//#region src/context/endpoint-context.d.ts
|
|
6
|
+
type AuthEndpointContext = Partial<InputContext<string, any> & EndpointContext<string, any>> & {
|
|
7
|
+
context: AuthContext;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* This is for internal use only. Most users should use `getCurrentAuthContext` instead.
|
|
11
|
+
*
|
|
12
|
+
* It is exposed for advanced use cases where you need direct access to the AsyncLocalStorage instance.
|
|
13
|
+
*/
|
|
14
|
+
declare function getCurrentAuthContextAsyncLocalStorage(): Promise<AsyncLocalStorage<AuthEndpointContext>>;
|
|
15
|
+
declare function getCurrentAuthContext(): Promise<AuthEndpointContext>;
|
|
16
|
+
declare function runWithEndpointContext<T>(context: AuthEndpointContext, fn: () => T): Promise<T>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { AuthEndpointContext, getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, runWithEndpointContext };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { __getBetterAuthGlobal } from "./global.mjs";
|
|
2
|
+
import { getAsyncLocalStorage } from "@better-auth/core/async_hooks";
|
|
3
|
+
//#region src/context/endpoint-context.ts
|
|
4
|
+
const ensureAsyncStorage = async () => {
|
|
5
|
+
const betterAuthGlobal = __getBetterAuthGlobal();
|
|
6
|
+
if (!betterAuthGlobal.context.endpointContextAsyncStorage) {
|
|
7
|
+
const AsyncLocalStorage = await getAsyncLocalStorage();
|
|
8
|
+
betterAuthGlobal.context.endpointContextAsyncStorage = new AsyncLocalStorage();
|
|
9
|
+
}
|
|
10
|
+
return betterAuthGlobal.context.endpointContextAsyncStorage;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* This is for internal use only. Most users should use `getCurrentAuthContext` instead.
|
|
14
|
+
*
|
|
15
|
+
* It is exposed for advanced use cases where you need direct access to the AsyncLocalStorage instance.
|
|
16
|
+
*/
|
|
17
|
+
async function getCurrentAuthContextAsyncLocalStorage() {
|
|
18
|
+
return ensureAsyncStorage();
|
|
19
|
+
}
|
|
20
|
+
async function getCurrentAuthContext() {
|
|
21
|
+
const context = (await ensureAsyncStorage()).getStore();
|
|
22
|
+
if (!context) throw new Error("No auth context found. Please make sure you are calling this function within a `runWithEndpointContext` callback.");
|
|
23
|
+
return context;
|
|
24
|
+
}
|
|
25
|
+
async function runWithEndpointContext(context, fn) {
|
|
26
|
+
return (await ensureAsyncStorage()).run(context, fn);
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, runWithEndpointContext };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/context/global.ts
|
|
2
|
+
const symbol = Symbol.for("better-auth:global");
|
|
3
|
+
let bind = null;
|
|
4
|
+
const __context = {};
|
|
5
|
+
const __betterAuthVersion = "1.6.23";
|
|
6
|
+
/**
|
|
7
|
+
* We store context instance in the globalThis.
|
|
8
|
+
*
|
|
9
|
+
* The reason we do this is that some bundlers, web framework, or package managers might
|
|
10
|
+
* create multiple copies of BetterAuth in the same process intentionally or unintentionally.
|
|
11
|
+
*
|
|
12
|
+
* For example, yarn v1, Next.js, SSR, Vite...
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
function __getBetterAuthGlobal() {
|
|
17
|
+
if (!globalThis[symbol]) {
|
|
18
|
+
globalThis[symbol] = {
|
|
19
|
+
version: __betterAuthVersion,
|
|
20
|
+
epoch: 1,
|
|
21
|
+
context: __context
|
|
22
|
+
};
|
|
23
|
+
bind = globalThis[symbol];
|
|
24
|
+
}
|
|
25
|
+
bind = globalThis[symbol];
|
|
26
|
+
if (bind.version !== __betterAuthVersion) {
|
|
27
|
+
bind.version = __betterAuthVersion;
|
|
28
|
+
bind.epoch++;
|
|
29
|
+
}
|
|
30
|
+
return globalThis[symbol];
|
|
31
|
+
}
|
|
32
|
+
function getBetterAuthVersion() {
|
|
33
|
+
return __getBetterAuthGlobal().version;
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { __getBetterAuthGlobal, getBetterAuthVersion };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AuthEndpointContext, getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, runWithEndpointContext } from "./endpoint-context.mjs";
|
|
2
|
+
import { getBetterAuthVersion } from "./global.mjs";
|
|
3
|
+
import { RequestState, RequestStateWeakMap, defineRequestState, getCurrentRequestState, getRequestStateAsyncLocalStorage, hasRequestState, runWithRequestState } from "./request-state.mjs";
|
|
4
|
+
import { getCurrentAdapter, getCurrentDBAdapterAsyncLocalStorage, queueAfterTransactionHook, runWithAdapter, runWithTransaction } from "./transaction.mjs";
|
|
5
|
+
export { type AuthEndpointContext, type RequestState, type RequestStateWeakMap, defineRequestState, getBetterAuthVersion, getCurrentAdapter, getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, getCurrentDBAdapterAsyncLocalStorage, getCurrentRequestState, getRequestStateAsyncLocalStorage, hasRequestState, queueAfterTransactionHook, runWithAdapter, runWithEndpointContext, runWithRequestState, runWithTransaction };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { getBetterAuthVersion } from "./global.mjs";
|
|
2
|
+
import { getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, runWithEndpointContext } from "./endpoint-context.mjs";
|
|
3
|
+
import { defineRequestState, getCurrentRequestState, getRequestStateAsyncLocalStorage, hasRequestState, runWithRequestState } from "./request-state.mjs";
|
|
4
|
+
import { getCurrentAdapter, getCurrentDBAdapterAsyncLocalStorage, queueAfterTransactionHook, runWithAdapter, runWithTransaction } from "./transaction.mjs";
|
|
5
|
+
export { defineRequestState, getBetterAuthVersion, getCurrentAdapter, getCurrentAuthContext, getCurrentAuthContextAsyncLocalStorage, getCurrentDBAdapterAsyncLocalStorage, getCurrentRequestState, getRequestStateAsyncLocalStorage, hasRequestState, queueAfterTransactionHook, runWithAdapter, runWithEndpointContext, runWithRequestState, runWithTransaction };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "@better-auth/core/async_hooks";
|
|
2
|
+
|
|
3
|
+
//#region src/context/request-state.d.ts
|
|
4
|
+
type RequestStateWeakMap = WeakMap<object, any>;
|
|
5
|
+
declare function getRequestStateAsyncLocalStorage(): Promise<AsyncLocalStorage<RequestStateWeakMap>>;
|
|
6
|
+
declare function hasRequestState(): Promise<boolean>;
|
|
7
|
+
declare function getCurrentRequestState(): Promise<RequestStateWeakMap>;
|
|
8
|
+
declare function runWithRequestState<T>(store: RequestStateWeakMap, fn: () => T): Promise<T>;
|
|
9
|
+
interface RequestState<T> {
|
|
10
|
+
get(): Promise<T>;
|
|
11
|
+
set(value: T): Promise<void>;
|
|
12
|
+
readonly ref: Readonly<object>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Defines a request-scoped state with lazy initialization.
|
|
16
|
+
*
|
|
17
|
+
* @param initFn - A function that initializes the state. It is called the first time `get()` is invoked within each request context, and only once per context.
|
|
18
|
+
* @returns A RequestState object with `get` and `set` methods, and a unique `ref` for debugging.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const userState = defineRequestState(() => ({ id: '', name: '' }));
|
|
22
|
+
* // Later, within a request context:
|
|
23
|
+
* const user = await userState.get();
|
|
24
|
+
*/
|
|
25
|
+
declare function defineRequestState<T>(initFn: () => T | Promise<T>): RequestState<T>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { RequestState, RequestStateWeakMap, defineRequestState, getCurrentRequestState, getRequestStateAsyncLocalStorage, hasRequestState, runWithRequestState };
|