@convex-dev/better-auth 0.6.2 → 0.7.0-alpha.0

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 (98) hide show
  1. package/README.md +8 -2
  2. package/dist/commonjs/client/adapter.d.ts.map +1 -1
  3. package/dist/commonjs/client/adapter.js +27 -9
  4. package/dist/commonjs/client/adapter.js.map +1 -1
  5. package/dist/commonjs/client/cors.d.ts +9 -4
  6. package/dist/commonjs/client/cors.d.ts.map +1 -1
  7. package/dist/commonjs/client/cors.js +44 -28
  8. package/dist/commonjs/client/cors.js.map +1 -1
  9. package/dist/commonjs/client/index.d.ts +1 -2
  10. package/dist/commonjs/client/index.d.ts.map +1 -1
  11. package/dist/commonjs/client/index.js +57 -61
  12. package/dist/commonjs/client/index.js.map +1 -1
  13. package/dist/commonjs/component/lib.d.ts +58 -0
  14. package/dist/commonjs/component/lib.d.ts.map +1 -1
  15. package/dist/commonjs/component/lib.js +28 -0
  16. package/dist/commonjs/component/lib.js.map +1 -1
  17. package/dist/commonjs/component/schema.d.ts +2 -0
  18. package/dist/commonjs/component/schema.d.ts.map +1 -1
  19. package/dist/commonjs/component/schema.js +3 -1
  20. package/dist/commonjs/component/schema.js.map +1 -1
  21. package/dist/commonjs/component/util.d.ts +6 -0
  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 +3 -2
  25. package/dist/commonjs/nextjs/index.js.map +1 -1
  26. package/dist/commonjs/plugins/convex/index.d.ts +111 -2
  27. package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
  28. package/dist/commonjs/plugins/convex/index.js +66 -5
  29. package/dist/commonjs/plugins/convex/index.js.map +1 -1
  30. package/dist/commonjs/plugins/cross-domain/index.d.ts.map +1 -1
  31. package/dist/commonjs/plugins/cross-domain/index.js +2 -12
  32. package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
  33. package/dist/commonjs/react-start/index.d.ts.map +1 -1
  34. package/dist/commonjs/react-start/index.js +2 -2
  35. package/dist/commonjs/react-start/index.js.map +1 -1
  36. package/dist/esm/client/adapter.d.ts.map +1 -1
  37. package/dist/esm/client/adapter.js +27 -9
  38. package/dist/esm/client/adapter.js.map +1 -1
  39. package/dist/esm/client/cors.d.ts +9 -4
  40. package/dist/esm/client/cors.d.ts.map +1 -1
  41. package/dist/esm/client/cors.js +44 -28
  42. package/dist/esm/client/cors.js.map +1 -1
  43. package/dist/esm/client/index.d.ts +1 -2
  44. package/dist/esm/client/index.d.ts.map +1 -1
  45. package/dist/esm/client/index.js +57 -61
  46. package/dist/esm/client/index.js.map +1 -1
  47. package/dist/esm/component/lib.d.ts +58 -0
  48. package/dist/esm/component/lib.d.ts.map +1 -1
  49. package/dist/esm/component/lib.js +28 -0
  50. package/dist/esm/component/lib.js.map +1 -1
  51. package/dist/esm/component/schema.d.ts +2 -0
  52. package/dist/esm/component/schema.d.ts.map +1 -1
  53. package/dist/esm/component/schema.js +3 -1
  54. package/dist/esm/component/schema.js.map +1 -1
  55. package/dist/esm/component/util.d.ts +6 -0
  56. package/dist/esm/component/util.d.ts.map +1 -1
  57. package/dist/esm/nextjs/index.d.ts.map +1 -1
  58. package/dist/esm/nextjs/index.js +3 -2
  59. package/dist/esm/nextjs/index.js.map +1 -1
  60. package/dist/esm/plugins/convex/index.d.ts +111 -2
  61. package/dist/esm/plugins/convex/index.d.ts.map +1 -1
  62. package/dist/esm/plugins/convex/index.js +66 -5
  63. package/dist/esm/plugins/convex/index.js.map +1 -1
  64. package/dist/esm/plugins/cross-domain/index.d.ts.map +1 -1
  65. package/dist/esm/plugins/cross-domain/index.js +2 -12
  66. package/dist/esm/plugins/cross-domain/index.js.map +1 -1
  67. package/dist/esm/react-start/index.d.ts.map +1 -1
  68. package/dist/esm/react-start/index.js +2 -2
  69. package/dist/esm/react-start/index.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/client/adapter.ts +36 -11
  72. package/src/client/cors.ts +60 -38
  73. package/src/client/index.ts +65 -73
  74. package/src/component/_generated/api.d.ts +12 -0
  75. package/src/component/lib.ts +32 -0
  76. package/src/component/schema.ts +3 -1
  77. package/src/nextjs/index.ts +3 -2
  78. package/src/plugins/convex/index.ts +79 -11
  79. package/src/plugins/cross-domain/index.ts +2 -12
  80. package/src/react-router/index.ts +31 -0
  81. package/src/react-start/index.ts +2 -2
  82. package/src/util.ts +7 -0
  83. package/dist/commonjs/component/adapterTest.d.ts +0 -15
  84. package/dist/commonjs/component/adapterTest.d.ts.map +0 -1
  85. package/dist/commonjs/component/adapterTest.js +0 -63
  86. package/dist/commonjs/component/adapterTest.js.map +0 -1
  87. package/dist/commonjs/utils/index.d.ts +0 -2
  88. package/dist/commonjs/utils/index.d.ts.map +0 -1
  89. package/dist/commonjs/utils/index.js +0 -8
  90. package/dist/commonjs/utils/index.js.map +0 -1
  91. package/dist/esm/component/adapterTest.d.ts +0 -21
  92. package/dist/esm/component/adapterTest.d.ts.map +0 -1
  93. package/dist/esm/component/adapterTest.js +0 -73
  94. package/dist/esm/component/adapterTest.js.map +0 -1
  95. package/dist/esm/utils/index.d.ts +0 -2
  96. package/dist/esm/utils/index.d.ts.map +0 -1
  97. package/dist/esm/utils/index.js +0 -8
  98. package/dist/esm/utils/index.js.map +0 -1
@@ -1,8 +1,4 @@
1
- import {
2
- createAuthMiddleware,
3
- getSession,
4
- sessionMiddleware,
5
- } from "better-auth/api";
1
+ import { createAuthMiddleware, sessionMiddleware } from "better-auth/api";
6
2
  import {
7
3
  BetterAuthPlugin,
8
4
  createAuthEndpoint,
@@ -14,10 +10,18 @@ import {
14
10
  import { omit } from "convex-helpers";
15
11
  import { z } from "zod";
16
12
 
17
- const JWT_COOKIE_NAME = "convex_jwt";
13
+ export const JWT_COOKIE_NAME = "convex_jwt";
18
14
 
19
- export const convex = (opts: { jwtExpirationSeconds?: number } = {}) => {
20
- const { jwtExpirationSeconds = 60 * 15 } = opts;
15
+ export const convex = (
16
+ opts: {
17
+ jwtExpirationSeconds?: number;
18
+ deleteExpiredSessionsOnLogin?: boolean;
19
+ } = {}
20
+ ) => {
21
+ const {
22
+ jwtExpirationSeconds = 60 * 15,
23
+ deleteExpiredSessionsOnLogin = false,
24
+ } = opts;
21
25
  const customSession = customSessionPlugin(async ({ user, session }) => {
22
26
  const { userId, ...userData } = omit(user, ["id"]) as typeof user & {
23
27
  userId: string;
@@ -54,8 +58,8 @@ export const convex = (opts: { jwtExpirationSeconds?: number } = {}) => {
54
58
  },
55
59
  });
56
60
  // Bearer plugin converts the session token to a cookie
57
- // for cross domain social login after code verification, and is required for
58
- // the headers() helper to work.
61
+ // for cross domain social login after code verification,
62
+ // and is required for the headers() helper to work.
59
63
  const bearer = bearerPlugin();
60
64
  const schema = {
61
65
  user: {
@@ -69,6 +73,70 @@ export const convex = (opts: { jwtExpirationSeconds?: number } = {}) => {
69
73
  before: [...bearer.hooks.before],
70
74
  after: [
71
75
  ...oidcProvider.hooks.after,
76
+ {
77
+ matcher: (ctx) => {
78
+ return (
79
+ deleteExpiredSessionsOnLogin &&
80
+ (ctx.path?.startsWith("/sign-in") ||
81
+ ctx.path?.startsWith("/callback"))
82
+ );
83
+ },
84
+ handler: createAuthMiddleware(async (ctx) => {
85
+ // Delete expired sessions at login
86
+ const userId = ctx.context.newSession?.user.id;
87
+ if (!userId) {
88
+ return;
89
+ }
90
+ await ctx.context.adapter.deleteMany({
91
+ model: "session",
92
+ where: [
93
+ {
94
+ field: "userId",
95
+ operator: "eq",
96
+ value: userId,
97
+ connector: "AND",
98
+ },
99
+ {
100
+ operator: "lte",
101
+ field: "expiresAt",
102
+ value: new Date().getTime(),
103
+ },
104
+ ],
105
+ });
106
+ }),
107
+ },
108
+ {
109
+ matcher: (ctx) => {
110
+ return (
111
+ ctx.path?.startsWith("/sign-in") ||
112
+ ctx.path?.startsWith("/callback")
113
+ );
114
+ },
115
+ handler: createAuthMiddleware(async (ctx) => {
116
+ // Set jwt cookie at login for ssa
117
+ const cookie = ctx.context.responseHeaders?.get("set-cookie") ?? "";
118
+ if (!cookie) {
119
+ return;
120
+ }
121
+ try {
122
+ const { token } = await jwt.endpoints.getToken({
123
+ ...ctx,
124
+ method: "GET",
125
+ headers: {
126
+ cookie,
127
+ },
128
+ returnHeaders: false,
129
+ });
130
+ const jwtCookie = ctx.context.createAuthCookie(JWT_COOKIE_NAME, {
131
+ maxAge: jwtExpirationSeconds,
132
+ });
133
+ ctx.setCookie(jwtCookie.name, token, jwtCookie.attributes);
134
+ } catch (err) {
135
+ // no-op, some sign-in calls (eg., when redirecting to 2fa)
136
+ // 401 here
137
+ }
138
+ }),
139
+ },
72
140
  {
73
141
  matcher: (ctx) => {
74
142
  return ctx.path?.startsWith("/sign-out");
@@ -137,7 +205,7 @@ export const convex = (opts: { jwtExpirationSeconds?: number } = {}) => {
137
205
  });
138
206
  return response;
139
207
  }
140
- ) as unknown as ReturnType<typeof getSession>,
208
+ ),
141
209
  getOpenIdConfig: createAuthEndpoint(
142
210
  "/convex/.well-known/openid-configuration",
143
211
  {
@@ -52,22 +52,12 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
52
52
  };
53
53
  }),
54
54
  },
55
- {
56
- matcher: (ctx) => {
57
- return ctx.method === "GET" && ctx.path.startsWith("/verify-email");
58
- },
59
- handler: createAuthMiddleware(async (ctx) => {
60
- if (ctx.query?.callbackURL) {
61
- ctx.query.callbackURL = rewriteCallbackURL(ctx.query.callbackURL);
62
- }
63
- return { context: ctx };
64
- }),
65
- },
66
55
  {
67
56
  matcher: (ctx) => {
68
57
  return (
69
- (ctx.method === "POST" && ctx.path.startsWith("/link-social")) ||
58
+ ctx.path.startsWith("/link-social") ||
70
59
  ctx.path.startsWith("/send-verification-email") ||
60
+ ctx.path.startsWith("/verify-email") ||
71
61
  ctx.path.startsWith("/sign-in/email") ||
72
62
  ctx.path.startsWith("/sign-in/social") ||
73
63
  ctx.path.startsWith("/sign-in/magic-link") ||
@@ -0,0 +1,31 @@
1
+ import { betterAuth } from "better-auth";
2
+ import { createCookieGetter } from "better-auth/cookies";
3
+ import { GenericActionCtx } from "convex/server";
4
+ import { JWT_COOKIE_NAME } from "../plugins/convex";
5
+
6
+ export const getToken = async (
7
+ createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>
8
+ ) => {
9
+ const { cookies } = await import("next/headers");
10
+ const cookieStore = await cookies();
11
+ const auth = createAuth({} as any);
12
+ const createCookie = createCookieGetter(auth.options);
13
+ const cookie = createCookie(JWT_COOKIE_NAME);
14
+ const token = cookieStore.get(cookie.name);
15
+ return token?.value;
16
+ };
17
+
18
+ const handler = (request: Request, opts?: { convexSiteUrl?: string }) => {
19
+ const requestUrl = new URL(request.url);
20
+ const convexSiteUrl =
21
+ opts?.convexSiteUrl ?? process.env.NEXT_PUBLIC_CONVEX_SITE_URL;
22
+ const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
23
+ const newRequest = new Request(nextUrl, request);
24
+ newRequest.headers.set("accept-encoding", "application/json");
25
+ return fetch(newRequest, { method: request.method, redirect: "manual" });
26
+ };
27
+
28
+ export const nextJsHandler = (opts?: { convexSiteUrl?: string }) => ({
29
+ GET: (request: Request) => handler(request, opts),
30
+ POST: (request: Request) => handler(request, opts),
31
+ });
@@ -2,13 +2,14 @@ import { betterAuth } from "better-auth";
2
2
  import { createCookieGetter } from "better-auth/cookies";
3
3
  import { betterFetch } from "@better-fetch/fetch";
4
4
  import { GenericActionCtx } from "convex/server";
5
+ import { JWT_COOKIE_NAME } from "../plugins/convex";
5
6
 
6
7
  export const getCookieName = async (
7
8
  createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>
8
9
  ) => {
9
10
  const auth = createAuth({} as any);
10
11
  const createCookie = createCookieGetter(auth.options);
11
- const cookie = createCookie("convex_jwt");
12
+ const cookie = createCookie(JWT_COOKIE_NAME);
12
13
  return cookie.name;
13
14
  };
14
15
 
@@ -30,7 +31,6 @@ export const fetchSession = async <
30
31
  baseURL,
31
32
  headers: {
32
33
  cookie: request.headers.get("cookie") ?? "",
33
- origin: baseURL,
34
34
  },
35
35
  }
36
36
  );
package/src/util.ts ADDED
@@ -0,0 +1,7 @@
1
+ export const requireEnv = (name: string) => {
2
+ const value = process.env[name];
3
+ if (value === undefined) {
4
+ throw new Error(`Missing environment variable \`${name}\``);
5
+ }
6
+ return value;
7
+ };
@@ -1,15 +0,0 @@
1
- import { GenericCtx } from "./_generated/server";
2
- import { RegisteredMutation, RegisteredQuery } from "convex/server";
3
- export declare const betterAuthComponent: any;
4
- export declare const createAdapter: (ctx: GenericCtx) => (options: import("better-auth").BetterAuthOptions) => import("better-auth").Adapter;
5
- export declare const createUser: any, deleteUser: any, updateUser: any, createSession: any, isAuthenticated: any;
6
- export declare const create: RegisteredMutation<"public", any, Promise<any>>;
7
- export declare const findOne: RegisteredQuery<"public", any, Promise<any>>;
8
- export declare const findMany: RegisteredQuery<"public", any, Promise<any>>;
9
- export declare const count: RegisteredQuery<"public", any, Promise<any>>;
10
- export declare const update: RegisteredMutation<"public", any, Promise<any>>;
11
- export declare const updateMany: RegisteredMutation<"public", any, Promise<any>>;
12
- declare const deleteMutation: RegisteredMutation<"public", any, Promise<any>>;
13
- export { deleteMutation as delete };
14
- export declare const deleteMany: RegisteredMutation<"public", any, Promise<any>>;
15
- //# sourceMappingURL=adapterTest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapterTest.d.ts","sourceRoot":"","sources":["../../../src/component/adapterTest.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAC;AAOvB,eAAO,MAAM,mBAAmB,EAI1B,GAAG,CAAC;AAEV,eAAO,MAAM,aAAa,GAAI,KAAK,UAAU,wFACJ,CAAC;AAE1C,eAAO,MACL,UAAU,OACV,UAAU,OACV,UAAU,OACV,aAAa,OACb,eAAe,KAKf,CAAC;AAaH,eAAO,MAAM,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAUlE,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAKhE,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAKjE,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAK9D,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAKlE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,kBAAkB,CACzC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC;AAEH,QAAA,MAAM,cAAc,EAAE,kBAAkB,CACtC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC;AACH,OAAO,EAAE,cAAc,IAAI,MAAM,EAAE,CAAC;AAEpC,eAAO,MAAM,UAAU,EAAE,kBAAkB,CACzC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC"}
@@ -1,63 +0,0 @@
1
- import { convexAdapter, BetterAuth, } from "../client";
2
- import { api, internal } from "./_generated/api";
3
- import { mutation, query } from "./_generated/server";
4
- // @ts-expect-error - this is a test
5
- const authFunctions = internal.adapterTest;
6
- const publicAuthFunctions = api.adapterTest;
7
- export const betterAuthComponent = new BetterAuth(api, {
8
- authFunctions,
9
- publicAuthFunctions,
10
- verbose: false,
11
- });
12
- export const createAdapter = (ctx) => convexAdapter(ctx, betterAuthComponent);
13
- export const { createUser, deleteUser, updateUser, createSession, isAuthenticated, } = betterAuthComponent.createAuthFunctions({
14
- onCreateUser: async () => {
15
- return "foo";
16
- },
17
- });
18
- const mapData = (data) => {
19
- const dateStringRegex = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
20
- return Object.fromEntries(Object.entries(data).map(([key, value]) => [
21
- key,
22
- dateStringRegex.test(value) ? new Date(value) : value,
23
- ]));
24
- };
25
- export const create = mutation(async (ctx, args) => {
26
- const adapter = createAdapter(ctx);
27
- const result = await adapter({}).create({
28
- ...args,
29
- data: mapData(args.data),
30
- });
31
- console.log("result from create", result);
32
- return result;
33
- });
34
- export const findOne = query(async (ctx, args) => {
35
- const adapter = createAdapter(ctx);
36
- return adapter({}).findOne(args);
37
- });
38
- export const findMany = query(async (ctx, args) => {
39
- const adapter = createAdapter(ctx);
40
- return adapter({}).findMany(args);
41
- });
42
- export const count = query(async (ctx, args) => {
43
- const adapter = createAdapter(ctx);
44
- return adapter({}).count(args);
45
- });
46
- export const update = mutation(async (ctx, args) => {
47
- const adapter = createAdapter(ctx);
48
- return adapter({}).update(args);
49
- });
50
- export const updateMany = mutation(async (ctx, args) => {
51
- const adapter = createAdapter(ctx);
52
- return adapter({}).updateMany(args);
53
- });
54
- const deleteMutation = mutation(async (ctx, args) => {
55
- const adapter = createAdapter(ctx);
56
- return adapter({}).delete(args);
57
- });
58
- export { deleteMutation as delete };
59
- export const deleteMany = mutation(async (ctx, args) => {
60
- const adapter = createAdapter(ctx);
61
- return adapter({}).deleteMany(args);
62
- });
63
- //# sourceMappingURL=adapterTest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapterTest.js","sourceRoot":"","sources":["../../../src/component/adapterTest.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,UAAU,GAEX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAc,QAAQ,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAQlE,oCAAoC;AACpC,MAAM,aAAa,GAAkB,QAAQ,CAAC,WAAkB,CAAC;AAEjE,MAAM,mBAAmB,GAAwB,GAAG,CAAC,WAAkB,CAAC;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC,GAAU,EAAE;IAC5D,aAAa;IACb,mBAAmB;IACnB,OAAO,EAAE,KAAK;CACf,CAAQ,CAAC;AAEV,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAe,EAAE,EAAE,CAC/C,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;AAE1C,MAAM,CAAC,MAAM,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,GAChB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;IAC1C,YAAY,EAAE,KAAK,IAAI,EAAE;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,EAAE;IAC5B,MAAM,eAAe,GACnB,0EAA0E,CAAC;IAC7E,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACzC,GAAG;QACH,eAAe,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,KAAK;KAC1E,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAoD,QAAQ,CAC7E,KAAK,EAAE,GAA4B,EAAE,IAAS,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;QACtC,GAAG,IAAI;QACP,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAiD,KAAK,CACxE,KAAK,EAAE,GAAyB,EAAE,IAAS,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAiD,KAAK,CACzE,KAAK,EAAE,GAAyB,EAAE,IAAS,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAiD,KAAK,CACtE,KAAK,EAAE,GAAyB,EAAE,IAAS,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAoD,QAAQ,CAC7E,KAAK,EAAE,GAA4B,EAAE,IAAS,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAInB,QAAQ,CAAC,KAAK,EAAE,GAA4B,EAAE,IAAS,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAIhB,QAAQ,CAAC,KAAK,EAAE,GAA4B,EAAE,IAAS,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AACH,OAAO,EAAE,cAAc,IAAI,MAAM,EAAE,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAInB,QAAQ,CAAC,KAAK,EAAE,GAA4B,EAAE,IAAS,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const requireEnv: (name: string) => string;
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAMtC,CAAC"}
@@ -1,8 +0,0 @@
1
- export const requireEnv = (name) => {
2
- const value = process.env[name];
3
- if (value === undefined) {
4
- throw new Error(`Missing environment variable \`${name}\``);
5
- }
6
- return value;
7
- };
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1,21 +0,0 @@
1
- import { GenericCtx } from "./_generated/server.js";
2
- import { RegisteredMutation, RegisteredQuery } from "convex/server";
3
- export declare const betterAuthComponent: any;
4
- export declare const createAdapter: (ctx: GenericCtx) => (options: import("better-auth").BetterAuthOptions) => import("better-auth").Adapter;
5
- export declare const createUser: any, deleteUser: any, updateUser: any, createSession: any, isAuthenticated: any;
6
- export declare const deserialize: (data: any) => {
7
- [k: string]: unknown;
8
- };
9
- export declare const serialize: (data: any) => {
10
- [k: string]: unknown;
11
- };
12
- export declare const create: RegisteredMutation<"public", any, Promise<any>>;
13
- export declare const findOne: RegisteredQuery<"public", any, Promise<any>>;
14
- export declare const findMany: RegisteredQuery<"public", any, Promise<any>>;
15
- export declare const count: RegisteredQuery<"public", any, Promise<any>>;
16
- export declare const update: RegisteredMutation<"public", any, Promise<any>>;
17
- export declare const updateMany: RegisteredMutation<"public", any, Promise<any>>;
18
- declare const deleteMutation: RegisteredMutation<"public", any, Promise<any>>;
19
- export { deleteMutation as delete };
20
- export declare const deleteMany: RegisteredMutation<"public", any, Promise<any>>;
21
- //# sourceMappingURL=adapterTest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapterTest.d.ts","sourceRoot":"","sources":["../../../src/component/adapterTest.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAC;AAOvB,eAAO,MAAM,mBAAmB,EAI1B,GAAG,CAAC;AAEV,eAAO,MAAM,aAAa,GAAI,KAAK,UAAU,wFACJ,CAAC;AAE1C,eAAO,MACL,UAAU,OACV,UAAU,OACV,UAAU,OACV,aAAa,OACb,eAAe,KAMf,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG;;CASpC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,GAAG;;CAMhC,CAAC;AAEJ,eAAO,MAAM,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CASlE,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAMhE,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAMjE,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAK9D,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CASlE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,kBAAkB,CACzC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC;AAEH,QAAA,MAAM,cAAc,EAAE,kBAAkB,CACtC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC;AACH,OAAO,EAAE,cAAc,IAAI,MAAM,EAAE,CAAC;AAEpC,eAAO,MAAM,UAAU,EAAE,kBAAkB,CACzC,QAAQ,EACR,GAAG,EACH,OAAO,CAAC,GAAG,CAAC,CAIZ,CAAC"}
@@ -1,73 +0,0 @@
1
- import { convexAdapter, BetterAuth, } from "../client/index.js";
2
- import { api, internal } from "./_generated/api.js";
3
- import { mutation, query } from "./_generated/server.js";
4
- // @ts-expect-error - this is a test
5
- const authFunctions = internal.adapterTest;
6
- const publicAuthFunctions = api.adapterTest;
7
- export const betterAuthComponent = new BetterAuth(api, {
8
- authFunctions,
9
- publicAuthFunctions,
10
- verbose: false,
11
- });
12
- export const createAdapter = (ctx) => convexAdapter(ctx, betterAuthComponent);
13
- export const { createUser, deleteUser, updateUser, createSession, isAuthenticated, } = betterAuthComponent.createAuthFunctions({
14
- onCreateUser: async (ctx, args) => {
15
- // noop
16
- // not required for the adapter test
17
- },
18
- });
19
- export const deserialize = (data) => {
20
- const dateStringRegex = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
21
- return Object.fromEntries(Object.entries(data).map(([key, value]) => [
22
- key,
23
- dateStringRegex.test(value) ? new Date(value) : value,
24
- ]));
25
- };
26
- export const serialize = (data) => Object.fromEntries(Object.entries(data).map(([key, value]) => [
27
- key,
28
- value instanceof Date ? value.toISOString() : value,
29
- ]));
30
- export const create = mutation(async (ctx, args) => {
31
- const adapter = createAdapter(ctx);
32
- const result = await adapter({}).create({
33
- ...args,
34
- data: deserialize(args.data),
35
- });
36
- return serialize(result);
37
- });
38
- export const findOne = query(async (ctx, args) => {
39
- const adapter = createAdapter(ctx);
40
- const result = await adapter({}).findOne(args);
41
- return serialize(result);
42
- });
43
- export const findMany = query(async (ctx, args) => {
44
- const adapter = createAdapter(ctx);
45
- const result = await adapter({}).findMany(args);
46
- return result.map(serialize);
47
- });
48
- export const count = query(async (ctx, args) => {
49
- const adapter = createAdapter(ctx);
50
- return adapter({}).count(args);
51
- });
52
- export const update = mutation(async (ctx, args) => {
53
- const adapter = createAdapter(ctx);
54
- const result = await adapter({}).update({
55
- ...args,
56
- update: deserialize(args.update),
57
- });
58
- return serialize(result);
59
- });
60
- export const updateMany = mutation(async (ctx, args) => {
61
- const adapter = createAdapter(ctx);
62
- return adapter({}).updateMany(args);
63
- });
64
- const deleteMutation = mutation(async (ctx, args) => {
65
- const adapter = createAdapter(ctx);
66
- return adapter({}).delete(args);
67
- });
68
- export { deleteMutation as delete };
69
- export const deleteMany = mutation(async (ctx, args) => {
70
- const adapter = createAdapter(ctx);
71
- return adapter({}).deleteMany(args);
72
- });
73
- //# sourceMappingURL=adapterTest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapterTest.js","sourceRoot":"","sources":["../../../src/component/adapterTest.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const requireEnv: (name: string) => string;
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,WAMtC,CAAC"}
@@ -1,8 +0,0 @@
1
- export const requireEnv = (name) => {
2
- const value = process.env[name];
3
- if (value === undefined) {
4
- throw new Error(`Missing environment variable \`${name}\``);
5
- }
6
- return value;
7
- };
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}