@better-auth/core 1.7.0-rc.1 → 1.7.0-rc.3
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/dist/api/index.d.mts +28 -28
- package/dist/async_hooks/index.d.mts +0 -1
- package/dist/async_hooks/pure.index.d.mts +0 -1
- package/dist/context/endpoint-context.d.mts +1 -1
- package/dist/context/global.d.mts +0 -1
- package/dist/context/global.mjs +1 -1
- package/dist/context/request-state.d.mts +0 -1
- package/dist/context/request-state.mjs +8 -5
- package/dist/context/transaction.d.mts +8 -3
- package/dist/context/transaction.mjs +27 -10
- package/dist/db/adapter/factory.d.mts +3 -5
- package/dist/db/adapter/factory.mjs +7 -5
- package/dist/db/adapter/get-default-field-name.d.mts +2 -9
- package/dist/db/adapter/get-default-model-name.d.mts +1 -5
- package/dist/db/adapter/get-default-model-name.mjs +6 -5
- package/dist/db/adapter/get-field-attributes.d.mts +4 -11
- package/dist/db/adapter/get-field-name.d.mts +2 -9
- package/dist/db/adapter/get-id-field.d.mts +4 -12
- package/dist/db/adapter/get-model-name.d.mts +1 -5
- package/dist/db/adapter/index.d.mts +7 -32
- package/dist/db/adapter/types.d.mts +5 -17
- package/dist/db/adapter/utils.d.mts +0 -1
- package/dist/db/database-index.d.mts +44 -0
- package/dist/db/database-index.mjs +168 -0
- package/dist/db/get-tables.d.mts +7 -1
- package/dist/db/get-tables.mjs +47 -6
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/internal.d.mts +3 -0
- package/dist/db/internal.mjs +3 -0
- package/dist/db/plugin.d.mts +4 -3
- package/dist/db/schema/account.d.mts +16 -3
- package/dist/db/schema/account.mjs +35 -2
- package/dist/db/schema/rate-limit.d.mts +1 -1
- package/dist/db/schema/rate-limit.mjs +9 -0
- package/dist/db/schema/session.d.mts +1 -1
- package/dist/db/schema/shared.d.mts +0 -1
- package/dist/db/schema/user.d.mts +1 -1
- package/dist/db/schema/verification.d.mts +1 -1
- package/dist/db/type.d.mts +17 -9
- package/dist/env/logger.d.mts +25 -25
- package/dist/error/codes.d.mts +0 -1
- package/dist/error/index.d.mts +0 -1
- package/dist/index.d.mts +1 -1
- package/dist/instrumentation/attributes.d.mts +0 -1
- package/dist/instrumentation/pure.index.d.mts +0 -1
- package/dist/instrumentation/tracer.mjs +1 -1
- package/dist/oauth2/authorization-params.d.mts +0 -1
- package/dist/oauth2/client-assertion.d.mts +3 -13
- package/dist/oauth2/client-credentials-token.d.mts +3 -17
- package/dist/oauth2/client-credentials-token.mjs +1 -4
- package/dist/oauth2/create-authorization-url.d.mts +3 -21
- package/dist/oauth2/dpop.d.mts +2 -23
- package/dist/oauth2/dpop.mjs +1 -1
- package/dist/oauth2/index.d.mts +3 -3
- package/dist/oauth2/index.mjs +2 -2
- package/dist/oauth2/oauth-provider.d.mts +94 -36
- package/dist/oauth2/refresh-access-token.d.mts +3 -19
- package/dist/oauth2/refresh-access-token.mjs +3 -9
- package/dist/oauth2/reject-redirects.mjs +1 -1
- package/dist/oauth2/token-endpoint-auth.d.mts +0 -1
- package/dist/oauth2/utils.d.mts +0 -1
- package/dist/oauth2/utils.mjs +2 -3
- package/dist/oauth2/validate-authorization-code.d.mts +5 -29
- package/dist/oauth2/verify-id-token.d.mts +3 -2
- package/dist/oauth2/verify-id-token.mjs +3 -3
- package/dist/oauth2/verify.d.mts +18 -9
- package/dist/oauth2/verify.mjs +68 -5
- package/dist/social-providers/apple.d.mts +9 -24
- package/dist/social-providers/apple.mjs +2 -1
- package/dist/social-providers/atlassian.d.mts +18 -19
- package/dist/social-providers/atlassian.mjs +1 -1
- package/dist/social-providers/cognito.d.mts +33 -22
- package/dist/social-providers/cognito.mjs +2 -2
- package/dist/social-providers/discord.d.mts +7 -20
- package/dist/social-providers/discord.mjs +1 -1
- package/dist/social-providers/dropbox.d.mts +7 -22
- package/dist/social-providers/dropbox.mjs +1 -1
- package/dist/social-providers/facebook.d.mts +19 -27
- package/dist/social-providers/facebook.mjs +6 -17
- package/dist/social-providers/figma.d.mts +7 -22
- package/dist/social-providers/figma.mjs +1 -1
- package/dist/social-providers/github.d.mts +7 -23
- package/dist/social-providers/github.mjs +1 -1
- package/dist/social-providers/gitlab.d.mts +6 -43
- package/dist/social-providers/gitlab.mjs +1 -1
- package/dist/social-providers/google.d.mts +10 -32
- package/dist/social-providers/google.mjs +2 -1
- package/dist/social-providers/huggingface.d.mts +7 -22
- package/dist/social-providers/huggingface.mjs +1 -1
- package/dist/social-providers/index.d.mts +229 -787
- package/dist/social-providers/kakao.d.mts +8 -33
- package/dist/social-providers/kakao.mjs +1 -1
- package/dist/social-providers/kick.d.mts +7 -22
- package/dist/social-providers/kick.mjs +1 -1
- package/dist/social-providers/line.d.mts +8 -44
- package/dist/social-providers/line.mjs +4 -6
- package/dist/social-providers/linear.d.mts +7 -21
- package/dist/social-providers/linear.mjs +1 -1
- package/dist/social-providers/linkedin.d.mts +7 -21
- package/dist/social-providers/linkedin.mjs +1 -1
- package/dist/social-providers/microsoft-entra-id.d.mts +8 -18
- package/dist/social-providers/microsoft-entra-id.mjs +24 -4
- package/dist/social-providers/naver.d.mts +27 -42
- package/dist/social-providers/naver.mjs +1 -1
- package/dist/social-providers/notion.d.mts +7 -21
- package/dist/social-providers/notion.mjs +1 -1
- package/dist/social-providers/paybin.d.mts +8 -23
- package/dist/social-providers/paybin.mjs +2 -1
- package/dist/social-providers/paypal.d.mts +8 -33
- package/dist/social-providers/paypal.mjs +1 -1
- package/dist/social-providers/polar.d.mts +7 -22
- package/dist/social-providers/polar.mjs +1 -1
- package/dist/social-providers/railway.d.mts +7 -22
- package/dist/social-providers/railway.mjs +1 -1
- package/dist/social-providers/reddit.d.mts +7 -20
- package/dist/social-providers/reddit.mjs +1 -1
- package/dist/social-providers/roblox.d.mts +7 -20
- package/dist/social-providers/roblox.mjs +1 -1
- package/dist/social-providers/salesforce.d.mts +7 -22
- package/dist/social-providers/salesforce.mjs +1 -1
- package/dist/social-providers/slack.d.mts +7 -20
- package/dist/social-providers/slack.mjs +1 -1
- package/dist/social-providers/spotify.d.mts +7 -22
- package/dist/social-providers/spotify.mjs +1 -1
- package/dist/social-providers/tiktok.d.mts +10 -22
- package/dist/social-providers/tiktok.mjs +1 -1
- package/dist/social-providers/twitch.d.mts +7 -20
- package/dist/social-providers/twitch.mjs +1 -1
- package/dist/social-providers/twitter.d.mts +29 -26
- package/dist/social-providers/twitter.mjs +1 -1
- package/dist/social-providers/vercel.d.mts +7 -22
- package/dist/social-providers/vercel.mjs +1 -1
- package/dist/social-providers/vk.d.mts +8 -24
- package/dist/social-providers/vk.mjs +5 -6
- package/dist/social-providers/wechat.d.mts +7 -19
- package/dist/social-providers/wechat.mjs +1 -1
- package/dist/social-providers/zoom.d.mts +9 -25
- package/dist/social-providers/zoom.mjs +1 -1
- package/dist/types/context.d.mts +16 -9
- package/dist/types/cookie.d.mts +0 -1
- package/dist/types/helper.d.mts +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/types/init-options.d.mts +37 -26
- package/dist/types/plugin-client.d.mts +1 -3
- package/dist/types/plugin.d.mts +2 -2
- package/dist/utils/async.d.mts +0 -1
- package/dist/utils/db.d.mts +1 -0
- package/dist/utils/deprecate.d.mts +0 -1
- package/dist/utils/error-codes.d.mts +2 -2
- package/dist/utils/host.d.mts +27 -1
- package/dist/utils/host.mjs +1 -1
- package/dist/utils/ip.d.mts +1 -0
- package/dist/utils/ip.mjs +1 -1
- package/dist/utils/is-api-error.d.mts +0 -1
- package/dist/utils/redirect-uri.d.mts +6 -2
- package/dist/utils/redirect-uri.mjs +11 -1
- package/package.json +10 -2
- package/src/context/request-state.ts +26 -6
- package/src/context/transaction.ts +37 -18
- package/src/db/adapter/factory.ts +34 -28
- package/src/db/adapter/get-default-model-name.ts +23 -14
- package/src/db/database-index.ts +351 -0
- package/src/db/get-tables.ts +89 -9
- package/src/db/index.ts +4 -0
- package/src/db/internal.ts +12 -0
- package/src/db/plugin.ts +3 -1
- package/src/db/schema/account.ts +27 -1
- package/src/db/schema/user.ts +1 -1
- package/src/db/type.ts +12 -0
- package/src/error/codes.ts +1 -0
- package/src/oauth2/index.ts +5 -0
- package/src/oauth2/oauth-provider.ts +105 -36
- package/src/oauth2/verify-id-token.ts +4 -2
- package/src/oauth2/verify.ts +121 -12
- package/src/social-providers/apple.ts +2 -1
- package/src/social-providers/atlassian.ts +1 -1
- package/src/social-providers/cognito.ts +2 -2
- package/src/social-providers/discord.ts +1 -1
- package/src/social-providers/dropbox.ts +1 -1
- package/src/social-providers/facebook.ts +21 -28
- package/src/social-providers/figma.ts +1 -1
- package/src/social-providers/github.ts +1 -1
- package/src/social-providers/gitlab.ts +1 -1
- package/src/social-providers/google.ts +2 -1
- package/src/social-providers/huggingface.ts +1 -1
- package/src/social-providers/kakao.ts +1 -1
- package/src/social-providers/kick.ts +1 -1
- package/src/social-providers/line.ts +7 -12
- package/src/social-providers/linear.ts +1 -1
- package/src/social-providers/linkedin.ts +1 -1
- package/src/social-providers/microsoft-entra-id.ts +36 -27
- package/src/social-providers/naver.ts +1 -1
- package/src/social-providers/notion.ts +1 -1
- package/src/social-providers/paybin.ts +2 -1
- package/src/social-providers/paypal.ts +1 -1
- package/src/social-providers/polar.ts +1 -1
- package/src/social-providers/railway.ts +1 -1
- package/src/social-providers/reddit.ts +1 -1
- package/src/social-providers/roblox.ts +1 -1
- package/src/social-providers/salesforce.ts +1 -1
- package/src/social-providers/slack.ts +1 -1
- package/src/social-providers/spotify.ts +1 -1
- package/src/social-providers/tiktok.ts +2 -2
- package/src/social-providers/twitch.ts +1 -1
- package/src/social-providers/twitter.ts +1 -1
- package/src/social-providers/vercel.ts +1 -1
- package/src/social-providers/vk.ts +2 -2
- package/src/social-providers/wechat.ts +1 -1
- package/src/social-providers/zoom.ts +1 -1
- package/src/types/context.ts +21 -14
- package/src/types/init-options.ts +15 -14
- package/src/utils/redirect-uri.ts +20 -0
|
@@ -59,6 +59,7 @@ export const wechat = (options: WeChatOptions) => {
|
|
|
59
59
|
return {
|
|
60
60
|
id: "wechat",
|
|
61
61
|
name: "WeChat",
|
|
62
|
+
accountSubject: ({ profile }) => profile.unionid || profile.openid,
|
|
62
63
|
createAuthorizationURL({ state, scopes, redirectURI, additionalParams }) {
|
|
63
64
|
const _scopes = options.disableDefaultScope ? [] : ["snsapi_login"];
|
|
64
65
|
options.scope && _scopes.push(...options.scope);
|
|
@@ -206,7 +207,6 @@ export const wechat = (options: WeChatOptions) => {
|
|
|
206
207
|
const userMap = await options.mapProfileToUser?.(profile);
|
|
207
208
|
return {
|
|
208
209
|
user: {
|
|
209
|
-
id: profile.unionid || profile.openid || openid,
|
|
210
210
|
name: profile.nickname,
|
|
211
211
|
// WeChat does not return an email, and the OAuth callback rejects a
|
|
212
212
|
// missing one, so the default sign-in would always fail. Synthesize a
|
|
@@ -152,6 +152,7 @@ export const zoom = (userOptions: ZoomOptions) => {
|
|
|
152
152
|
return {
|
|
153
153
|
id: "zoom",
|
|
154
154
|
name: "Zoom",
|
|
155
|
+
accountSubject: ({ profile }) => profile.id,
|
|
155
156
|
createAuthorizationURL: async ({
|
|
156
157
|
state,
|
|
157
158
|
redirectURI,
|
|
@@ -210,7 +211,6 @@ export const zoom = (userOptions: ZoomOptions) => {
|
|
|
210
211
|
|
|
211
212
|
return {
|
|
212
213
|
user: {
|
|
213
|
-
id: profile.id,
|
|
214
214
|
name: profile.display_name,
|
|
215
215
|
image: profile.pic_url,
|
|
216
216
|
email: profile.email,
|
package/src/types/context.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
Verification,
|
|
10
10
|
} from "../db";
|
|
11
11
|
import type { DBAdapter, Where } from "../db/adapter";
|
|
12
|
+
import type { AccountKey } from "../db/schema/account";
|
|
12
13
|
import type { createLogger } from "../env";
|
|
13
14
|
import type { OAuthProvider } from "../oauth2";
|
|
14
15
|
import type { BetterAuthCookie, BetterAuthCookies } from "./cookie";
|
|
@@ -132,6 +133,9 @@ export interface InternalAdapter<
|
|
|
132
133
|
dontRememberMe?: boolean | undefined,
|
|
133
134
|
override?: (Partial<Session> & Record<string, any>) | undefined,
|
|
134
135
|
overrideAll?: boolean | undefined,
|
|
136
|
+
storageOptions?:
|
|
137
|
+
| { deferSecondaryStorageWrites?: boolean | undefined }
|
|
138
|
+
| undefined,
|
|
135
139
|
): Promise<Session>;
|
|
136
140
|
|
|
137
141
|
findSession(token: string): Promise<{
|
|
@@ -160,7 +164,7 @@ export interface InternalAdapter<
|
|
|
160
164
|
/**
|
|
161
165
|
* Delete an account by its primary key.
|
|
162
166
|
*
|
|
163
|
-
* @param id - The account row's primary key
|
|
167
|
+
* @param id - The account row's primary key, not its provider account ID.
|
|
164
168
|
*/
|
|
165
169
|
deleteAccount(id: string): Promise<void>;
|
|
166
170
|
|
|
@@ -174,15 +178,18 @@ export interface InternalAdapter<
|
|
|
174
178
|
*/
|
|
175
179
|
deleteSessions(sessionTokens: string[]): Promise<void>;
|
|
176
180
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
181
|
+
findAccountOwnerByKey(accountKey: AccountKey): Promise<
|
|
182
|
+
| {
|
|
183
|
+
kind: "owned";
|
|
184
|
+
user: User;
|
|
185
|
+
account: Account;
|
|
186
|
+
}
|
|
187
|
+
| {
|
|
188
|
+
kind: "orphaned";
|
|
189
|
+
account: Account;
|
|
190
|
+
}
|
|
191
|
+
| null
|
|
192
|
+
>;
|
|
186
193
|
|
|
187
194
|
findUserByEmail(
|
|
188
195
|
email: string,
|
|
@@ -210,10 +217,10 @@ export interface InternalAdapter<
|
|
|
210
217
|
|
|
211
218
|
findAccounts(userId: string): Promise<Account[]>;
|
|
212
219
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
): Promise<Account | null>;
|
|
220
|
+
/** Find the credential account whose stable local subject is the user ID. */
|
|
221
|
+
findCredentialAccount(userId: string): Promise<Account | null>;
|
|
222
|
+
|
|
223
|
+
findAccountByKey(accountKey: AccountKey): Promise<Account | null>;
|
|
217
224
|
|
|
218
225
|
findAccountByUserId(userId: string): Promise<Account[]>;
|
|
219
226
|
|
|
@@ -454,6 +454,21 @@ export type BetterAuthAdvancedOptions = {
|
|
|
454
454
|
* function.
|
|
455
455
|
*/
|
|
456
456
|
generateId?: GenerateIdFn | false | "serial" | "uuid";
|
|
457
|
+
/**
|
|
458
|
+
* Enable database joins for adapters that support them.
|
|
459
|
+
*
|
|
460
|
+
* When disabled (default), related data is fetched via
|
|
461
|
+
* separate queries. When enabled, adapters that support
|
|
462
|
+
* native joins use them; otherwise Better Auth falls back
|
|
463
|
+
* to separate queries.
|
|
464
|
+
*
|
|
465
|
+
* Please read the adapter documentation for more
|
|
466
|
+
* information regarding joins before enabling this.
|
|
467
|
+
* Not all adapters support joins.
|
|
468
|
+
*
|
|
469
|
+
* @default false
|
|
470
|
+
*/
|
|
471
|
+
joins?: boolean;
|
|
457
472
|
}
|
|
458
473
|
| undefined;
|
|
459
474
|
/**
|
|
@@ -1783,18 +1798,4 @@ export type BetterAuthOptions = {
|
|
|
1783
1798
|
debug?: boolean;
|
|
1784
1799
|
}
|
|
1785
1800
|
| undefined;
|
|
1786
|
-
/**
|
|
1787
|
-
* Experimental features
|
|
1788
|
-
*/
|
|
1789
|
-
experimental?: {
|
|
1790
|
-
/**
|
|
1791
|
-
* Enable experimental joins for your database adapter.
|
|
1792
|
-
*
|
|
1793
|
-
* Please read the adapter documentation for more information regarding joins before enabling this.
|
|
1794
|
-
* Not all adapters support joins.
|
|
1795
|
-
*
|
|
1796
|
-
* @default false
|
|
1797
|
-
*/
|
|
1798
|
-
joins?: boolean;
|
|
1799
|
-
};
|
|
1800
1801
|
};
|
|
@@ -2,6 +2,26 @@ import * as z from "zod";
|
|
|
2
2
|
import { isLoopbackHost } from "./host";
|
|
3
3
|
import { DANGEROUS_URL_SCHEMES } from "./url";
|
|
4
4
|
|
|
5
|
+
const REVERSE_DOMAIN_PRIVATE_USE_SCHEME =
|
|
6
|
+
/^[a-z](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$/i;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Returns whether a parsed redirect URI uses an authority-free, reverse-domain
|
|
10
|
+
* private-use scheme as recommended by RFC 8252 §7.1.
|
|
11
|
+
*/
|
|
12
|
+
export function isReverseDomainPrivateUseRedirectUri(uri: URL): boolean {
|
|
13
|
+
const scheme = uri.protocol.slice(0, -1);
|
|
14
|
+
const schemeSpecificPart = uri.href.slice(uri.protocol.length);
|
|
15
|
+
return (
|
|
16
|
+
uri.protocol !== "http:" &&
|
|
17
|
+
uri.protocol !== "https:" &&
|
|
18
|
+
uri.host.length === 0 &&
|
|
19
|
+
schemeSpecificPart.startsWith("/") &&
|
|
20
|
+
!schemeSpecificPart.startsWith("//") &&
|
|
21
|
+
REVERSE_DOMAIN_PRIVATE_USE_SCHEME.test(scheme)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
5
25
|
/**
|
|
6
26
|
* Zod schema for OAuth redirect URIs and other developer-supplied URLs that the
|
|
7
27
|
* server stores and later hands back to a browser.
|