@convex-dev/better-auth 0.8.0-alpha.9 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/auth.d.ts +4 -0
- package/dist/commonjs/auth.d.ts.map +1 -0
- package/dist/commonjs/auth.js +44 -0
- package/dist/commonjs/auth.js.map +1 -0
- package/dist/commonjs/client/adapter.d.ts +8 -10
- package/dist/commonjs/client/adapter.d.ts.map +1 -1
- package/dist/commonjs/client/adapter.js +48 -32
- package/dist/commonjs/client/adapter.js.map +1 -1
- package/dist/commonjs/client/adapterUtils.d.ts +66 -0
- package/dist/commonjs/client/adapterUtils.d.ts.map +1 -0
- package/dist/commonjs/client/adapterUtils.js +429 -0
- package/dist/commonjs/client/adapterUtils.js.map +1 -0
- package/dist/commonjs/client/createSchema.d.ts +24 -0
- package/dist/commonjs/client/createSchema.d.ts.map +1 -0
- package/dist/commonjs/client/createSchema.js +101 -0
- package/dist/commonjs/client/createSchema.js.map +1 -0
- package/dist/commonjs/client/index.d.ts +449 -601
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +337 -212
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/adapter.d.ts +128 -0
- package/dist/commonjs/component/adapter.d.ts.map +1 -0
- package/dist/commonjs/component/adapter.js +5 -0
- package/dist/commonjs/component/adapter.js.map +1 -0
- package/dist/commonjs/component/adapterTest.d.ts +3 -5
- package/dist/commonjs/component/adapterTest.d.ts.map +1 -1
- package/dist/commonjs/component/adapterTest.js +3 -17
- package/dist/commonjs/component/adapterTest.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +451 -207
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +50 -177
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/util.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.d.ts +1 -2
- package/dist/commonjs/nextjs/index.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.js +3 -2
- package/dist/commonjs/nextjs/index.js.map +1 -1
- package/dist/commonjs/plugins/convex/client.d.ts +2 -5
- package/dist/commonjs/plugins/convex/client.d.ts.map +1 -1
- package/dist/commonjs/plugins/convex/client.js.map +1 -1
- package/dist/commonjs/plugins/convex/index.d.ts +7 -134
- package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
- package/dist/commonjs/plugins/convex/index.js +10 -125
- package/dist/commonjs/plugins/convex/index.js.map +1 -1
- package/dist/commonjs/plugins/cross-domain/index.js +2 -2
- package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
- package/dist/commonjs/react-start/index.d.ts +17 -36
- package/dist/commonjs/react-start/index.d.ts.map +1 -1
- package/dist/commonjs/react-start/index.js +42 -31
- package/dist/commonjs/react-start/index.js.map +1 -1
- package/dist/commonjs/src/auth.d.ts +3085 -0
- package/dist/commonjs/src/auth.d.ts.map +1 -0
- package/dist/commonjs/src/auth.js +72 -0
- package/dist/commonjs/src/auth.js.map +1 -0
- package/dist/commonjs/src/client/adapter.d.ts +18 -0
- package/dist/commonjs/src/client/adapter.d.ts.map +1 -0
- package/dist/commonjs/src/client/adapter.js +211 -0
- package/dist/commonjs/src/client/adapter.js.map +1 -0
- package/dist/commonjs/src/client/createSchema.d.ts +25 -0
- package/dist/commonjs/src/client/createSchema.d.ts.map +1 -0
- package/dist/commonjs/src/client/createSchema.js +103 -0
- package/dist/commonjs/src/client/createSchema.js.map +1 -0
- package/dist/commonjs/src/client/index.d.ts +3310 -0
- package/dist/commonjs/src/client/index.d.ts.map +1 -0
- package/dist/commonjs/src/client/index.js +377 -0
- package/dist/commonjs/src/client/index.js.map +1 -0
- package/dist/commonjs/src/client/plugins/index.d.ts +3 -0
- package/dist/commonjs/src/client/plugins/index.d.ts.map +1 -0
- package/dist/commonjs/src/client/plugins/index.js +3 -0
- package/dist/commonjs/src/client/plugins/index.js.map +1 -0
- package/dist/commonjs/src/component/_generated/api.d.ts +12 -0
- package/dist/commonjs/src/component/_generated/api.d.ts.map +1 -0
- package/dist/commonjs/src/component/_generated/api.js +22 -0
- package/dist/commonjs/src/component/_generated/api.js.map +1 -0
- package/dist/commonjs/src/component/_generated/server.d.ts +64 -0
- package/dist/commonjs/src/component/_generated/server.d.ts.map +1 -0
- package/dist/commonjs/src/component/_generated/server.js +74 -0
- package/dist/commonjs/src/component/_generated/server.js.map +1 -0
- package/dist/commonjs/src/component/adapter.d.ts +355 -0
- package/dist/commonjs/src/component/adapter.d.ts.map +1 -0
- package/dist/commonjs/src/component/adapter.js +573 -0
- package/dist/commonjs/src/component/adapter.js.map +1 -0
- package/dist/commonjs/src/component/adapterTest.d.ts +18 -0
- package/dist/commonjs/src/component/adapterTest.d.ts.map +1 -0
- package/dist/commonjs/src/component/adapterTest.js +75 -0
- package/dist/commonjs/src/component/adapterTest.js.map +1 -0
- package/dist/commonjs/src/component/convex.config.d.ts +3 -0
- package/dist/commonjs/src/component/convex.config.d.ts.map +1 -0
- package/dist/commonjs/src/component/convex.config.js +4 -0
- package/dist/commonjs/src/component/convex.config.js.map +1 -0
- package/dist/commonjs/src/component/schema.d.ts +562 -0
- package/dist/commonjs/src/component/schema.d.ts.map +1 -0
- package/dist/commonjs/src/component/schema.js +217 -0
- package/dist/commonjs/src/component/schema.js.map +1 -0
- package/dist/commonjs/src/nextjs/index.d.ts +10 -0
- package/dist/commonjs/src/nextjs/index.d.ts.map +1 -0
- package/dist/commonjs/src/nextjs/index.js +43 -0
- package/dist/commonjs/src/nextjs/index.js.map +1 -0
- package/dist/commonjs/src/plugins/convex/client.d.ts +9 -0
- package/dist/commonjs/src/plugins/convex/client.d.ts.map +1 -0
- package/dist/commonjs/src/plugins/convex/client.js +7 -0
- package/dist/commonjs/src/plugins/convex/client.js.map +1 -0
- package/dist/commonjs/src/plugins/convex/index.d.ts +415 -0
- package/dist/commonjs/src/plugins/convex/index.d.ts.map +1 -0
- package/dist/commonjs/src/plugins/convex/index.js +354 -0
- package/dist/commonjs/src/plugins/convex/index.js.map +1 -0
- package/dist/commonjs/src/plugins/cross-domain/client.d.ts +132 -0
- package/dist/commonjs/src/plugins/cross-domain/client.d.ts.map +1 -0
- package/dist/commonjs/src/plugins/cross-domain/client.js +176 -0
- package/dist/commonjs/src/plugins/cross-domain/client.js.map +1 -0
- package/dist/commonjs/src/plugins/cross-domain/index.d.ts +83 -0
- package/dist/commonjs/src/plugins/cross-domain/index.d.ts.map +1 -0
- package/dist/commonjs/src/plugins/cross-domain/index.js +153 -0
- package/dist/commonjs/src/plugins/cross-domain/index.js.map +1 -0
- package/dist/commonjs/src/plugins/index.d.ts +3 -0
- package/dist/commonjs/src/plugins/index.d.ts.map +1 -0
- package/dist/commonjs/src/plugins/index.js +3 -0
- package/dist/commonjs/src/plugins/index.js.map +1 -0
- package/dist/commonjs/src/react/client.d.ts +31 -0
- package/dist/commonjs/src/react/client.d.ts.map +1 -0
- package/dist/commonjs/src/react/client.js +96 -0
- package/dist/commonjs/src/react/client.js.map +1 -0
- package/dist/commonjs/src/react/index.d.ts +9 -0
- package/dist/commonjs/src/react/index.d.ts.map +1 -0
- package/dist/commonjs/src/react/index.js +15 -0
- package/dist/commonjs/src/react/index.js.map +1 -0
- package/dist/commonjs/src/react-start/index.d.ts +45 -0
- package/dist/commonjs/src/react-start/index.d.ts.map +1 -0
- package/dist/commonjs/src/react-start/index.js +60 -0
- package/dist/commonjs/src/react-start/index.js.map +1 -0
- package/dist/commonjs/src/utils/index.d.ts +9 -0
- package/dist/commonjs/src/utils/index.d.ts.map +1 -0
- package/dist/commonjs/src/utils/index.js +35 -0
- package/dist/commonjs/src/utils/index.js.map +1 -0
- package/dist/esm/auth.d.ts +4 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +44 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/client/adapter.d.ts +8 -10
- package/dist/esm/client/adapter.d.ts.map +1 -1
- package/dist/esm/client/adapter.js +48 -32
- package/dist/esm/client/adapter.js.map +1 -1
- package/dist/esm/client/adapterUtils.d.ts +66 -0
- package/dist/esm/client/adapterUtils.d.ts.map +1 -0
- package/dist/esm/client/adapterUtils.js +429 -0
- package/dist/esm/client/adapterUtils.js.map +1 -0
- package/dist/esm/client/createSchema.d.ts +24 -0
- package/dist/esm/client/createSchema.d.ts.map +1 -0
- package/dist/esm/client/createSchema.js +101 -0
- package/dist/esm/client/createSchema.js.map +1 -0
- package/dist/esm/client/index.d.ts +449 -601
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +337 -212
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/adapter.d.ts +128 -0
- package/dist/esm/component/adapter.d.ts.map +1 -0
- package/dist/esm/component/adapter.js +5 -0
- package/dist/esm/component/adapter.js.map +1 -0
- package/dist/esm/component/adapterTest.d.ts +3 -5
- package/dist/esm/component/adapterTest.d.ts.map +1 -1
- package/dist/esm/component/adapterTest.js +3 -17
- package/dist/esm/component/adapterTest.js.map +1 -1
- package/dist/esm/component/schema.d.ts +451 -207
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +50 -177
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/util.d.ts.map +1 -1
- package/dist/esm/nextjs/index.d.ts +1 -2
- package/dist/esm/nextjs/index.d.ts.map +1 -1
- package/dist/esm/nextjs/index.js +3 -2
- package/dist/esm/nextjs/index.js.map +1 -1
- package/dist/esm/plugins/convex/client.d.ts +2 -5
- package/dist/esm/plugins/convex/client.d.ts.map +1 -1
- package/dist/esm/plugins/convex/client.js.map +1 -1
- package/dist/esm/plugins/convex/index.d.ts +7 -134
- package/dist/esm/plugins/convex/index.d.ts.map +1 -1
- package/dist/esm/plugins/convex/index.js +10 -125
- package/dist/esm/plugins/convex/index.js.map +1 -1
- package/dist/esm/plugins/cross-domain/index.js +2 -2
- package/dist/esm/plugins/cross-domain/index.js.map +1 -1
- package/dist/esm/react-start/index.d.ts +17 -36
- package/dist/esm/react-start/index.d.ts.map +1 -1
- package/dist/esm/react-start/index.js +42 -31
- package/dist/esm/react-start/index.js.map +1 -1
- package/dist/esm/src/auth.d.ts +3085 -0
- package/dist/esm/src/auth.d.ts.map +1 -0
- package/dist/esm/src/auth.js +72 -0
- package/dist/esm/src/auth.js.map +1 -0
- package/dist/esm/src/client/adapter.d.ts +18 -0
- package/dist/esm/src/client/adapter.d.ts.map +1 -0
- package/dist/esm/src/client/adapter.js +211 -0
- package/dist/esm/src/client/adapter.js.map +1 -0
- package/dist/esm/src/client/createSchema.d.ts +25 -0
- package/dist/esm/src/client/createSchema.d.ts.map +1 -0
- package/dist/esm/src/client/createSchema.js +103 -0
- package/dist/esm/src/client/createSchema.js.map +1 -0
- package/dist/esm/src/client/index.d.ts +3310 -0
- package/dist/esm/src/client/index.d.ts.map +1 -0
- package/dist/esm/src/client/index.js +377 -0
- package/dist/esm/src/client/index.js.map +1 -0
- package/dist/esm/src/client/plugins/index.d.ts +3 -0
- package/dist/esm/src/client/plugins/index.d.ts.map +1 -0
- package/dist/esm/src/client/plugins/index.js +3 -0
- package/dist/esm/src/client/plugins/index.js.map +1 -0
- package/dist/esm/src/component/_generated/api.d.ts +12 -0
- package/dist/esm/src/component/_generated/api.d.ts.map +1 -0
- package/dist/esm/src/component/_generated/api.js +22 -0
- package/dist/esm/src/component/_generated/api.js.map +1 -0
- package/dist/esm/src/component/_generated/server.d.ts +64 -0
- package/dist/esm/src/component/_generated/server.d.ts.map +1 -0
- package/dist/esm/src/component/_generated/server.js +74 -0
- package/dist/esm/src/component/_generated/server.js.map +1 -0
- package/dist/esm/src/component/adapter.d.ts +355 -0
- package/dist/esm/src/component/adapter.d.ts.map +1 -0
- package/dist/esm/src/component/adapter.js +573 -0
- package/dist/esm/src/component/adapter.js.map +1 -0
- package/dist/esm/src/component/adapterTest.d.ts +18 -0
- package/dist/esm/src/component/adapterTest.d.ts.map +1 -0
- package/dist/esm/src/component/adapterTest.js +75 -0
- package/dist/esm/src/component/adapterTest.js.map +1 -0
- package/dist/esm/src/component/convex.config.d.ts +3 -0
- package/dist/esm/src/component/convex.config.d.ts.map +1 -0
- package/dist/esm/src/component/convex.config.js +4 -0
- package/dist/esm/src/component/convex.config.js.map +1 -0
- package/dist/esm/src/component/schema.d.ts +562 -0
- package/dist/esm/src/component/schema.d.ts.map +1 -0
- package/dist/esm/src/component/schema.js +217 -0
- package/dist/esm/src/component/schema.js.map +1 -0
- package/dist/esm/src/nextjs/index.d.ts +10 -0
- package/dist/esm/src/nextjs/index.d.ts.map +1 -0
- package/dist/esm/src/nextjs/index.js +43 -0
- package/dist/esm/src/nextjs/index.js.map +1 -0
- package/dist/esm/src/plugins/convex/client.d.ts +9 -0
- package/dist/esm/src/plugins/convex/client.d.ts.map +1 -0
- package/dist/esm/src/plugins/convex/client.js +7 -0
- package/dist/esm/src/plugins/convex/client.js.map +1 -0
- package/dist/esm/src/plugins/convex/index.d.ts +415 -0
- package/dist/esm/src/plugins/convex/index.d.ts.map +1 -0
- package/dist/esm/src/plugins/convex/index.js +354 -0
- package/dist/esm/src/plugins/convex/index.js.map +1 -0
- package/dist/esm/src/plugins/cross-domain/client.d.ts +132 -0
- package/dist/esm/src/plugins/cross-domain/client.d.ts.map +1 -0
- package/dist/esm/src/plugins/cross-domain/client.js +176 -0
- package/dist/esm/src/plugins/cross-domain/client.js.map +1 -0
- package/dist/esm/src/plugins/cross-domain/index.d.ts +83 -0
- package/dist/esm/src/plugins/cross-domain/index.d.ts.map +1 -0
- package/dist/esm/src/plugins/cross-domain/index.js +153 -0
- package/dist/esm/src/plugins/cross-domain/index.js.map +1 -0
- package/dist/esm/src/plugins/index.d.ts +3 -0
- package/dist/esm/src/plugins/index.d.ts.map +1 -0
- package/dist/esm/src/plugins/index.js +3 -0
- package/dist/esm/src/plugins/index.js.map +1 -0
- package/dist/esm/src/react/client.d.ts +31 -0
- package/dist/esm/src/react/client.d.ts.map +1 -0
- package/dist/esm/src/react/client.js +96 -0
- package/dist/esm/src/react/client.js.map +1 -0
- package/dist/esm/src/react/index.d.ts +9 -0
- package/dist/esm/src/react/index.d.ts.map +1 -0
- package/dist/esm/src/react/index.js +15 -0
- package/dist/esm/src/react/index.js.map +1 -0
- package/dist/esm/src/react-start/index.d.ts +45 -0
- package/dist/esm/src/react-start/index.d.ts.map +1 -0
- package/dist/esm/src/react-start/index.js +60 -0
- package/dist/esm/src/react-start/index.js.map +1 -0
- package/dist/esm/src/utils/index.d.ts +9 -0
- package/dist/esm/src/utils/index.d.ts.map +1 -0
- package/dist/esm/src/utils/index.js +35 -0
- package/dist/esm/src/utils/index.js.map +1 -0
- package/package.json +21 -4
- package/src/auth.ts +57 -0
- package/src/client/adapter.test.ts +15 -0
- package/src/client/adapter.ts +83 -58
- package/src/{component/lib.ts → client/adapterUtils.ts} +106 -256
- package/src/client/createSchema.ts +149 -0
- package/src/client/index.ts +558 -317
- package/src/component/_generated/api.d.ts +1711 -547
- package/src/component/adapter.ts +13 -0
- package/src/component/adapterTest.ts +8 -34
- package/src/component/schema.ts +58 -192
- package/src/nextjs/index.ts +5 -5
- package/src/plugins/convex/client.ts +2 -3
- package/src/plugins/convex/index.ts +15 -147
- package/src/plugins/cross-domain/index.ts +2 -2
- package/src/react-start/index.ts +76 -44
- package/dist/commonjs/client/cors.d.ts +0 -77
- package/dist/commonjs/client/cors.d.ts.map +0 -1
- package/dist/commonjs/client/cors.js +0 -297
- package/dist/commonjs/client/cors.js.map +0 -1
- package/dist/commonjs/util.d.ts +0 -2
- package/dist/commonjs/util.d.ts.map +0 -1
- package/dist/commonjs/util.js +0 -8
- package/dist/commonjs/util.js.map +0 -1
- package/dist/esm/client/cors.d.ts +0 -77
- package/dist/esm/client/cors.d.ts.map +0 -1
- package/dist/esm/client/cors.js +0 -297
- package/dist/esm/client/cors.js.map +0 -1
- package/dist/esm/util.d.ts +0 -2
- package/dist/esm/util.d.ts.map +0 -1
- package/dist/esm/util.js +0 -8
- package/dist/esm/util.js.map +0 -1
- package/src/component/util.ts +0 -4
|
@@ -2,45 +2,21 @@ import { createAuthMiddleware, sessionMiddleware } from "better-auth/api";
|
|
|
2
2
|
import {
|
|
3
3
|
BetterAuthPlugin,
|
|
4
4
|
createAuthEndpoint,
|
|
5
|
-
customSession as customSessionPlugin,
|
|
6
5
|
jwt as jwtPlugin,
|
|
7
6
|
bearer as bearerPlugin,
|
|
8
7
|
oidcProvider as oidcProviderPlugin,
|
|
9
8
|
} from "better-auth/plugins";
|
|
10
|
-
import { BetterAuthOptions } from "better-auth/types";
|
|
11
|
-
import { omit } from "convex-helpers";
|
|
12
|
-
import { z } from "zod";
|
|
13
9
|
|
|
14
10
|
export const JWT_COOKIE_NAME = "convex_jwt";
|
|
15
11
|
|
|
16
|
-
export const convex =
|
|
12
|
+
export const convex = (
|
|
17
13
|
opts: {
|
|
18
14
|
jwtExpirationSeconds?: number;
|
|
19
15
|
deleteExpiredSessionsOnLogin?: boolean;
|
|
20
|
-
options?:
|
|
16
|
+
options?: { basePath?: string };
|
|
21
17
|
} = {}
|
|
22
18
|
) => {
|
|
23
|
-
const {
|
|
24
|
-
jwtExpirationSeconds = 60 * 15,
|
|
25
|
-
deleteExpiredSessionsOnLogin = false,
|
|
26
|
-
} = opts;
|
|
27
|
-
const customSession = customSessionPlugin(async ({ user, session }) => {
|
|
28
|
-
// Doing terrible things with types because user and session aren't actually
|
|
29
|
-
// objects and we need plugin inference to work
|
|
30
|
-
const { userId, ...userData } = omit(
|
|
31
|
-
user as typeof user & { id: string; userId: string },
|
|
32
|
-
["id"]
|
|
33
|
-
) as typeof user & {
|
|
34
|
-
userId: string;
|
|
35
|
-
};
|
|
36
|
-
return {
|
|
37
|
-
user: { ...userData, id: userId },
|
|
38
|
-
session: {
|
|
39
|
-
...(session as typeof session & {}),
|
|
40
|
-
userId,
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
}, opts.options);
|
|
19
|
+
const { jwtExpirationSeconds = 60 * 15 } = opts;
|
|
44
20
|
const oidcProvider = oidcProviderPlugin({
|
|
45
21
|
loginPage: "/not-used",
|
|
46
22
|
metadata: {
|
|
@@ -53,12 +29,8 @@ export const convex = <O extends BetterAuthOptions>(
|
|
|
53
29
|
issuer: `${process.env.CONVEX_SITE_URL}`,
|
|
54
30
|
audience: "convex",
|
|
55
31
|
expirationTime: `${jwtExpirationSeconds}s`,
|
|
56
|
-
getSubject: (session) => {
|
|
57
|
-
// Return the userId from the app user table
|
|
58
|
-
return session.user.userId;
|
|
59
|
-
},
|
|
60
32
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
61
|
-
definePayload: ({ user: { id,
|
|
33
|
+
definePayload: ({ user: { id, image, ...user }, session }) => ({
|
|
62
34
|
...user,
|
|
63
35
|
sessionId: session.id,
|
|
64
36
|
iat: Math.floor(new Date().getTime() / 1000),
|
|
@@ -77,69 +49,20 @@ export const convex = <O extends BetterAuthOptions>(
|
|
|
77
49
|
};
|
|
78
50
|
return {
|
|
79
51
|
id: "convex",
|
|
52
|
+
init: ({ logger, options }) => {
|
|
53
|
+
if (
|
|
54
|
+
options.plugins?.every((p) => p.id !== "cross-domain") &&
|
|
55
|
+
!options.baseURL
|
|
56
|
+
) {
|
|
57
|
+
logger.warn(
|
|
58
|
+
"Better Auth baseURL is undefined. This is probably a mistake."
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
80
62
|
hooks: {
|
|
81
|
-
before: [
|
|
82
|
-
{
|
|
83
|
-
matcher: (ctx) => {
|
|
84
|
-
return !!ctx.body?.userId;
|
|
85
|
-
},
|
|
86
|
-
handler: createAuthMiddleware(async (ctx) => {
|
|
87
|
-
const user: { id: string } | null =
|
|
88
|
-
await ctx.context.adapter.findOne({
|
|
89
|
-
model: "user",
|
|
90
|
-
where: [
|
|
91
|
-
{
|
|
92
|
-
field: "userId",
|
|
93
|
-
operator: "eq",
|
|
94
|
-
value: ctx.body?.userId,
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
if (!user) {
|
|
99
|
-
throw new Error("User not found");
|
|
100
|
-
}
|
|
101
|
-
ctx.body.userId = user.id;
|
|
102
|
-
return {
|
|
103
|
-
context: ctx,
|
|
104
|
-
};
|
|
105
|
-
}),
|
|
106
|
-
},
|
|
107
|
-
...bearer.hooks.before,
|
|
108
|
-
],
|
|
63
|
+
before: [...bearer.hooks.before],
|
|
109
64
|
after: [
|
|
110
65
|
...oidcProvider.hooks.after,
|
|
111
|
-
{
|
|
112
|
-
matcher: (ctx) => {
|
|
113
|
-
return (
|
|
114
|
-
deleteExpiredSessionsOnLogin &&
|
|
115
|
-
(ctx.path?.startsWith("/sign-in") ||
|
|
116
|
-
ctx.path?.startsWith("/callback"))
|
|
117
|
-
);
|
|
118
|
-
},
|
|
119
|
-
handler: createAuthMiddleware(async (ctx) => {
|
|
120
|
-
// Delete expired sessions at login
|
|
121
|
-
const userId = ctx.context.newSession?.user.id;
|
|
122
|
-
if (!userId) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
await ctx.context.adapter.deleteMany({
|
|
126
|
-
model: "session",
|
|
127
|
-
where: [
|
|
128
|
-
{
|
|
129
|
-
field: "userId",
|
|
130
|
-
operator: "eq",
|
|
131
|
-
value: userId,
|
|
132
|
-
connector: "AND",
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
operator: "lte",
|
|
136
|
-
field: "expiresAt",
|
|
137
|
-
value: new Date().getTime(),
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
});
|
|
141
|
-
}),
|
|
142
|
-
},
|
|
143
66
|
{
|
|
144
67
|
matcher: (ctx) => {
|
|
145
68
|
return (
|
|
@@ -194,61 +117,6 @@ export const convex = <O extends BetterAuthOptions>(
|
|
|
194
117
|
],
|
|
195
118
|
},
|
|
196
119
|
endpoints: {
|
|
197
|
-
getSession: createAuthEndpoint(
|
|
198
|
-
"/get-session",
|
|
199
|
-
{
|
|
200
|
-
method: "GET",
|
|
201
|
-
query: z.optional(
|
|
202
|
-
z.object({
|
|
203
|
-
// If cookie cache is enabled, it will disable the cache
|
|
204
|
-
// and fetch the session from the database
|
|
205
|
-
disableCookieCache: z
|
|
206
|
-
.boolean({
|
|
207
|
-
description:
|
|
208
|
-
"Disable cookie cache and fetch session from database",
|
|
209
|
-
})
|
|
210
|
-
.or(z.string().transform((v) => v === "true"))
|
|
211
|
-
.optional(),
|
|
212
|
-
disableRefresh: z
|
|
213
|
-
.boolean({
|
|
214
|
-
description:
|
|
215
|
-
"Disable session refresh. Useful for checking session status, without updating the session",
|
|
216
|
-
})
|
|
217
|
-
.optional(),
|
|
218
|
-
})
|
|
219
|
-
),
|
|
220
|
-
metadata: {
|
|
221
|
-
CUSTOM_SESSION: true,
|
|
222
|
-
openapi: {
|
|
223
|
-
description: "Get custom session data",
|
|
224
|
-
responses: {
|
|
225
|
-
"200": {
|
|
226
|
-
description: "Success",
|
|
227
|
-
content: {
|
|
228
|
-
"application/json": {
|
|
229
|
-
schema: {
|
|
230
|
-
type: "array",
|
|
231
|
-
nullable: true,
|
|
232
|
-
items: {
|
|
233
|
-
$ref: "#/components/schemas/Session",
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
},
|
|
240
|
-
},
|
|
241
|
-
},
|
|
242
|
-
requireHeaders: true,
|
|
243
|
-
},
|
|
244
|
-
async (ctx) => {
|
|
245
|
-
const response = await customSession.endpoints.getSession({
|
|
246
|
-
...ctx,
|
|
247
|
-
returnHeaders: false,
|
|
248
|
-
});
|
|
249
|
-
return response;
|
|
250
|
-
}
|
|
251
|
-
),
|
|
252
120
|
getOpenIdConfig: createAuthEndpoint(
|
|
253
121
|
"/convex/.well-known/openid-configuration",
|
|
254
122
|
{
|
|
@@ -129,7 +129,7 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
|
|
|
129
129
|
// Mostly copied from the one-time-token plugin
|
|
130
130
|
const session = ctx.context.newSession;
|
|
131
131
|
if (!session) {
|
|
132
|
-
|
|
132
|
+
ctx.context.logger.error("No session found");
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
135
|
const token = generateRandomString(32);
|
|
@@ -141,7 +141,7 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
|
|
|
141
141
|
});
|
|
142
142
|
const redirectTo = ctx.context.responseHeaders?.get("location");
|
|
143
143
|
if (!redirectTo) {
|
|
144
|
-
|
|
144
|
+
ctx.context.logger.error("No redirect to found");
|
|
145
145
|
return;
|
|
146
146
|
}
|
|
147
147
|
const url = new URL(redirectTo);
|
package/src/react-start/index.ts
CHANGED
|
@@ -1,38 +1,72 @@
|
|
|
1
1
|
import { betterAuth } from "better-auth";
|
|
2
2
|
import { createCookieGetter } from "better-auth/cookies";
|
|
3
3
|
import { betterFetch } from "@better-fetch/fetch";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
FunctionReference,
|
|
6
|
+
FunctionReturnType,
|
|
7
|
+
GenericActionCtx,
|
|
8
|
+
} from "convex/server";
|
|
5
9
|
import { JWT_COOKIE_NAME } from "../plugins/convex";
|
|
6
|
-
import {
|
|
10
|
+
import { ConvexHttpClient } from "convex/browser";
|
|
7
11
|
|
|
8
|
-
export const getCookieName =
|
|
9
|
-
createAuth: (ctx:
|
|
12
|
+
export const getCookieName = (
|
|
13
|
+
createAuth: (ctx: any) => ReturnType<typeof betterAuth>
|
|
10
14
|
) => {
|
|
11
|
-
const
|
|
12
|
-
const createCookie = createCookieGetter(auth.options);
|
|
15
|
+
const createCookie = createCookieGetter(createAuth({} as any).options);
|
|
13
16
|
const cookie = createCookie(JWT_COOKIE_NAME);
|
|
14
17
|
return cookie.name;
|
|
15
18
|
};
|
|
16
19
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
calledFrom: string
|
|
20
|
+
export const setupFetchClient = async (
|
|
21
|
+
createAuth: (ctx: any) => ReturnType<typeof betterAuth>
|
|
20
22
|
) => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
const { getCookie } = await import("@tanstack/react-start/server");
|
|
24
|
+
const createClient = () => {
|
|
25
|
+
const sessionCookieName = getCookieName(createAuth);
|
|
26
|
+
const token = getCookie(sessionCookieName);
|
|
27
|
+
const client = new ConvexHttpClient(process.env.VITE_CONVEX_URL!);
|
|
28
|
+
if (token) {
|
|
29
|
+
client.setAuth(token);
|
|
30
|
+
}
|
|
31
|
+
return client;
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
fetchQuery<
|
|
35
|
+
Query extends FunctionReference<"query">,
|
|
36
|
+
FuncRef extends FunctionReference<any, any>,
|
|
37
|
+
>(
|
|
38
|
+
query: Query,
|
|
39
|
+
args: FuncRef["_args"]
|
|
40
|
+
): Promise<FunctionReturnType<Query>> {
|
|
41
|
+
return createClient().query(query, args);
|
|
42
|
+
},
|
|
43
|
+
fetchMutation<
|
|
44
|
+
Mutation extends FunctionReference<"mutation">,
|
|
45
|
+
FuncRef extends FunctionReference<any, any>,
|
|
46
|
+
>(
|
|
47
|
+
mutation: Mutation,
|
|
48
|
+
args: FuncRef["_args"]
|
|
49
|
+
): Promise<FunctionReturnType<Mutation>> {
|
|
50
|
+
return createClient().mutation(mutation, args);
|
|
51
|
+
},
|
|
52
|
+
fetchAction<
|
|
53
|
+
Action extends FunctionReference<"action">,
|
|
54
|
+
FuncRef extends FunctionReference<any, any>,
|
|
55
|
+
>(
|
|
56
|
+
action: Action,
|
|
57
|
+
args: FuncRef["_args"]
|
|
58
|
+
): Promise<FunctionReturnType<Action>> {
|
|
59
|
+
return createClient().action(action, args);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
28
62
|
};
|
|
29
63
|
|
|
30
64
|
export const fetchSession = async <
|
|
31
65
|
T extends (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>,
|
|
32
66
|
>(
|
|
33
67
|
request: Request,
|
|
34
|
-
opts
|
|
35
|
-
convexSiteUrl
|
|
68
|
+
opts?: {
|
|
69
|
+
convexSiteUrl?: string;
|
|
36
70
|
verbose?: boolean;
|
|
37
71
|
}
|
|
38
72
|
) => {
|
|
@@ -41,7 +75,10 @@ export const fetchSession = async <
|
|
|
41
75
|
if (!request) {
|
|
42
76
|
throw new Error("No request found");
|
|
43
77
|
}
|
|
44
|
-
const convexSiteUrl =
|
|
78
|
+
const convexSiteUrl = opts?.convexSiteUrl ?? process.env.VITE_CONVEX_SITE_URL;
|
|
79
|
+
if (!convexSiteUrl) {
|
|
80
|
+
throw new Error("VITE_CONVEX_SITE_URL is not set");
|
|
81
|
+
}
|
|
45
82
|
const { data: session } = await betterFetch<Session>(
|
|
46
83
|
"/api/auth/get-session",
|
|
47
84
|
{
|
|
@@ -56,36 +93,31 @@ export const fetchSession = async <
|
|
|
56
93
|
};
|
|
57
94
|
};
|
|
58
95
|
|
|
96
|
+
export const getAuth = async (
|
|
97
|
+
request: Request,
|
|
98
|
+
getCookie: (name: string) => string | null,
|
|
99
|
+
createAuth: (ctx: any) => ReturnType<typeof betterAuth>,
|
|
100
|
+
opts?: { convexSiteUrl?: string }
|
|
101
|
+
) => {
|
|
102
|
+
const sessionCookieName = getCookieName(createAuth);
|
|
103
|
+
const token = getCookie(sessionCookieName);
|
|
104
|
+
const { session } = await fetchSession(request, opts);
|
|
105
|
+
return {
|
|
106
|
+
userId: session?.user.id,
|
|
107
|
+
token,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
59
111
|
export const reactStartHandler = (
|
|
60
112
|
request: Request,
|
|
61
|
-
opts
|
|
113
|
+
opts?: { convexSiteUrl?: string; verbose?: boolean }
|
|
62
114
|
) => {
|
|
63
115
|
const requestUrl = new URL(request.url);
|
|
64
|
-
const convexSiteUrl =
|
|
116
|
+
const convexSiteUrl = opts?.convexSiteUrl ?? process.env.VITE_CONVEX_SITE_URL;
|
|
117
|
+
if (!convexSiteUrl) {
|
|
118
|
+
throw new Error("VITE_CONVEX_SITE_URL is not set");
|
|
119
|
+
}
|
|
65
120
|
const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
|
|
66
121
|
request.headers.set("accept-encoding", "application/json");
|
|
67
122
|
return fetch(nextUrl, new Request(request, { redirect: "manual" }));
|
|
68
123
|
};
|
|
69
|
-
|
|
70
|
-
export const reactStartHelpers = (
|
|
71
|
-
createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>,
|
|
72
|
-
opts: { convexSiteUrl: string; verbose?: boolean }
|
|
73
|
-
) => {
|
|
74
|
-
if (!opts.convexSiteUrl) {
|
|
75
|
-
throw new Error("opts.convexSiteUrl is required");
|
|
76
|
-
}
|
|
77
|
-
if (opts.convexSiteUrl.endsWith(".convex.cloud")) {
|
|
78
|
-
throw new Error(
|
|
79
|
-
oneLine(`
|
|
80
|
-
opts.convexSiteUrl ends with .convex.cloud, which is your cloud URL.
|
|
81
|
-
Use your Convex site URL instead.
|
|
82
|
-
https://docs.convex.dev/production/environment-variables#system-environment-variables
|
|
83
|
-
`)
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
fetchSession: (request: Request) => fetchSession(request, opts),
|
|
88
|
-
reactStartHandler: (request: Request) => reactStartHandler(request, opts),
|
|
89
|
-
getCookieName: () => getCookieName(createAuth),
|
|
90
|
-
};
|
|
91
|
-
};
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file defines a CorsHttpRouter class that extends Convex's HttpRouter.
|
|
3
|
-
* It provides CORS (Cross-Origin Resource Sharing) support for HTTP routes.
|
|
4
|
-
*
|
|
5
|
-
* The CorsHttpRouter:
|
|
6
|
-
* 1. Allows specifying allowed origins for CORS.
|
|
7
|
-
* 2. Overrides the route method to add CORS headers to all non-OPTIONS requests.
|
|
8
|
-
* 3. Automatically adds an OPTIONS route to handle CORS preflight requests.
|
|
9
|
-
* 4. Uses the handleCors helper function to apply CORS headers consistently.
|
|
10
|
-
*
|
|
11
|
-
* This router simplifies the process of making Convex HTTP endpoints
|
|
12
|
-
* accessible to web applications hosted on different domains while
|
|
13
|
-
* maintaining proper CORS configuration.
|
|
14
|
-
*/
|
|
15
|
-
import { HttpRouter, type RouteSpec } from "convex/server";
|
|
16
|
-
export declare const DEFAULT_EXPOSED_HEADERS: string[];
|
|
17
|
-
export type CorsConfig = {
|
|
18
|
-
/**
|
|
19
|
-
* Whether to allow credentials in the request.
|
|
20
|
-
* When true, the request can include cookies and authentication headers.
|
|
21
|
-
* @default false
|
|
22
|
-
*/
|
|
23
|
-
allowCredentials?: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* An array of allowed origins: what domains are allowed to make requests.
|
|
26
|
-
* For example, ["https://example.com"] would only allow requests from
|
|
27
|
-
* https://example.com.
|
|
28
|
-
* You can also use wildcards to allow all subdomains of a given domain.
|
|
29
|
-
* E.g. ["*.example.com"] would allow requests from:
|
|
30
|
-
* - https://subdomain.example.com
|
|
31
|
-
* - https://example.com
|
|
32
|
-
* @default ["*"]
|
|
33
|
-
*/
|
|
34
|
-
allowedOrigins?: string[] | ((req: Request) => Promise<string[]>);
|
|
35
|
-
/**
|
|
36
|
-
* An array of allowed headers: what headers are allowed to be sent in
|
|
37
|
-
* the request.
|
|
38
|
-
* @default ["Content-Type"]
|
|
39
|
-
*/
|
|
40
|
-
allowedHeaders?: string[];
|
|
41
|
-
/**
|
|
42
|
-
* An array of exposed headers: what headers are allowed to be sent in
|
|
43
|
-
* the response.
|
|
44
|
-
* Note: if you pass in an empty array, it will not expose any headers.
|
|
45
|
-
* If you want to extend the default exposed headers, you can do so by
|
|
46
|
-
* passing in [...DEFAULT_EXPOSED_HEADERS, ...yourHeaders].
|
|
47
|
-
* @default {@link DEFAULT_EXPOSED_HEADERS}
|
|
48
|
-
*/
|
|
49
|
-
exposedHeaders?: string[];
|
|
50
|
-
/**
|
|
51
|
-
* The maximum age of the preflight request in seconds.
|
|
52
|
-
* @default 86400 (1 day)
|
|
53
|
-
*/
|
|
54
|
-
browserCacheMaxAge?: number;
|
|
55
|
-
/**
|
|
56
|
-
* Whether to block requests from origins that are not in the allowedOrigins list.
|
|
57
|
-
* @default true
|
|
58
|
-
*/
|
|
59
|
-
enforceAllowOrigins?: boolean;
|
|
60
|
-
/**
|
|
61
|
-
* Whether to log debugging information about CORS requests.
|
|
62
|
-
* @default false
|
|
63
|
-
*/
|
|
64
|
-
debug?: boolean;
|
|
65
|
-
};
|
|
66
|
-
type RouteSpecWithCors = RouteSpec & CorsConfig;
|
|
67
|
-
/**
|
|
68
|
-
* Factory function to create a router that adds CORS support to routes.
|
|
69
|
-
* @param allowedOrigins An array of allowed origins for CORS.
|
|
70
|
-
* @returns A function to use instead of http.route when you want CORS.
|
|
71
|
-
*/
|
|
72
|
-
export declare const corsRouter: (http: HttpRouter, corsConfig?: CorsConfig) => {
|
|
73
|
-
http: HttpRouter;
|
|
74
|
-
route: (routeSpec: RouteSpecWithCors) => void;
|
|
75
|
-
};
|
|
76
|
-
export default corsRouter;
|
|
77
|
-
//# sourceMappingURL=cors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/client/cors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAIL,UAAU,EAIV,KAAK,SAAS,EAGf,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,uBAAuB,UAInC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,UAAU,EAAE,aAAa,UAAU;;uBAK7C,iBAAiB,KAAG,IAAI;CAsD9C,CAAC;AA+DF,eAAe,UAAU,CAAC"}
|