better-auth 1.4.8-beta.1 → 1.4.8-beta.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/dist/api/index.d.mts +393 -393
- package/dist/api/middlewares/origin-check.d.mts +3 -3
- package/dist/api/routes/account.d.mts +11 -11
- package/dist/api/routes/callback.d.mts +2 -2
- package/dist/api/routes/email-verification.d.mts +4 -4
- package/dist/api/routes/error.d.mts +2 -2
- package/dist/api/routes/ok.d.mts +2 -2
- package/dist/api/routes/reset-password.d.mts +5 -5
- package/dist/api/routes/session.d.mts +14 -14
- package/dist/api/routes/sign-in.d.mts +3 -3
- package/dist/api/routes/sign-out.d.mts +2 -2
- package/dist/api/routes/sign-up.d.mts +2 -2
- package/dist/api/routes/update-user.d.mts +13 -13
- package/dist/client/lynx/index.d.mts +15 -15
- package/dist/client/react/index.d.mts +13 -13
- package/dist/client/solid/index.d.mts +13 -13
- package/dist/client/svelte/index.d.mts +13 -13
- package/dist/client/vue/index.d.mts +15 -15
- package/dist/db/field.d.mts +6 -6
- package/dist/integrations/next-js.d.mts +4 -4
- package/dist/integrations/svelte-kit.d.mts +2 -2
- package/dist/integrations/tanstack-start.d.mts +4 -4
- package/dist/plugins/anonymous/index.d.mts +6 -5
- package/dist/plugins/anonymous/index.mjs +1 -0
- package/dist/plugins/anonymous/index.mjs.map +1 -1
- package/dist/plugins/api-key/index.d.mts +18 -18
- package/dist/plugins/bearer/index.d.mts +8 -7
- package/dist/plugins/bearer/index.mjs +2 -1
- package/dist/plugins/bearer/index.mjs.map +1 -1
- package/dist/plugins/captcha/index.d.mts +3 -2
- package/dist/plugins/captcha/index.mjs +2 -1
- package/dist/plugins/captcha/index.mjs.map +1 -1
- package/dist/plugins/custom-session/index.d.mts +6 -5
- package/dist/plugins/custom-session/index.mjs +2 -1
- package/dist/plugins/custom-session/index.mjs.map +1 -1
- package/dist/plugins/device-authorization/index.d.mts +35 -8
- package/dist/plugins/device-authorization/index.mjs +2 -1
- package/dist/plugins/device-authorization/index.mjs.map +1 -1
- package/dist/plugins/email-otp/index.d.mts +49 -48
- package/dist/plugins/email-otp/index.mjs +2 -1
- package/dist/plugins/email-otp/index.mjs.map +1 -1
- package/dist/plugins/generic-oauth/index.d.mts +1 -0
- package/dist/plugins/generic-oauth/index.mjs +1 -0
- package/dist/plugins/generic-oauth/index.mjs.map +1 -1
- package/dist/plugins/haveibeenpwned/index.d.mts +4 -3
- package/dist/plugins/haveibeenpwned/index.mjs +1 -0
- package/dist/plugins/haveibeenpwned/index.mjs.map +1 -1
- package/dist/plugins/index.d.mts +4 -3
- package/dist/plugins/jwt/index.d.mts +9 -9
- package/dist/plugins/last-login-method/index.d.mts +3 -2
- package/dist/plugins/last-login-method/index.mjs +2 -1
- package/dist/plugins/last-login-method/index.mjs.map +1 -1
- package/dist/plugins/magic-link/index.d.mts +5 -4
- package/dist/plugins/magic-link/index.mjs +2 -1
- package/dist/plugins/magic-link/index.mjs.map +1 -1
- package/dist/plugins/mcp/index.d.mts +11 -10
- package/dist/plugins/mcp/index.mjs +2 -1
- package/dist/plugins/mcp/index.mjs.map +1 -1
- package/dist/plugins/multi-session/index.d.mts +10 -9
- package/dist/plugins/multi-session/index.mjs +1 -0
- package/dist/plugins/multi-session/index.mjs.map +1 -1
- package/dist/plugins/oauth-proxy/index.d.mts +8 -8
- package/dist/plugins/oidc-provider/index.d.mts +13 -13
- package/dist/plugins/one-tap/index.d.mts +4 -3
- package/dist/plugins/one-tap/index.mjs +2 -1
- package/dist/plugins/one-tap/index.mjs.map +1 -1
- package/dist/plugins/one-time-token/index.d.mts +6 -5
- package/dist/plugins/one-time-token/index.mjs +2 -1
- package/dist/plugins/one-time-token/index.mjs.map +1 -1
- package/dist/plugins/open-api/index.d.mts +4 -3
- package/dist/plugins/open-api/index.mjs +2 -1
- package/dist/plugins/open-api/index.mjs.map +1 -1
- package/dist/plugins/organization/organization.d.mts +4 -4
- package/dist/plugins/organization/organization.mjs.map +1 -1
- package/dist/plugins/organization/routes/crud-access-control.d.mts +22 -22
- package/dist/plugins/organization/routes/crud-invites.d.mts +58 -58
- package/dist/plugins/organization/routes/crud-members.d.mts +62 -62
- package/dist/plugins/organization/routes/crud-org.d.mts +51 -51
- package/dist/plugins/organization/routes/crud-team.d.mts +76 -76
- package/dist/plugins/phone-number/index.d.mts +10 -9
- package/dist/plugins/phone-number/index.mjs +1 -0
- package/dist/plugins/phone-number/index.mjs.map +1 -1
- package/dist/plugins/siwe/index.d.mts +4 -3
- package/dist/plugins/siwe/index.mjs +2 -1
- package/dist/plugins/siwe/index.mjs.map +1 -1
- package/dist/plugins/two-factor/backup-codes/index.d.mts +5 -5
- package/dist/plugins/two-factor/index.d.mts +18 -18
- package/dist/plugins/two-factor/otp/index.d.mts +3 -3
- package/dist/plugins/two-factor/totp/index.d.mts +5 -5
- package/dist/plugins/username/index.d.mts +10 -9
- package/dist/plugins/username/index.mjs +1 -0
- package/dist/plugins/username/index.mjs.map +1 -1
- package/dist/test-utils/test-instance.d.mts +271 -271
- package/dist/utils/time.d.mts +29 -1
- package/package.json +7 -7
|
@@ -2,7 +2,7 @@ import { DeepPartial, Expand, HasRequiredKeys, LiteralNumber, LiteralUnion, Omit
|
|
|
2
2
|
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal } from "../types.mjs";
|
|
3
3
|
import { BetterAuthClientOptions, BetterAuthClientPlugin } from "@better-auth/core";
|
|
4
4
|
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
5
|
-
import * as
|
|
5
|
+
import * as _better_fetch_fetch15 from "@better-fetch/fetch";
|
|
6
6
|
import { BetterFetchError } from "@better-fetch/fetch";
|
|
7
7
|
import { Accessor } from "solid-js";
|
|
8
8
|
export * from "nanostores";
|
|
@@ -46,21 +46,21 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
46
46
|
error: null;
|
|
47
47
|
} ? S : Res extends Record<string, any> ? Res : never : never>;
|
|
48
48
|
};
|
|
49
|
-
$fetch:
|
|
50
|
-
plugins: (
|
|
49
|
+
$fetch: _better_fetch_fetch15.BetterFetch<{
|
|
50
|
+
plugins: (_better_fetch_fetch15.BetterFetchPlugin<Record<string, any>> | {
|
|
51
51
|
id: string;
|
|
52
52
|
name: string;
|
|
53
53
|
hooks: {
|
|
54
|
-
onSuccess(context:
|
|
54
|
+
onSuccess(context: _better_fetch_fetch15.SuccessContext<any>): void;
|
|
55
55
|
};
|
|
56
56
|
} | {
|
|
57
57
|
id: string;
|
|
58
58
|
name: string;
|
|
59
59
|
hooks: {
|
|
60
|
-
onSuccess: ((context:
|
|
61
|
-
onError: ((context:
|
|
62
|
-
onRequest: (<T extends Record<string, any>>(context:
|
|
63
|
-
onResponse: ((context:
|
|
60
|
+
onSuccess: ((context: _better_fetch_fetch15.SuccessContext<any>) => Promise<void> | void) | undefined;
|
|
61
|
+
onError: ((context: _better_fetch_fetch15.ErrorContext) => Promise<void> | void) | undefined;
|
|
62
|
+
onRequest: (<T extends Record<string, any>>(context: _better_fetch_fetch15.RequestContext<T>) => Promise<_better_fetch_fetch15.RequestContext | void> | _better_fetch_fetch15.RequestContext | void) | undefined;
|
|
63
|
+
onResponse: ((context: _better_fetch_fetch15.ResponseContext) => Promise<Response | void | _better_fetch_fetch15.ResponseContext> | Response | _better_fetch_fetch15.ResponseContext | void) | undefined;
|
|
64
64
|
};
|
|
65
65
|
})[];
|
|
66
66
|
cache?: RequestCache | undefined;
|
|
@@ -80,12 +80,12 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
80
80
|
referrerPolicy?: ReferrerPolicy | undefined;
|
|
81
81
|
signal?: (AbortSignal | null) | undefined;
|
|
82
82
|
window?: null | undefined;
|
|
83
|
-
onRetry?: ((response:
|
|
83
|
+
onRetry?: ((response: _better_fetch_fetch15.ResponseContext) => Promise<void> | void) | undefined;
|
|
84
84
|
hookOptions?: {
|
|
85
85
|
cloneResponse?: boolean;
|
|
86
86
|
} | undefined;
|
|
87
87
|
timeout?: number | undefined;
|
|
88
|
-
customFetchImpl:
|
|
88
|
+
customFetchImpl: _better_fetch_fetch15.FetchEsque;
|
|
89
89
|
baseURL: string;
|
|
90
90
|
throw?: boolean | undefined;
|
|
91
91
|
auth?: ({
|
|
@@ -105,10 +105,10 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
105
105
|
params?: any;
|
|
106
106
|
duplex?: "full" | "half" | undefined;
|
|
107
107
|
jsonParser: (text: string) => Promise<any> | any;
|
|
108
|
-
retry?:
|
|
108
|
+
retry?: _better_fetch_fetch15.RetryOptions | undefined;
|
|
109
109
|
retryAttempt?: number | undefined;
|
|
110
|
-
output?: (
|
|
111
|
-
errorSchema?:
|
|
110
|
+
output?: (_better_fetch_fetch15.StandardSchemaV1 | typeof Blob | typeof File) | undefined;
|
|
111
|
+
errorSchema?: _better_fetch_fetch15.StandardSchemaV1 | undefined;
|
|
112
112
|
disableValidation?: boolean | undefined;
|
|
113
113
|
disableSignal?: boolean | undefined;
|
|
114
114
|
}, unknown, unknown, {}>;
|
|
@@ -4,7 +4,7 @@ import { BetterAuthClientOptions, BetterAuthClientPlugin } from "@better-auth/co
|
|
|
4
4
|
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
5
5
|
import * as nanostores0 from "nanostores";
|
|
6
6
|
import { Atom } from "nanostores";
|
|
7
|
-
import * as
|
|
7
|
+
import * as _better_fetch_fetch31 from "@better-fetch/fetch";
|
|
8
8
|
import { BetterFetchError } from "@better-fetch/fetch";
|
|
9
9
|
export * from "nanostores";
|
|
10
10
|
export * from "@better-fetch/fetch";
|
|
@@ -32,21 +32,21 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
32
32
|
isPending: boolean;
|
|
33
33
|
isRefetching: boolean;
|
|
34
34
|
}>;
|
|
35
|
-
$fetch:
|
|
36
|
-
plugins: (
|
|
35
|
+
$fetch: _better_fetch_fetch31.BetterFetch<{
|
|
36
|
+
plugins: (_better_fetch_fetch31.BetterFetchPlugin<Record<string, any>> | {
|
|
37
37
|
id: string;
|
|
38
38
|
name: string;
|
|
39
39
|
hooks: {
|
|
40
|
-
onSuccess(context:
|
|
40
|
+
onSuccess(context: _better_fetch_fetch31.SuccessContext<any>): void;
|
|
41
41
|
};
|
|
42
42
|
} | {
|
|
43
43
|
id: string;
|
|
44
44
|
name: string;
|
|
45
45
|
hooks: {
|
|
46
|
-
onSuccess: ((context:
|
|
47
|
-
onError: ((context:
|
|
48
|
-
onRequest: (<T extends Record<string, any>>(context:
|
|
49
|
-
onResponse: ((context:
|
|
46
|
+
onSuccess: ((context: _better_fetch_fetch31.SuccessContext<any>) => Promise<void> | void) | undefined;
|
|
47
|
+
onError: ((context: _better_fetch_fetch31.ErrorContext) => Promise<void> | void) | undefined;
|
|
48
|
+
onRequest: (<T extends Record<string, any>>(context: _better_fetch_fetch31.RequestContext<T>) => Promise<_better_fetch_fetch31.RequestContext | void> | _better_fetch_fetch31.RequestContext | void) | undefined;
|
|
49
|
+
onResponse: ((context: _better_fetch_fetch31.ResponseContext) => Promise<Response | void | _better_fetch_fetch31.ResponseContext> | Response | _better_fetch_fetch31.ResponseContext | void) | undefined;
|
|
50
50
|
};
|
|
51
51
|
})[];
|
|
52
52
|
cache?: RequestCache | undefined;
|
|
@@ -66,12 +66,12 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
66
66
|
referrerPolicy?: ReferrerPolicy | undefined;
|
|
67
67
|
signal?: (AbortSignal | null) | undefined;
|
|
68
68
|
window?: null | undefined;
|
|
69
|
-
onRetry?: ((response:
|
|
69
|
+
onRetry?: ((response: _better_fetch_fetch31.ResponseContext) => Promise<void> | void) | undefined;
|
|
70
70
|
hookOptions?: {
|
|
71
71
|
cloneResponse?: boolean;
|
|
72
72
|
} | undefined;
|
|
73
73
|
timeout?: number | undefined;
|
|
74
|
-
customFetchImpl:
|
|
74
|
+
customFetchImpl: _better_fetch_fetch31.FetchEsque;
|
|
75
75
|
baseURL: string;
|
|
76
76
|
throw?: boolean | undefined;
|
|
77
77
|
auth?: ({
|
|
@@ -91,10 +91,10 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
91
91
|
params?: any;
|
|
92
92
|
duplex?: "full" | "half" | undefined;
|
|
93
93
|
jsonParser: (text: string) => Promise<any> | any;
|
|
94
|
-
retry?:
|
|
94
|
+
retry?: _better_fetch_fetch31.RetryOptions | undefined;
|
|
95
95
|
retryAttempt?: number | undefined;
|
|
96
|
-
output?: (
|
|
97
|
-
errorSchema?:
|
|
96
|
+
output?: (_better_fetch_fetch31.StandardSchemaV1 | typeof Blob | typeof File) | undefined;
|
|
97
|
+
errorSchema?: _better_fetch_fetch31.StandardSchemaV1 | undefined;
|
|
98
98
|
disableValidation?: boolean | undefined;
|
|
99
99
|
disableSignal?: boolean | undefined;
|
|
100
100
|
}, unknown, unknown, {}>;
|
|
@@ -2,8 +2,8 @@ import { DeepPartial, Expand, HasRequiredKeys, LiteralNumber, LiteralUnion, Omit
|
|
|
2
2
|
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal } from "../types.mjs";
|
|
3
3
|
import { BetterAuthClientOptions, BetterAuthClientPlugin } from "@better-auth/core";
|
|
4
4
|
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
5
|
-
import * as
|
|
6
|
-
import * as
|
|
5
|
+
import * as nanostores2 from "nanostores";
|
|
6
|
+
import * as _better_fetch_fetch63 from "@better-fetch/fetch";
|
|
7
7
|
import { BetterFetchError } from "@better-fetch/fetch";
|
|
8
8
|
import { DeepReadonly, Ref } from "vue";
|
|
9
9
|
export * from "nanostores";
|
|
@@ -70,21 +70,21 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
70
70
|
error: null;
|
|
71
71
|
} ? S : Res extends Record<string, any> ? Res : never : never>;
|
|
72
72
|
};
|
|
73
|
-
$fetch:
|
|
74
|
-
plugins: (
|
|
73
|
+
$fetch: _better_fetch_fetch63.BetterFetch<{
|
|
74
|
+
plugins: (_better_fetch_fetch63.BetterFetchPlugin<Record<string, any>> | {
|
|
75
75
|
id: string;
|
|
76
76
|
name: string;
|
|
77
77
|
hooks: {
|
|
78
|
-
onSuccess(context:
|
|
78
|
+
onSuccess(context: _better_fetch_fetch63.SuccessContext<any>): void;
|
|
79
79
|
};
|
|
80
80
|
} | {
|
|
81
81
|
id: string;
|
|
82
82
|
name: string;
|
|
83
83
|
hooks: {
|
|
84
|
-
onSuccess: ((context:
|
|
85
|
-
onError: ((context:
|
|
86
|
-
onRequest: (<T extends Record<string, any>>(context:
|
|
87
|
-
onResponse: ((context:
|
|
84
|
+
onSuccess: ((context: _better_fetch_fetch63.SuccessContext<any>) => Promise<void> | void) | undefined;
|
|
85
|
+
onError: ((context: _better_fetch_fetch63.ErrorContext) => Promise<void> | void) | undefined;
|
|
86
|
+
onRequest: (<T extends Record<string, any>>(context: _better_fetch_fetch63.RequestContext<T>) => Promise<_better_fetch_fetch63.RequestContext | void> | _better_fetch_fetch63.RequestContext | void) | undefined;
|
|
87
|
+
onResponse: ((context: _better_fetch_fetch63.ResponseContext) => Promise<Response | void | _better_fetch_fetch63.ResponseContext> | Response | _better_fetch_fetch63.ResponseContext | void) | undefined;
|
|
88
88
|
};
|
|
89
89
|
})[];
|
|
90
90
|
cache?: RequestCache | undefined;
|
|
@@ -104,12 +104,12 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
104
104
|
referrerPolicy?: ReferrerPolicy | undefined;
|
|
105
105
|
signal?: (AbortSignal | null) | undefined;
|
|
106
106
|
window?: null | undefined;
|
|
107
|
-
onRetry?: ((response:
|
|
107
|
+
onRetry?: ((response: _better_fetch_fetch63.ResponseContext) => Promise<void> | void) | undefined;
|
|
108
108
|
hookOptions?: {
|
|
109
109
|
cloneResponse?: boolean;
|
|
110
110
|
} | undefined;
|
|
111
111
|
timeout?: number | undefined;
|
|
112
|
-
customFetchImpl:
|
|
112
|
+
customFetchImpl: _better_fetch_fetch63.FetchEsque;
|
|
113
113
|
baseURL: string;
|
|
114
114
|
throw?: boolean | undefined;
|
|
115
115
|
auth?: ({
|
|
@@ -129,17 +129,17 @@ declare function createAuthClient<Option extends BetterAuthClientOptions>(option
|
|
|
129
129
|
params?: any;
|
|
130
130
|
duplex?: "full" | "half" | undefined;
|
|
131
131
|
jsonParser: (text: string) => Promise<any> | any;
|
|
132
|
-
retry?:
|
|
132
|
+
retry?: _better_fetch_fetch63.RetryOptions | undefined;
|
|
133
133
|
retryAttempt?: number | undefined;
|
|
134
|
-
output?: (
|
|
135
|
-
errorSchema?:
|
|
134
|
+
output?: (_better_fetch_fetch63.StandardSchemaV1 | typeof Blob | typeof File) | undefined;
|
|
135
|
+
errorSchema?: _better_fetch_fetch63.StandardSchemaV1 | undefined;
|
|
136
136
|
disableValidation?: boolean | undefined;
|
|
137
137
|
disableSignal?: boolean | undefined;
|
|
138
138
|
}, unknown, unknown, {}>;
|
|
139
139
|
$store: {
|
|
140
140
|
notify: (signal?: (Omit<string, "$sessionSignal"> | "$sessionSignal") | undefined) => void;
|
|
141
141
|
listen: (signal: Omit<string, "$sessionSignal"> | "$sessionSignal", listener: (value: boolean, oldValue?: boolean | undefined) => void) => void;
|
|
142
|
-
atoms: Record<string,
|
|
142
|
+
atoms: Record<string, nanostores2.WritableAtom<any>>;
|
|
143
143
|
};
|
|
144
144
|
$ERROR_CODES: PrettifyDeep<InferErrorCodes<Option> & typeof BASE_ERROR_CODES>;
|
|
145
145
|
};
|
package/dist/db/field.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _better_auth_core24 from "@better-auth/core";
|
|
2
2
|
import { BetterAuthOptions } from "@better-auth/core";
|
|
3
|
-
import * as
|
|
3
|
+
import * as _better_auth_core_db9 from "@better-auth/core/db";
|
|
4
4
|
import { DBFieldAttribute, DBFieldAttributeConfig, DBFieldType } from "@better-auth/core/db";
|
|
5
5
|
import * as _standard_schema_spec0 from "@standard-schema/spec";
|
|
6
6
|
|
|
@@ -9,11 +9,11 @@ declare const createFieldAttribute: <T extends DBFieldType, C extends DBFieldAtt
|
|
|
9
9
|
required?: boolean | undefined;
|
|
10
10
|
returned?: boolean | undefined;
|
|
11
11
|
input?: boolean | undefined;
|
|
12
|
-
defaultValue?: (
|
|
13
|
-
onUpdate?: (() =>
|
|
12
|
+
defaultValue?: (_better_auth_core_db9.DBPrimitive | (() => _better_auth_core_db9.DBPrimitive)) | undefined;
|
|
13
|
+
onUpdate?: (() => _better_auth_core_db9.DBPrimitive) | undefined;
|
|
14
14
|
transform?: {
|
|
15
|
-
input?: (value:
|
|
16
|
-
output?: (value:
|
|
15
|
+
input?: (value: _better_auth_core_db9.DBPrimitive) => _better_auth_core24.Awaitable<_better_auth_core_db9.DBPrimitive>;
|
|
16
|
+
output?: (value: _better_auth_core_db9.DBPrimitive) => _better_auth_core24.Awaitable<_better_auth_core_db9.DBPrimitive>;
|
|
17
17
|
} | undefined;
|
|
18
18
|
references?: {
|
|
19
19
|
model: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as
|
|
1
|
+
import * as _better_auth_core1 from "@better-auth/core";
|
|
2
|
+
import * as better_call133 from "better-call";
|
|
3
3
|
|
|
4
4
|
//#region src/integrations/next-js.d.ts
|
|
5
5
|
declare function toNextJsHandler(auth: {
|
|
@@ -15,8 +15,8 @@ declare const nextCookies: () => {
|
|
|
15
15
|
id: "next-cookies";
|
|
16
16
|
hooks: {
|
|
17
17
|
after: {
|
|
18
|
-
matcher(ctx:
|
|
19
|
-
handler: (inputContext:
|
|
18
|
+
matcher(ctx: _better_auth_core1.HookEndpointContext): true;
|
|
19
|
+
handler: (inputContext: better_call133.MiddlewareInputContext<better_call133.MiddlewareOptions>) => Promise<void>;
|
|
20
20
|
}[];
|
|
21
21
|
};
|
|
22
22
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BetterAuthOptions } from "../types/index.mjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as better_call131 from "better-call";
|
|
3
3
|
import { RequestEvent } from "@sveltejs/kit";
|
|
4
4
|
|
|
5
5
|
//#region src/integrations/svelte-kit.d.ts
|
|
@@ -29,7 +29,7 @@ declare const sveltekitCookies: (getRequestEvent: () => RequestEvent<any, any>)
|
|
|
29
29
|
hooks: {
|
|
30
30
|
after: {
|
|
31
31
|
matcher(): true;
|
|
32
|
-
handler: (inputContext:
|
|
32
|
+
handler: (inputContext: better_call131.MiddlewareInputContext<better_call131.MiddlewareOptions>) => Promise<void>;
|
|
33
33
|
}[];
|
|
34
34
|
};
|
|
35
35
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as
|
|
1
|
+
import * as _better_auth_core2 from "@better-auth/core";
|
|
2
|
+
import * as better_call135 from "better-call";
|
|
3
3
|
|
|
4
4
|
//#region src/integrations/tanstack-start.d.ts
|
|
5
5
|
declare const tanstackStartCookies: () => {
|
|
6
6
|
id: "tanstack-start-cookies";
|
|
7
7
|
hooks: {
|
|
8
8
|
after: {
|
|
9
|
-
matcher(ctx:
|
|
10
|
-
handler: (inputContext:
|
|
9
|
+
matcher(ctx: _better_auth_core2.HookEndpointContext): true;
|
|
10
|
+
handler: (inputContext: better_call135.MiddlewareInputContext<better_call135.MiddlewareOptions>) => Promise<void>;
|
|
11
11
|
}[];
|
|
12
12
|
};
|
|
13
13
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { AnonymousOptions } from "./types.mjs";
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
2
|
+
import * as _better_auth_core3 from "@better-auth/core";
|
|
3
|
+
import * as better_call137 from "better-call";
|
|
4
4
|
|
|
5
5
|
//#region src/plugins/anonymous/index.d.ts
|
|
6
6
|
declare const anonymous: (options?: AnonymousOptions | undefined) => {
|
|
7
7
|
id: "anonymous";
|
|
8
8
|
endpoints: {
|
|
9
|
-
signInAnonymous:
|
|
9
|
+
signInAnonymous: better_call137.StrictEndpoint<"/sign-in/anonymous", {
|
|
10
10
|
method: "POST";
|
|
11
11
|
metadata: {
|
|
12
12
|
openapi: {
|
|
@@ -47,10 +47,11 @@ declare const anonymous: (options?: AnonymousOptions | undefined) => {
|
|
|
47
47
|
};
|
|
48
48
|
hooks: {
|
|
49
49
|
after: {
|
|
50
|
-
matcher(ctx:
|
|
51
|
-
handler: (inputContext:
|
|
50
|
+
matcher(ctx: _better_auth_core3.HookEndpointContext): boolean;
|
|
51
|
+
handler: (inputContext: better_call137.MiddlewareInputContext<better_call137.MiddlewareOptions>) => Promise<void>;
|
|
52
52
|
}[];
|
|
53
53
|
};
|
|
54
|
+
options: AnonymousOptions | undefined;
|
|
54
55
|
schema: {
|
|
55
56
|
user: {
|
|
56
57
|
fields: {
|
|
@@ -100,6 +100,7 @@ const anonymous = (options) => {
|
|
|
100
100
|
if (!options?.disableDeleteAnonymousUser) await ctx.context.internalAdapter.deleteUser(session.user.id);
|
|
101
101
|
})
|
|
102
102
|
}] },
|
|
103
|
+
options,
|
|
103
104
|
schema: mergeSchema(schema, options?.schema),
|
|
104
105
|
$ERROR_CODES: ANONYMOUS_ERROR_CODES
|
|
105
106
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/anonymous/index.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"@better-auth/core\";\nimport {\n\tcreateAuthEndpoint,\n\tcreateAuthMiddleware,\n} from \"@better-auth/core/api\";\nimport { generateId } from \"@better-auth/core/utils\";\nimport * as z from \"zod\";\nimport { APIError, getSessionFromCtx } from \"../../api\";\nimport { parseSetCookieHeader, setSessionCookie } from \"../../cookies\";\nimport { mergeSchema } from \"../../db/schema\";\nimport { ANONYMOUS_ERROR_CODES } from \"./error-codes\";\nimport { schema } from \"./schema\";\nimport type { AnonymousOptions } from \"./types\";\n\nasync function getAnonUserEmail(\n\toptions: AnonymousOptions | undefined,\n): Promise<string> {\n\tconst customEmail = await options?.generateRandomEmail?.();\n\tif (customEmail) {\n\t\tconst validation = z.email().safeParse(customEmail);\n\t\tif (!validation.success) {\n\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.INVALID_EMAIL_FORMAT,\n\t\t\t});\n\t\t}\n\t\treturn customEmail;\n\t}\n\n\tconst id = generateId();\n\tif (options?.emailDomainName) {\n\t\treturn `temp-${id}@${options.emailDomainName}`;\n\t}\n\n\treturn `temp@${id}.com`;\n}\n\nexport const anonymous = (options?: AnonymousOptions | undefined) => {\n\treturn {\n\t\tid: \"anonymous\",\n\t\tendpoints: {\n\t\t\tsignInAnonymous: createAuthEndpoint(\n\t\t\t\t\"/sign-in/anonymous\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\topenapi: {\n\t\t\t\t\t\t\tdescription: \"Sign in anonymously\",\n\t\t\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\t\t200: {\n\t\t\t\t\t\t\t\t\tdescription: \"Sign in anonymously\",\n\t\t\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/User\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tsession: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Session\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\t// If the current request already has a valid anonymous session, we should\n\t\t\t\t\t// reject any further attempts to create another anonymous user. This\n\t\t\t\t\t// prevents an anonymous user from signing in anonymously again while they\n\t\t\t\t\t// are already authenticated.\n\t\t\t\t\tconst existingSession = await getSessionFromCtx<{\n\t\t\t\t\t\tisAnonymous: boolean;\n\t\t\t\t\t}>(ctx, { disableRefresh: true });\n\t\t\t\t\tif (existingSession?.user.isAnonymous) {\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\tANONYMOUS_ERROR_CODES.ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst email = await getAnonUserEmail(options);\n\t\t\t\t\tconst name = (await options?.generateName?.(ctx)) || \"Anonymous\";\n\t\t\t\t\tconst newUser = await ctx.context.internalAdapter.createUser({\n\t\t\t\t\t\temail,\n\t\t\t\t\t\temailVerified: false,\n\t\t\t\t\t\tisAnonymous: true,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\tupdatedAt: new Date(),\n\t\t\t\t\t});\n\t\t\t\t\tif (!newUser) {\n\t\t\t\t\t\tthrow ctx.error(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.FAILED_TO_CREATE_USER,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst session = await ctx.context.internalAdapter.createSession(\n\t\t\t\t\t\tnewUser.id,\n\t\t\t\t\t);\n\t\t\t\t\tif (!session) {\n\t\t\t\t\t\treturn ctx.json(null, {\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.COULD_NOT_CREATE_SESSION,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait setSessionCookie(ctx, {\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tuser: newUser,\n\t\t\t\t\t});\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\ttoken: session.token,\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tid: newUser.id,\n\t\t\t\t\t\t\temail: newUser.email,\n\t\t\t\t\t\t\temailVerified: newUser.emailVerified,\n\t\t\t\t\t\t\tname: newUser.name,\n\t\t\t\t\t\t\tcreatedAt: newUser.createdAt,\n\t\t\t\t\t\t\tupdatedAt: newUser.updatedAt,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t),\n\t\t},\n\t\thooks: {\n\t\t\tafter: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(ctx) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tctx.path.startsWith(\"/sign-in\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/sign-up\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/oauth2/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/magic-link/verify\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/email-otp/verify-email\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/one-tap/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/passkey/verify-authentication\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/phone-number/verify\")\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (ctx) => {\n\t\t\t\t\t\tconst setCookie = ctx.context.responseHeaders?.get(\"set-cookie\");\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We can consider the user is about to sign in or sign up\n\t\t\t\t\t\t * if the response contains a session token.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst sessionTokenName = ctx.context.authCookies.sessionToken.name;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The user is about to link their account.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst sessionCookie = parseSetCookieHeader(setCookie || \"\")\n\t\t\t\t\t\t\t.get(sessionTokenName)\n\t\t\t\t\t\t\t?.value.split(\".\")[0]!;\n\n\t\t\t\t\t\tif (!sessionCookie) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Make sure the user had an anonymous session.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst session = await getSessionFromCtx<{ isAnonymous: boolean }>(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisableRefresh: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (!session || !session.user.isAnonymous) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (ctx.path === \"/sign-in/anonymous\" && !ctx.context.newSession) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\tANONYMOUS_ERROR_CODES.ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst newSession = ctx.context.newSession;\n\t\t\t\t\t\tif (!newSession) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// At this point the user is linking their previous anonymous account with a\n\t\t\t\t\t\t// new credential (email / social). Invoke the provided callback so that the\n\t\t\t\t\t\t// integrator can perform any additional logic such as transferring data\n\t\t\t\t\t\t// from the anonymous user to the new user.\n\t\t\t\t\t\tif (options?.onLinkAccount) {\n\t\t\t\t\t\t\tawait options?.onLinkAccount?.({\n\t\t\t\t\t\t\t\tanonymousUser: session,\n\t\t\t\t\t\t\t\tnewUser: newSession,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options?.disableDeleteAnonymousUser) {\n\t\t\t\t\t\t\tawait ctx.context.internalAdapter.deleteUser(session.user.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\tschema: mergeSchema(schema, options?.schema),\n\t\t$ERROR_CODES: ANONYMOUS_ERROR_CODES,\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/anonymous/index.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"@better-auth/core\";\nimport {\n\tcreateAuthEndpoint,\n\tcreateAuthMiddleware,\n} from \"@better-auth/core/api\";\nimport { generateId } from \"@better-auth/core/utils\";\nimport * as z from \"zod\";\nimport { APIError, getSessionFromCtx } from \"../../api\";\nimport { parseSetCookieHeader, setSessionCookie } from \"../../cookies\";\nimport { mergeSchema } from \"../../db/schema\";\nimport { ANONYMOUS_ERROR_CODES } from \"./error-codes\";\nimport { schema } from \"./schema\";\nimport type { AnonymousOptions } from \"./types\";\n\nasync function getAnonUserEmail(\n\toptions: AnonymousOptions | undefined,\n): Promise<string> {\n\tconst customEmail = await options?.generateRandomEmail?.();\n\tif (customEmail) {\n\t\tconst validation = z.email().safeParse(customEmail);\n\t\tif (!validation.success) {\n\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.INVALID_EMAIL_FORMAT,\n\t\t\t});\n\t\t}\n\t\treturn customEmail;\n\t}\n\n\tconst id = generateId();\n\tif (options?.emailDomainName) {\n\t\treturn `temp-${id}@${options.emailDomainName}`;\n\t}\n\n\treturn `temp@${id}.com`;\n}\n\nexport const anonymous = (options?: AnonymousOptions | undefined) => {\n\treturn {\n\t\tid: \"anonymous\",\n\t\tendpoints: {\n\t\t\tsignInAnonymous: createAuthEndpoint(\n\t\t\t\t\"/sign-in/anonymous\",\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\topenapi: {\n\t\t\t\t\t\t\tdescription: \"Sign in anonymously\",\n\t\t\t\t\t\t\tresponses: {\n\t\t\t\t\t\t\t\t200: {\n\t\t\t\t\t\t\t\t\tdescription: \"Sign in anonymously\",\n\t\t\t\t\t\t\t\t\tcontent: {\n\t\t\t\t\t\t\t\t\t\t\"application/json\": {\n\t\t\t\t\t\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/User\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tsession: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$ref: \"#/components/schemas/Session\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\t// If the current request already has a valid anonymous session, we should\n\t\t\t\t\t// reject any further attempts to create another anonymous user. This\n\t\t\t\t\t// prevents an anonymous user from signing in anonymously again while they\n\t\t\t\t\t// are already authenticated.\n\t\t\t\t\tconst existingSession = await getSessionFromCtx<{\n\t\t\t\t\t\tisAnonymous: boolean;\n\t\t\t\t\t}>(ctx, { disableRefresh: true });\n\t\t\t\t\tif (existingSession?.user.isAnonymous) {\n\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\tANONYMOUS_ERROR_CODES.ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tconst email = await getAnonUserEmail(options);\n\t\t\t\t\tconst name = (await options?.generateName?.(ctx)) || \"Anonymous\";\n\t\t\t\t\tconst newUser = await ctx.context.internalAdapter.createUser({\n\t\t\t\t\t\temail,\n\t\t\t\t\t\temailVerified: false,\n\t\t\t\t\t\tisAnonymous: true,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\tupdatedAt: new Date(),\n\t\t\t\t\t});\n\t\t\t\t\tif (!newUser) {\n\t\t\t\t\t\tthrow ctx.error(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.FAILED_TO_CREATE_USER,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst session = await ctx.context.internalAdapter.createSession(\n\t\t\t\t\t\tnewUser.id,\n\t\t\t\t\t);\n\t\t\t\t\tif (!session) {\n\t\t\t\t\t\treturn ctx.json(null, {\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tmessage: ANONYMOUS_ERROR_CODES.COULD_NOT_CREATE_SESSION,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait setSessionCookie(ctx, {\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tuser: newUser,\n\t\t\t\t\t});\n\t\t\t\t\treturn ctx.json({\n\t\t\t\t\t\ttoken: session.token,\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tid: newUser.id,\n\t\t\t\t\t\t\temail: newUser.email,\n\t\t\t\t\t\t\temailVerified: newUser.emailVerified,\n\t\t\t\t\t\t\tname: newUser.name,\n\t\t\t\t\t\t\tcreatedAt: newUser.createdAt,\n\t\t\t\t\t\t\tupdatedAt: newUser.updatedAt,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t),\n\t\t},\n\t\thooks: {\n\t\t\tafter: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(ctx) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\tctx.path.startsWith(\"/sign-in\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/sign-up\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/oauth2/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/magic-link/verify\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/email-otp/verify-email\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/one-tap/callback\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/passkey/verify-authentication\") ||\n\t\t\t\t\t\t\tctx.path.startsWith(\"/phone-number/verify\")\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (ctx) => {\n\t\t\t\t\t\tconst setCookie = ctx.context.responseHeaders?.get(\"set-cookie\");\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We can consider the user is about to sign in or sign up\n\t\t\t\t\t\t * if the response contains a session token.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst sessionTokenName = ctx.context.authCookies.sessionToken.name;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The user is about to link their account.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst sessionCookie = parseSetCookieHeader(setCookie || \"\")\n\t\t\t\t\t\t\t.get(sessionTokenName)\n\t\t\t\t\t\t\t?.value.split(\".\")[0]!;\n\n\t\t\t\t\t\tif (!sessionCookie) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Make sure the user had an anonymous session.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst session = await getSessionFromCtx<{ isAnonymous: boolean }>(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdisableRefresh: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (!session || !session.user.isAnonymous) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (ctx.path === \"/sign-in/anonymous\" && !ctx.context.newSession) {\n\t\t\t\t\t\t\tthrow new APIError(\"BAD_REQUEST\", {\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\tANONYMOUS_ERROR_CODES.ANONYMOUS_USERS_CANNOT_SIGN_IN_AGAIN_ANONYMOUSLY,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst newSession = ctx.context.newSession;\n\t\t\t\t\t\tif (!newSession) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// At this point the user is linking their previous anonymous account with a\n\t\t\t\t\t\t// new credential (email / social). Invoke the provided callback so that the\n\t\t\t\t\t\t// integrator can perform any additional logic such as transferring data\n\t\t\t\t\t\t// from the anonymous user to the new user.\n\t\t\t\t\t\tif (options?.onLinkAccount) {\n\t\t\t\t\t\t\tawait options?.onLinkAccount?.({\n\t\t\t\t\t\t\t\tanonymousUser: session,\n\t\t\t\t\t\t\t\tnewUser: newSession,\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!options?.disableDeleteAnonymousUser) {\n\t\t\t\t\t\t\tawait ctx.context.internalAdapter.deleteUser(session.user.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\toptions,\n\t\tschema: mergeSchema(schema, options?.schema),\n\t\t$ERROR_CODES: ANONYMOUS_ERROR_CODES,\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ApiKey, ApiKeyOptions } from "./types.mjs";
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
2
|
+
import * as _better_auth_core22 from "@better-auth/core";
|
|
3
|
+
import * as _better_auth_core_db7 from "@better-auth/core/db";
|
|
4
4
|
import * as zod518 from "zod";
|
|
5
|
-
import * as
|
|
5
|
+
import * as better_call255 from "better-call";
|
|
6
6
|
import * as zod_v4_core75 from "zod/v4/core";
|
|
7
7
|
|
|
8
8
|
//#region src/plugins/api-key/index.d.ts
|
|
@@ -66,8 +66,8 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
66
66
|
};
|
|
67
67
|
hooks: {
|
|
68
68
|
before: {
|
|
69
|
-
matcher: (ctx:
|
|
70
|
-
handler: (inputContext:
|
|
69
|
+
matcher: (ctx: _better_auth_core22.HookEndpointContext) => boolean;
|
|
70
|
+
handler: (inputContext: better_call255.MiddlewareInputContext<better_call255.MiddlewareOptions>) => Promise<{
|
|
71
71
|
user: {
|
|
72
72
|
id: string;
|
|
73
73
|
createdAt: Date;
|
|
@@ -88,7 +88,7 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
88
88
|
expiresAt: Date;
|
|
89
89
|
};
|
|
90
90
|
} | {
|
|
91
|
-
context:
|
|
91
|
+
context: better_call255.MiddlewareContext<better_call255.MiddlewareOptions, _better_auth_core22.AuthContext & {
|
|
92
92
|
returned?: unknown | undefined;
|
|
93
93
|
responseHeaders?: Headers | undefined;
|
|
94
94
|
}>;
|
|
@@ -111,7 +111,7 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
111
111
|
*
|
|
112
112
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-create)
|
|
113
113
|
*/
|
|
114
|
-
createApiKey:
|
|
114
|
+
createApiKey: better_call255.StrictEndpoint<"/api-key/create", {
|
|
115
115
|
method: "POST";
|
|
116
116
|
body: zod518.ZodObject<{
|
|
117
117
|
name: zod518.ZodOptional<zod518.ZodString>;
|
|
@@ -291,7 +291,7 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
291
291
|
*
|
|
292
292
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-verify)
|
|
293
293
|
*/
|
|
294
|
-
verifyApiKey:
|
|
294
|
+
verifyApiKey: better_call255.StrictEndpoint<string, {
|
|
295
295
|
method: "POST";
|
|
296
296
|
body: zod518.ZodObject<{
|
|
297
297
|
key: zod518.ZodString;
|
|
@@ -324,12 +324,12 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
324
324
|
*
|
|
325
325
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-get)
|
|
326
326
|
*/
|
|
327
|
-
getApiKey:
|
|
327
|
+
getApiKey: better_call255.StrictEndpoint<"/api-key/get", {
|
|
328
328
|
method: "GET";
|
|
329
329
|
query: zod518.ZodObject<{
|
|
330
330
|
id: zod518.ZodString;
|
|
331
331
|
}, zod_v4_core75.$strip>;
|
|
332
|
-
use: ((inputContext:
|
|
332
|
+
use: ((inputContext: better_call255.MiddlewareInputContext<better_call255.MiddlewareOptions>) => Promise<{
|
|
333
333
|
session: {
|
|
334
334
|
session: Record<string, any> & {
|
|
335
335
|
id: string;
|
|
@@ -511,7 +511,7 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
511
511
|
*
|
|
512
512
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-update)
|
|
513
513
|
*/
|
|
514
|
-
updateApiKey:
|
|
514
|
+
updateApiKey: better_call255.StrictEndpoint<"/api-key/update", {
|
|
515
515
|
method: "POST";
|
|
516
516
|
body: zod518.ZodObject<{
|
|
517
517
|
keyId: zod518.ZodString;
|
|
@@ -687,12 +687,12 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
687
687
|
*
|
|
688
688
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-delete)
|
|
689
689
|
*/
|
|
690
|
-
deleteApiKey:
|
|
690
|
+
deleteApiKey: better_call255.StrictEndpoint<"/api-key/delete", {
|
|
691
691
|
method: "POST";
|
|
692
692
|
body: zod518.ZodObject<{
|
|
693
693
|
keyId: zod518.ZodString;
|
|
694
694
|
}, zod_v4_core75.$strip>;
|
|
695
|
-
use: ((inputContext:
|
|
695
|
+
use: ((inputContext: better_call255.MiddlewareInputContext<better_call255.MiddlewareOptions>) => Promise<{
|
|
696
696
|
session: {
|
|
697
697
|
session: Record<string, any> & {
|
|
698
698
|
id: string;
|
|
@@ -773,9 +773,9 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
773
773
|
*
|
|
774
774
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-list)
|
|
775
775
|
*/
|
|
776
|
-
listApiKeys:
|
|
776
|
+
listApiKeys: better_call255.StrictEndpoint<"/api-key/list", {
|
|
777
777
|
method: "GET";
|
|
778
|
-
use: ((inputContext:
|
|
778
|
+
use: ((inputContext: better_call255.MiddlewareInputContext<better_call255.MiddlewareOptions>) => Promise<{
|
|
779
779
|
session: {
|
|
780
780
|
session: Record<string, any> & {
|
|
781
781
|
id: string;
|
|
@@ -957,7 +957,7 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
957
957
|
*
|
|
958
958
|
* @see [Read our docs to learn more.](https://better-auth.com/docs/plugins/api-key#api-method-api-key-delete-all-expired-api-keys)
|
|
959
959
|
*/
|
|
960
|
-
deleteAllExpiredApiKeys:
|
|
960
|
+
deleteAllExpiredApiKeys: better_call255.StrictEndpoint<string, {
|
|
961
961
|
method: "POST";
|
|
962
962
|
}, {
|
|
963
963
|
success: boolean;
|
|
@@ -1079,8 +1079,8 @@ declare const apiKey: (options?: ApiKeyOptions | undefined) => {
|
|
|
1079
1079
|
required: false;
|
|
1080
1080
|
input: true;
|
|
1081
1081
|
transform: {
|
|
1082
|
-
input(value:
|
|
1083
|
-
output(value:
|
|
1082
|
+
input(value: _better_auth_core_db7.DBPrimitive): string;
|
|
1083
|
+
output(value: _better_auth_core_db7.DBPrimitive): any;
|
|
1084
1084
|
};
|
|
1085
1085
|
};
|
|
1086
1086
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as
|
|
1
|
+
import * as _better_auth_core4 from "@better-auth/core";
|
|
2
|
+
import * as better_call140 from "better-call";
|
|
3
3
|
|
|
4
4
|
//#region src/plugins/bearer/index.d.ts
|
|
5
5
|
interface BearerOptions {
|
|
@@ -19,19 +19,20 @@ declare const bearer: (options?: BearerOptions | undefined) => {
|
|
|
19
19
|
id: "bearer";
|
|
20
20
|
hooks: {
|
|
21
21
|
before: {
|
|
22
|
-
matcher(context:
|
|
23
|
-
handler: (inputContext:
|
|
22
|
+
matcher(context: _better_auth_core4.HookEndpointContext): boolean;
|
|
23
|
+
handler: (inputContext: better_call140.MiddlewareInputContext<better_call140.MiddlewareOptions>) => Promise<{
|
|
24
24
|
context: {
|
|
25
25
|
headers: Headers;
|
|
26
26
|
};
|
|
27
27
|
} | undefined>;
|
|
28
28
|
}[];
|
|
29
29
|
after: {
|
|
30
|
-
matcher(context:
|
|
31
|
-
handler: (inputContext:
|
|
30
|
+
matcher(context: _better_auth_core4.HookEndpointContext): true;
|
|
31
|
+
handler: (inputContext: better_call140.MiddlewareInputContext<better_call140.MiddlewareOptions>) => Promise<void>;
|
|
32
32
|
}[];
|
|
33
33
|
};
|
|
34
|
+
options: BearerOptions | undefined;
|
|
34
35
|
};
|
|
35
36
|
//#endregion
|
|
36
|
-
export { bearer };
|
|
37
|
+
export { BearerOptions, bearer };
|
|
37
38
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/bearer/index.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"@better-auth/core\";\nimport { createAuthMiddleware } from \"@better-auth/core/api\";\nimport { createHMAC } from \"@better-auth/utils/hmac\";\nimport { serializeSignedCookie } from \"better-call\";\nimport { parseSetCookieHeader } from \"../../cookies\";\n\
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/bearer/index.ts"],"sourcesContent":["import type { BetterAuthPlugin } from \"@better-auth/core\";\nimport { createAuthMiddleware } from \"@better-auth/core/api\";\nimport { createHMAC } from \"@better-auth/utils/hmac\";\nimport { serializeSignedCookie } from \"better-call\";\nimport { parseSetCookieHeader } from \"../../cookies\";\n\nexport interface BearerOptions {\n\t/**\n\t * If true, only signed tokens\n\t * will be converted to session\n\t * cookies\n\t *\n\t * @default false\n\t */\n\trequireSignature?: boolean | undefined;\n}\n\n/**\n * Converts bearer token to session cookie\n */\nexport const bearer = (options?: BearerOptions | undefined) => {\n\treturn {\n\t\tid: \"bearer\",\n\t\thooks: {\n\t\t\tbefore: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(context) {\n\t\t\t\t\t\treturn Boolean(\n\t\t\t\t\t\t\tcontext.request?.headers.get(\"authorization\") ||\n\t\t\t\t\t\t\t\tcontext.headers?.get(\"authorization\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (c) => {\n\t\t\t\t\t\tconst token =\n\t\t\t\t\t\t\tc.request?.headers.get(\"authorization\")?.replace(\"Bearer \", \"\") ||\n\t\t\t\t\t\t\tc.headers?.get(\"Authorization\")?.replace(\"Bearer \", \"\");\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet signedToken = \"\";\n\t\t\t\t\t\tif (token.includes(\".\")) {\n\t\t\t\t\t\t\tsignedToken = token.replace(\"=\", \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (options?.requireSignature) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsignedToken = (\n\t\t\t\t\t\t\t\tawait serializeSignedCookie(\"\", token, c.context.secret)\n\t\t\t\t\t\t\t).replace(\"=\", \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst decodedToken = decodeURIComponent(signedToken);\n\t\t\t\t\t\t\tconst isValid = await createHMAC(\n\t\t\t\t\t\t\t\t\"SHA-256\",\n\t\t\t\t\t\t\t\t\"base64urlnopad\",\n\t\t\t\t\t\t\t).verify(\n\t\t\t\t\t\t\t\tc.context.secret,\n\t\t\t\t\t\t\t\tdecodedToken.split(\".\")[0]!,\n\t\t\t\t\t\t\t\tdecodedToken.split(\".\")[1]!,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst existingHeaders = (c.request?.headers ||\n\t\t\t\t\t\t\tc.headers) as Headers;\n\t\t\t\t\t\tconst headers = new Headers({\n\t\t\t\t\t\t\t...Object.fromEntries(existingHeaders?.entries()),\n\t\t\t\t\t\t});\n\t\t\t\t\t\theaders.append(\n\t\t\t\t\t\t\t\"cookie\",\n\t\t\t\t\t\t\t`${c.context.authCookies.sessionToken.name}=${signedToken}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t\tafter: [\n\t\t\t\t{\n\t\t\t\t\tmatcher(context) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t\thandler: createAuthMiddleware(async (ctx) => {\n\t\t\t\t\t\tconst setCookie = ctx.context.responseHeaders?.get(\"set-cookie\");\n\t\t\t\t\t\tif (!setCookie) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst parsedCookies = parseSetCookieHeader(setCookie);\n\t\t\t\t\t\tconst cookieName = ctx.context.authCookies.sessionToken.name;\n\t\t\t\t\t\tconst sessionCookie = parsedCookies.get(cookieName);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!sessionCookie ||\n\t\t\t\t\t\t\t!sessionCookie.value ||\n\t\t\t\t\t\t\tsessionCookie[\"max-age\"] === 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst token = sessionCookie.value;\n\t\t\t\t\t\tconst exposedHeaders =\n\t\t\t\t\t\t\tctx.context.responseHeaders?.get(\n\t\t\t\t\t\t\t\t\"access-control-expose-headers\",\n\t\t\t\t\t\t\t) || \"\";\n\t\t\t\t\t\tconst headersSet = new Set(\n\t\t\t\t\t\t\texposedHeaders\n\t\t\t\t\t\t\t\t.split(\",\")\n\t\t\t\t\t\t\t\t.map((header) => header.trim())\n\t\t\t\t\t\t\t\t.filter(Boolean),\n\t\t\t\t\t\t);\n\t\t\t\t\t\theadersSet.add(\"set-auth-token\");\n\t\t\t\t\t\tctx.setHeader(\"set-auth-token\", token);\n\t\t\t\t\t\tctx.setHeader(\n\t\t\t\t\t\t\t\"Access-Control-Expose-Headers\",\n\t\t\t\t\t\t\tArray.from(headersSet).join(\", \"),\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\toptions,\n\t} satisfies BetterAuthPlugin;\n};\n"],"mappings":";;;;;;;;;;AAoBA,MAAa,UAAU,YAAwC;AAC9D,QAAO;EACN,IAAI;EACJ,OAAO;GACN,QAAQ,CACP;IACC,QAAQ,SAAS;AAChB,YAAO,QACN,QAAQ,SAAS,QAAQ,IAAI,gBAAgB,IAC5C,QAAQ,SAAS,IAAI,gBAAgB,CACtC;;IAEF,SAAS,qBAAqB,OAAO,MAAM;KAC1C,MAAM,QACL,EAAE,SAAS,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,WAAW,GAAG,IAC/D,EAAE,SAAS,IAAI,gBAAgB,EAAE,QAAQ,WAAW,GAAG;AACxD,SAAI,CAAC,MACJ;KAGD,IAAI,cAAc;AAClB,SAAI,MAAM,SAAS,IAAI,CACtB,eAAc,MAAM,QAAQ,KAAK,GAAG;UAC9B;AACN,UAAI,SAAS,iBACZ;AAED,qBACC,MAAM,sBAAsB,IAAI,OAAO,EAAE,QAAQ,OAAO,EACvD,QAAQ,KAAK,GAAG;;AAEnB,SAAI;MACH,MAAM,eAAe,mBAAmB,YAAY;AASpD,UAAI,CARY,MAAM,WACrB,WACA,iBACA,CAAC,OACD,EAAE,QAAQ,QACV,aAAa,MAAM,IAAI,CAAC,IACxB,aAAa,MAAM,IAAI,CAAC,GACxB,CAEA;aAEM;AACP;;KAED,MAAM,kBAAmB,EAAE,SAAS,WACnC,EAAE;KACH,MAAM,UAAU,IAAI,QAAQ,EAC3B,GAAG,OAAO,YAAY,iBAAiB,SAAS,CAAC,EACjD,CAAC;AACF,aAAQ,OACP,UACA,GAAG,EAAE,QAAQ,YAAY,aAAa,KAAK,GAAG,cAC9C;AACD,YAAO,EACN,SAAS,EACR,SACA,EACD;MACA;IACF,CACD;GACD,OAAO,CACN;IACC,QAAQ,SAAS;AAChB,YAAO;;IAER,SAAS,qBAAqB,OAAO,QAAQ;KAC5C,MAAM,YAAY,IAAI,QAAQ,iBAAiB,IAAI,aAAa;AAChE,SAAI,CAAC,UACJ;KAED,MAAM,gBAAgB,qBAAqB,UAAU;KACrD,MAAM,aAAa,IAAI,QAAQ,YAAY,aAAa;KACxD,MAAM,gBAAgB,cAAc,IAAI,WAAW;AACnD,SACC,CAAC,iBACD,CAAC,cAAc,SACf,cAAc,eAAe,EAE7B;KAED,MAAM,QAAQ,cAAc;KAC5B,MAAM,iBACL,IAAI,QAAQ,iBAAiB,IAC5B,gCACA,IAAI;KACN,MAAM,aAAa,IAAI,IACtB,eACE,MAAM,IAAI,CACV,KAAK,WAAW,OAAO,MAAM,CAAC,CAC9B,OAAO,QAAQ,CACjB;AACD,gBAAW,IAAI,iBAAiB;AAChC,SAAI,UAAU,kBAAkB,MAAM;AACtC,SAAI,UACH,iCACA,MAAM,KAAK,WAAW,CAAC,KAAK,KAAK,CACjC;MACA;IACF,CACD;GACD;EACD;EACA"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { CaptchaOptions } from "./types.mjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _better_auth_core6 from "@better-auth/core";
|
|
3
3
|
|
|
4
4
|
//#region src/plugins/captcha/index.d.ts
|
|
5
5
|
declare const captcha: (options: CaptchaOptions) => {
|
|
6
6
|
id: "captcha";
|
|
7
|
-
onRequest: (request: Request, ctx:
|
|
7
|
+
onRequest: (request: Request, ctx: _better_auth_core6.AuthContext) => Promise<{
|
|
8
8
|
response: Response;
|
|
9
9
|
} | undefined>;
|
|
10
|
+
options: CaptchaOptions;
|
|
10
11
|
};
|
|
11
12
|
//#endregion
|
|
12
13
|
export { captcha };
|