@convex-dev/better-auth 0.7.0-alpha.1 → 0.7.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/commonjs/client/adapter.d.ts +10 -1
  2. package/dist/commonjs/client/adapter.d.ts.map +1 -1
  3. package/dist/commonjs/client/adapter.js +183 -192
  4. package/dist/commonjs/client/adapter.js.map +1 -1
  5. package/dist/commonjs/client/index.d.ts +238 -179
  6. package/dist/commonjs/client/index.d.ts.map +1 -1
  7. package/dist/commonjs/client/index.js +63 -67
  8. package/dist/commonjs/client/index.js.map +1 -1
  9. package/dist/commonjs/component/adapterTest.d.ts +19 -0
  10. package/dist/commonjs/component/adapterTest.d.ts.map +1 -0
  11. package/dist/commonjs/component/adapterTest.js +82 -0
  12. package/dist/commonjs/component/adapterTest.js.map +1 -0
  13. package/dist/commonjs/component/lib.d.ts +218 -548
  14. package/dist/commonjs/component/lib.d.ts.map +1 -1
  15. package/dist/commonjs/component/lib.js +315 -286
  16. package/dist/commonjs/component/lib.js.map +1 -1
  17. package/dist/commonjs/component/schema.d.ts +90 -28
  18. package/dist/commonjs/component/schema.d.ts.map +1 -1
  19. package/dist/commonjs/component/schema.js +76 -18
  20. package/dist/commonjs/component/schema.js.map +1 -1
  21. package/dist/commonjs/component/util.d.ts +148 -86
  22. package/dist/commonjs/component/util.d.ts.map +1 -1
  23. package/dist/commonjs/nextjs/index.d.ts.map +1 -1
  24. package/dist/commonjs/nextjs/index.js +12 -0
  25. package/dist/commonjs/nextjs/index.js.map +1 -1
  26. package/dist/commonjs/plugins/convex/index.d.ts +14 -11
  27. package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
  28. package/dist/commonjs/plugins/convex/index.js +10 -4
  29. package/dist/commonjs/plugins/convex/index.js.map +1 -1
  30. package/dist/commonjs/plugins/cross-domain/client.d.ts +1 -1
  31. package/dist/commonjs/plugins/cross-domain/index.d.ts +5 -3
  32. package/dist/commonjs/plugins/cross-domain/index.d.ts.map +1 -1
  33. package/dist/commonjs/plugins/cross-domain/index.js +19 -5
  34. package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
  35. package/dist/commonjs/react/client.d.ts +1 -1
  36. package/dist/commonjs/react/client.d.ts.map +1 -1
  37. package/dist/commonjs/react/client.js +3 -9
  38. package/dist/commonjs/react/client.js.map +1 -1
  39. package/dist/commonjs/react-start/index.d.ts +37 -3
  40. package/dist/commonjs/react-start/index.d.ts.map +1 -1
  41. package/dist/commonjs/react-start/index.js +20 -4
  42. package/dist/commonjs/react-start/index.js.map +1 -1
  43. package/dist/commonjs/utils/index.d.ts +2 -0
  44. package/dist/commonjs/utils/index.d.ts.map +1 -0
  45. package/dist/commonjs/utils/index.js +8 -0
  46. package/dist/commonjs/utils/index.js.map +1 -0
  47. package/dist/esm/client/adapter.d.ts +10 -1
  48. package/dist/esm/client/adapter.d.ts.map +1 -1
  49. package/dist/esm/client/adapter.js +183 -192
  50. package/dist/esm/client/adapter.js.map +1 -1
  51. package/dist/esm/client/index.d.ts +238 -179
  52. package/dist/esm/client/index.d.ts.map +1 -1
  53. package/dist/esm/client/index.js +63 -67
  54. package/dist/esm/client/index.js.map +1 -1
  55. package/dist/esm/component/adapterTest.d.ts +19 -0
  56. package/dist/esm/component/adapterTest.d.ts.map +1 -0
  57. package/dist/esm/component/adapterTest.js +82 -0
  58. package/dist/esm/component/adapterTest.js.map +1 -0
  59. package/dist/esm/component/lib.d.ts +218 -548
  60. package/dist/esm/component/lib.d.ts.map +1 -1
  61. package/dist/esm/component/lib.js +315 -286
  62. package/dist/esm/component/lib.js.map +1 -1
  63. package/dist/esm/component/schema.d.ts +90 -28
  64. package/dist/esm/component/schema.d.ts.map +1 -1
  65. package/dist/esm/component/schema.js +76 -18
  66. package/dist/esm/component/schema.js.map +1 -1
  67. package/dist/esm/component/util.d.ts +148 -86
  68. package/dist/esm/component/util.d.ts.map +1 -1
  69. package/dist/esm/nextjs/index.d.ts.map +1 -1
  70. package/dist/esm/nextjs/index.js +12 -0
  71. package/dist/esm/nextjs/index.js.map +1 -1
  72. package/dist/esm/plugins/convex/index.d.ts +14 -11
  73. package/dist/esm/plugins/convex/index.d.ts.map +1 -1
  74. package/dist/esm/plugins/convex/index.js +10 -4
  75. package/dist/esm/plugins/convex/index.js.map +1 -1
  76. package/dist/esm/plugins/cross-domain/client.d.ts +1 -1
  77. package/dist/esm/plugins/cross-domain/index.d.ts +5 -3
  78. package/dist/esm/plugins/cross-domain/index.d.ts.map +1 -1
  79. package/dist/esm/plugins/cross-domain/index.js +19 -5
  80. package/dist/esm/plugins/cross-domain/index.js.map +1 -1
  81. package/dist/esm/react/client.d.ts +1 -1
  82. package/dist/esm/react/client.d.ts.map +1 -1
  83. package/dist/esm/react/client.js +3 -9
  84. package/dist/esm/react/client.js.map +1 -1
  85. package/dist/esm/react-start/index.d.ts +37 -3
  86. package/dist/esm/react-start/index.d.ts.map +1 -1
  87. package/dist/esm/react-start/index.js +20 -4
  88. package/dist/esm/react-start/index.js.map +1 -1
  89. package/dist/esm/utils/index.d.ts +2 -0
  90. package/dist/esm/utils/index.d.ts.map +1 -0
  91. package/dist/esm/utils/index.js +8 -0
  92. package/dist/esm/utils/index.js.map +1 -0
  93. package/package.json +20 -5
  94. package/src/client/adapter.test.ts +144 -0
  95. package/src/client/adapter.ts +191 -195
  96. package/src/client/index.ts +64 -80
  97. package/src/component/_generated/api.d.ts +605 -149
  98. package/src/component/adapterTest.ts +141 -0
  99. package/src/component/lib.ts +444 -335
  100. package/src/component/schema.ts +81 -19
  101. package/src/nextjs/index.ts +17 -0
  102. package/src/plugins/convex/index.ts +12 -4
  103. package/src/plugins/cross-domain/index.ts +19 -5
  104. package/src/react/client.tsx +5 -11
  105. package/src/react-start/index.ts +33 -6
  106. package/src/react-start/vite-env.d.ts +2 -0
  107. package/dist/commonjs/react-router/index.d.ts +0 -10
  108. package/dist/commonjs/react-router/index.d.ts.map +0 -1
  109. package/dist/commonjs/react-router/index.js +0 -24
  110. package/dist/commonjs/react-router/index.js.map +0 -1
  111. package/dist/esm/react-router/index.d.ts +0 -10
  112. package/dist/esm/react-router/index.d.ts.map +0 -1
  113. package/dist/esm/react-router/index.js +0 -24
  114. package/dist/esm/react-router/index.js.map +0 -1
  115. package/src/client/cors.ts +0 -425
  116. /package/src/{util.ts → utils/index.ts} +0 -0
@@ -1,3 +1,7 @@
1
+ // This file is auto-generated from auth.ts by generate-schema.ts. Do not edit this file manually.
2
+ // To regenerate the schema, run:
3
+ // npx tsx generate-schema.ts
4
+
1
5
  import { defineSchema, defineTable } from "convex/server";
2
6
  import { v } from "convex/values";
3
7
 
@@ -7,13 +11,19 @@ const schema = defineSchema({
7
11
  email: v.string(),
8
12
  emailVerified: v.boolean(),
9
13
  image: v.optional(v.string()),
10
- twoFactorEnabled: v.optional(v.boolean()),
11
- userId: v.string(),
12
14
  createdAt: v.number(),
13
15
  updatedAt: v.number(),
16
+ twoFactorEnabled: v.optional(v.boolean()),
17
+ isAnonymous: v.optional(v.boolean()),
18
+ username: v.optional(v.string()),
19
+ displayUsername: v.optional(v.string()),
20
+ userId: v.optional(v.string()),
14
21
  })
22
+ .index("email_name", ["email","name"])
23
+ .index("name", ["name"])
24
+ .index("userId", ["userId"])
15
25
  .index("email", ["email"])
16
- .index("userId", ["userId"]),
26
+ .index("username", ["username"]),
17
27
 
18
28
  session: defineTable({
19
29
  expiresAt: v.number(),
@@ -24,10 +34,10 @@ const schema = defineSchema({
24
34
  userAgent: v.optional(v.string()),
25
35
  userId: v.string(),
26
36
  })
27
- .index("token", ["token"])
28
- .index("userId", ["userId"])
29
37
  .index("expiresAt", ["expiresAt"])
30
- .index("userId_expiresAt", ["userId", "expiresAt"]),
38
+ .index("expiresAt_userId", ["expiresAt","userId"])
39
+ .index("token", ["token"])
40
+ .index("userId", ["userId"]),
31
41
 
32
42
  account: defineTable({
33
43
  accountId: v.string(),
@@ -43,16 +53,10 @@ const schema = defineSchema({
43
53
  createdAt: v.number(),
44
54
  updatedAt: v.number(),
45
55
  })
46
- .index("userId", ["userId"])
47
56
  .index("accountId", ["accountId"])
48
- .index("providerId_accountId", ["providerId", "accountId"])
49
- .index("userId_providerId", ["userId", "providerId"]),
50
-
51
- twoFactor: defineTable({
52
- secret: v.string(),
53
- backupCodes: v.string(),
54
- userId: v.string(),
55
- }).index("userId", ["userId"]),
57
+ .index("accountId_providerId", ["accountId","providerId"])
58
+ .index("providerId_userId", ["providerId","userId"])
59
+ .index("userId", ["userId"]),
56
60
 
57
61
  verification: defineTable({
58
62
  identifier: v.string(),
@@ -61,16 +65,74 @@ const schema = defineSchema({
61
65
  createdAt: v.optional(v.number()),
62
66
  updatedAt: v.optional(v.number()),
63
67
  })
64
- .index("identifier", ["identifier"])
65
- .index("expiresAt", ["expiresAt"]),
68
+ .index("expiresAt", ["expiresAt"])
69
+ .index("identifier", ["identifier"]),
70
+
71
+ twoFactor: defineTable({
72
+ secret: v.string(),
73
+ backupCodes: v.string(),
74
+ userId: v.string(),
75
+ })
76
+ .index("userId", ["userId"]),
66
77
 
67
78
  jwks: defineTable({
68
79
  publicKey: v.string(),
69
80
  privateKey: v.string(),
70
81
  createdAt: v.number(),
71
- // no longer used
72
- id: v.optional(v.string()),
73
82
  }),
83
+
84
+ rateLimit: defineTable({
85
+ key: v.optional(v.string()),
86
+ count: v.optional(v.number()),
87
+ lastRequest: v.optional(v.number()),
88
+ })
89
+ .index("key", ["key"]),
90
+
74
91
  });
75
92
 
76
93
  export default schema;
94
+
95
+ export const specialFields = {
96
+ user: {
97
+ name: {
98
+ sortable: true
99
+ },
100
+ email: {
101
+ sortable: true,
102
+ unique: true
103
+ },
104
+ username: {
105
+ sortable: true,
106
+ unique: true
107
+ }
108
+ },
109
+ session: {
110
+ token: {
111
+ unique: true
112
+ },
113
+ userId: {
114
+ references: {
115
+ model: "user",
116
+ field: "id",
117
+ onDelete: "cascade"
118
+ }
119
+ }
120
+ },
121
+ account: {
122
+ userId: {
123
+ references: {
124
+ model: "user",
125
+ field: "id",
126
+ onDelete: "cascade"
127
+ }
128
+ }
129
+ },
130
+ twoFactor: {
131
+ userId: {
132
+ references: {
133
+ model: "user",
134
+ field: "id"
135
+ }
136
+ }
137
+ }
138
+ };
@@ -3,9 +3,23 @@ import { createCookieGetter } from "better-auth/cookies";
3
3
  import { GenericActionCtx } from "convex/server";
4
4
  import { JWT_COOKIE_NAME } from "../plugins/convex";
5
5
 
6
+ const requireBaseURL = (
7
+ createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>
8
+ ) => {
9
+ if (!createAuth({} as any).options.baseURL) {
10
+ throw new Error(
11
+ "No baseURL found in Better Auth config. baseUrl should be set to your Convex Site URL."
12
+ );
13
+ }
14
+ return createAuth({} as any).options.baseURL;
15
+ };
16
+
6
17
  export const getToken = async (
7
18
  createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>
8
19
  ) => {
20
+ // Require baseURL here because it's protocol determines cookie secure mode,
21
+ // and must be set to ensure cookies work between Next.js and Convex.
22
+ requireBaseURL(createAuth);
9
23
  const { cookies } = await import("next/headers");
10
24
  const cookieStore = await cookies();
11
25
  const auth = createAuth({} as any);
@@ -19,6 +33,9 @@ const handler = (request: Request, opts?: { convexSiteUrl?: string }) => {
19
33
  const requestUrl = new URL(request.url);
20
34
  const convexSiteUrl =
21
35
  opts?.convexSiteUrl ?? process.env.NEXT_PUBLIC_CONVEX_SITE_URL;
36
+ if (!convexSiteUrl) {
37
+ throw new Error("NEXT_PUBLIC_CONVEX_SITE_URL is not set");
38
+ }
22
39
  const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
23
40
  const newRequest = new Request(nextUrl, request);
24
41
  newRequest.headers.set("accept-encoding", "application/json");
@@ -51,7 +51,7 @@ export const convex = (
51
51
  return session.user.userId;
52
52
  },
53
53
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
- definePayload: ({ user: { id, userId, ...user }, session }) => ({
54
+ definePayload: ({ user: { id, userId, image, ...user }, session }) => ({
55
55
  ...user,
56
56
  sessionId: session.id,
57
57
  }),
@@ -108,8 +108,13 @@ export const convex = (
108
108
  {
109
109
  matcher: (ctx) => {
110
110
  return (
111
- ctx.path?.startsWith("/sign-in") ||
112
- ctx.path?.startsWith("/callback")
111
+ ctx.path.startsWith("/sign-in") ||
112
+ ctx.path.startsWith("/sign-up") ||
113
+ ctx.path.startsWith("/callback") ||
114
+ ctx.path.startsWith("/oauth2/callback") ||
115
+ ctx.path.startsWith("/magic-link/verify") ||
116
+ ctx.path.startsWith("/email-otp/verify-email") ||
117
+ ctx.path.startsWith("/phone-number/verify")
113
118
  );
114
119
  },
115
120
  handler: createAuthMiddleware(async (ctx) => {
@@ -139,7 +144,10 @@ export const convex = (
139
144
  },
140
145
  {
141
146
  matcher: (ctx) => {
142
- return ctx.path?.startsWith("/sign-out");
147
+ return (
148
+ ctx.path?.startsWith("/sign-out") ||
149
+ ctx.path?.startsWith("/delete-user")
150
+ );
143
151
  },
144
152
  handler: createAuthMiddleware(async (ctx) => {
145
153
  const jwtCookie = ctx.context.createAuthCookie(JWT_COOKIE_NAME, {
@@ -21,6 +21,13 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
21
21
 
22
22
  return {
23
23
  id: "cross-domain",
24
+ init(ctx) {
25
+ return {
26
+ options: {
27
+ trustedOrigins: [siteUrl],
28
+ },
29
+ };
30
+ },
24
31
  hooks: {
25
32
  before: [
26
33
  {
@@ -52,12 +59,22 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
52
59
  };
53
60
  }),
54
61
  },
62
+ {
63
+ matcher: (ctx) => {
64
+ return ctx.method === "GET" && ctx.path.startsWith("/verify-email");
65
+ },
66
+ handler: createAuthMiddleware(async (ctx) => {
67
+ if (ctx.query?.callbackURL) {
68
+ ctx.query.callbackURL = rewriteCallbackURL(ctx.query.callbackURL);
69
+ }
70
+ return { context: ctx };
71
+ }),
72
+ },
55
73
  {
56
74
  matcher: (ctx) => {
57
75
  return (
58
- ctx.path.startsWith("/link-social") ||
76
+ (ctx.method === "POST" && ctx.path.startsWith("/link-social")) ||
59
77
  ctx.path.startsWith("/send-verification-email") ||
60
- ctx.path.startsWith("/verify-email") ||
61
78
  ctx.path.startsWith("/sign-in/email") ||
62
79
  ctx.path.startsWith("/sign-in/social") ||
63
80
  ctx.path.startsWith("/sign-in/magic-link") ||
@@ -149,8 +166,5 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
149
166
  }
150
167
  ),
151
168
  },
152
- options: {
153
- trustedOrigins: [siteUrl],
154
- },
155
169
  } satisfies BetterAuthPlugin;
156
170
  };
@@ -27,7 +27,7 @@ export function useAuth() {
27
27
  }
28
28
 
29
29
  export type ConvexAuthClient = {
30
- verbose: boolean | undefined;
30
+ verbose?: boolean;
31
31
  logger?: ConvexReactClient["logger"];
32
32
  };
33
33
 
@@ -64,7 +64,7 @@ export function AuthProvider({
64
64
  const { data: session, isPending: isSessionPending } =
65
65
  authClient.useSession();
66
66
 
67
- const verbose: boolean = (client as any).options?.verbose ?? false;
67
+ const verbose: boolean = client.verbose ?? false;
68
68
  const logVerbose = useCallback(
69
69
  (message: string) => {
70
70
  if (verbose) {
@@ -128,17 +128,11 @@ export function AuthProvider({
128
128
  () => {
129
129
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
130
130
  (async () => {
131
- // Return early if cross domain plugin is not configured.
132
- // Apparently there's no sane way to do this type check. Only the in
133
- // keyword narrows the type effectively but it doesn't work on functions.
134
- if (!(authClient as any)["crossDomain"]) {
135
- return;
136
- }
137
- const authClientWithCrossDomain =
138
- authClient as AuthClientWithPlugins<PluginsWithCrossDomain>;
139
- const url = new URL(window.location.href);
131
+ const url = new URL(window.location?.href);
140
132
  const token = url.searchParams.get("ott");
141
133
  if (token) {
134
+ const authClientWithCrossDomain =
135
+ authClient as AuthClientWithPlugins<PluginsWithCrossDomain>;
142
136
  url.searchParams.delete("ott");
143
137
  const result =
144
138
  await authClientWithCrossDomain.crossDomain.oneTimeToken.verify({
@@ -13,22 +13,38 @@ export const getCookieName = async (
13
13
  return cookie.name;
14
14
  };
15
15
 
16
+ const requireConvexSiteUrl = (
17
+ opts: { convexSiteUrl: string; verbose?: boolean },
18
+ calledFrom: string
19
+ ) => {
20
+ if (!opts.convexSiteUrl) {
21
+ throw new Error(`${calledFrom}: opts.convexSiteUrl is required`);
22
+ }
23
+ if (opts.verbose) {
24
+ console.log(`${calledFrom}: opts.convexSiteUrl: ${opts.convexSiteUrl}`);
25
+ }
26
+ return opts.convexSiteUrl;
27
+ };
28
+
16
29
  export const fetchSession = async <
17
30
  T extends (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>,
18
31
  >(
19
- createAuth: T,
20
- request?: Request
32
+ request: Request,
33
+ opts: {
34
+ convexSiteUrl: string;
35
+ verbose?: boolean;
36
+ }
21
37
  ) => {
22
38
  type Session = ReturnType<T>["$Infer"]["Session"];
23
39
 
24
40
  if (!request) {
25
41
  throw new Error("No request found");
26
42
  }
27
- const baseURL = new URL(request.url).origin;
43
+ const convexSiteUrl = requireConvexSiteUrl(opts, "fetchSession");
28
44
  const { data: session } = await betterFetch<Session>(
29
45
  "/api/auth/get-session",
30
46
  {
31
- baseURL,
47
+ baseURL: convexSiteUrl,
32
48
  headers: {
33
49
  cookie: request.headers.get("cookie") ?? "",
34
50
  },
@@ -41,11 +57,22 @@ export const fetchSession = async <
41
57
 
42
58
  export const reactStartHandler = (
43
59
  request: Request,
44
- opts?: { convexSiteUrl?: string }
60
+ opts: { convexSiteUrl: string; verbose?: boolean }
45
61
  ) => {
46
- const convexSiteUrl = opts?.convexSiteUrl ?? process.env.VITE_CONVEX_SITE_URL;
47
62
  const requestUrl = new URL(request.url);
63
+ const convexSiteUrl = requireConvexSiteUrl(opts, "reactStartHandler");
48
64
  const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
49
65
  request.headers.set("accept-encoding", "application/json");
50
66
  return fetch(nextUrl, new Request(request, { redirect: "manual" }));
51
67
  };
68
+
69
+ export const reactStartHelpers = (
70
+ createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>,
71
+ opts: { convexSiteUrl: string; verbose?: boolean }
72
+ ) => {
73
+ return {
74
+ fetchSession: (request: Request) => fetchSession(request, opts),
75
+ reactStartHandler: (request: Request) => reactStartHandler(request, opts),
76
+ getCookieName: () => getCookieName(createAuth),
77
+ };
78
+ };
@@ -0,0 +1,2 @@
1
+ /// <reference types="vite/client" />
2
+ /// <reference types="vite/types/importMeta.d.ts" />
@@ -1,10 +0,0 @@
1
- import { betterAuth } from "better-auth";
2
- import { GenericActionCtx } from "convex/server";
3
- export declare const getToken: (createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>) => Promise<string | undefined>;
4
- export declare const nextJsHandler: (opts?: {
5
- convexSiteUrl?: string;
6
- }) => {
7
- GET: (request: Request) => Promise<Response>;
8
- POST: (request: Request) => Promise<Response>;
9
- };
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,eAAO,MAAM,QAAQ,GACnB,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,OAAO,UAAU,CAAC,gCAS1E,CAAC;AAYF,eAAO,MAAM,aAAa,GAAI,OAAO;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE;mBAC9C,OAAO;oBACN,OAAO;CACvB,CAAC"}
@@ -1,24 +0,0 @@
1
- import { createCookieGetter } from "better-auth/cookies";
2
- import { JWT_COOKIE_NAME } from "../plugins/convex";
3
- export const getToken = async (createAuth) => {
4
- const { cookies } = await import("next/headers");
5
- const cookieStore = await cookies();
6
- const auth = createAuth({});
7
- const createCookie = createCookieGetter(auth.options);
8
- const cookie = createCookie(JWT_COOKIE_NAME);
9
- const token = cookieStore.get(cookie.name);
10
- return token?.value;
11
- };
12
- const handler = (request, opts) => {
13
- const requestUrl = new URL(request.url);
14
- const convexSiteUrl = opts?.convexSiteUrl ?? process.env.NEXT_PUBLIC_CONVEX_SITE_URL;
15
- const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
16
- const newRequest = new Request(nextUrl, request);
17
- newRequest.headers.set("accept-encoding", "application/json");
18
- return fetch(newRequest, { method: request.method, redirect: "manual" });
19
- };
20
- export const nextJsHandler = (opts) => ({
21
- GET: (request) => handler(request, opts),
22
- POST: (request) => handler(request, opts),
23
- });
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,UAAyE,EACzE,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,EAAS,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,KAAK,EAAE,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,IAAiC,EAAE,EAAE;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,aAAa,GACjB,IAAI,EAAE,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiC,EAAE,EAAE,CAAC,CAAC;IACnE,GAAG,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;CACnD,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- import { betterAuth } from "better-auth";
2
- import { GenericActionCtx } from "convex/server";
3
- export declare const getToken: (createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>) => Promise<string | undefined>;
4
- export declare const nextJsHandler: (opts?: {
5
- convexSiteUrl?: string;
6
- }) => {
7
- GET: (request: Request) => Promise<Response>;
8
- POST: (request: Request) => Promise<Response>;
9
- };
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react-router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,eAAO,MAAM,QAAQ,GACnB,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,OAAO,UAAU,CAAC,gCAS1E,CAAC;AAYF,eAAO,MAAM,aAAa,GAAI,OAAO;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE;mBAC9C,OAAO;oBACN,OAAO;CACvB,CAAC"}
@@ -1,24 +0,0 @@
1
- import { createCookieGetter } from "better-auth/cookies";
2
- import { JWT_COOKIE_NAME } from "../plugins/convex/index.js";
3
- export const getToken = async (createAuth) => {
4
- const { cookies } = await import("next/headers");
5
- const cookieStore = await cookies();
6
- const auth = createAuth({});
7
- const createCookie = createCookieGetter(auth.options);
8
- const cookie = createCookie(JWT_COOKIE_NAME);
9
- const token = cookieStore.get(cookie.name);
10
- return token?.value;
11
- };
12
- const handler = (request, opts) => {
13
- const requestUrl = new URL(request.url);
14
- const convexSiteUrl = opts?.convexSiteUrl ?? process.env.NEXT_PUBLIC_CONVEX_SITE_URL;
15
- const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
16
- const newRequest = new Request(nextUrl, request);
17
- newRequest.headers.set("accept-encoding", "application/json");
18
- return fetch(newRequest, { method: request.method, redirect: "manual" });
19
- };
20
- export const nextJsHandler = (opts) => ({
21
- GET: (request) => handler(request, opts),
22
- POST: (request) => handler(request, opts),
23
- });
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,UAAyE,EACzE,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,EAAS,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,KAAK,EAAE,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,IAAiC,EAAE,EAAE;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,aAAa,GACjB,IAAI,EAAE,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,aAAa,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAiC,EAAE,EAAE,CAAC,CAAC;IACnE,GAAG,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;CACnD,CAAC,CAAC"}