@convex-dev/better-auth 0.8.6 → 0.8.7

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 (228) hide show
  1. package/dist/commonjs/client/adapterUtils.js +1 -1
  2. package/dist/commonjs/client/adapterUtils.js.map +1 -1
  3. package/dist/commonjs/client/index.d.ts.map +1 -1
  4. package/dist/commonjs/client/index.js +2 -2
  5. package/dist/commonjs/client/index.js.map +1 -1
  6. package/dist/commonjs/plugins/cross-domain/index.d.ts +4 -3
  7. package/dist/commonjs/plugins/cross-domain/index.d.ts.map +1 -1
  8. package/dist/commonjs/plugins/cross-domain/index.js +20 -13
  9. package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
  10. package/dist/commonjs/react/index.d.ts +28 -7
  11. package/dist/commonjs/react/index.d.ts.map +1 -1
  12. package/dist/commonjs/react/index.js +59 -11
  13. package/dist/commonjs/react/index.js.map +1 -1
  14. package/dist/commonjs/{src/react/index.d.ts → react/old-index.d.ts} +1 -1
  15. package/dist/commonjs/react/old-index.d.ts.map +1 -0
  16. package/dist/commonjs/{src/react/index.js → react/old-index.js} +1 -1
  17. package/dist/commonjs/react/old-index.js.map +1 -0
  18. package/dist/esm/client/adapterUtils.js +1 -1
  19. package/dist/esm/client/adapterUtils.js.map +1 -1
  20. package/dist/esm/client/index.d.ts.map +1 -1
  21. package/dist/esm/client/index.js +2 -2
  22. package/dist/esm/client/index.js.map +1 -1
  23. package/dist/esm/plugins/cross-domain/index.d.ts +4 -3
  24. package/dist/esm/plugins/cross-domain/index.d.ts.map +1 -1
  25. package/dist/esm/plugins/cross-domain/index.js +20 -13
  26. package/dist/esm/plugins/cross-domain/index.js.map +1 -1
  27. package/dist/esm/react/index.d.ts +28 -7
  28. package/dist/esm/react/index.d.ts.map +1 -1
  29. package/dist/esm/react/index.js +59 -11
  30. package/dist/esm/react/index.js.map +1 -1
  31. package/dist/esm/{src/react/index.d.ts → react/old-index.d.ts} +1 -1
  32. package/dist/esm/react/old-index.d.ts.map +1 -0
  33. package/dist/esm/{src/react/index.js → react/old-index.js} +1 -1
  34. package/dist/esm/react/old-index.js.map +1 -0
  35. package/package.json +1 -1
  36. package/src/client/adapterUtils.ts +1 -1
  37. package/src/client/index.ts +2 -2
  38. package/src/plugins/cross-domain/index.ts +33 -20
  39. package/src/react/index.tsx +110 -28
  40. package/dist/commonjs/client/createSchemaInternal.d.ts +0 -24
  41. package/dist/commonjs/client/createSchemaInternal.d.ts.map +0 -1
  42. package/dist/commonjs/client/createSchemaInternal.js +0 -105
  43. package/dist/commonjs/client/createSchemaInternal.js.map +0 -1
  44. package/dist/commonjs/component/lib.d.ts +0 -432
  45. package/dist/commonjs/component/lib.d.ts.map +0 -1
  46. package/dist/commonjs/component/lib.js +0 -570
  47. package/dist/commonjs/component/lib.js.map +0 -1
  48. package/dist/commonjs/component/util.d.ts +0 -1406
  49. package/dist/commonjs/component/util.d.ts.map +0 -1
  50. package/dist/commonjs/component/util.js +0 -4
  51. package/dist/commonjs/component/util.js.map +0 -1
  52. package/dist/commonjs/src/auth.d.ts +0 -3085
  53. package/dist/commonjs/src/auth.d.ts.map +0 -1
  54. package/dist/commonjs/src/auth.js +0 -72
  55. package/dist/commonjs/src/auth.js.map +0 -1
  56. package/dist/commonjs/src/client/adapter.d.ts +0 -18
  57. package/dist/commonjs/src/client/adapter.d.ts.map +0 -1
  58. package/dist/commonjs/src/client/adapter.js +0 -211
  59. package/dist/commonjs/src/client/adapter.js.map +0 -1
  60. package/dist/commonjs/src/client/createSchema.d.ts +0 -25
  61. package/dist/commonjs/src/client/createSchema.d.ts.map +0 -1
  62. package/dist/commonjs/src/client/createSchema.js +0 -103
  63. package/dist/commonjs/src/client/createSchema.js.map +0 -1
  64. package/dist/commonjs/src/client/index.d.ts +0 -3310
  65. package/dist/commonjs/src/client/index.d.ts.map +0 -1
  66. package/dist/commonjs/src/client/index.js +0 -377
  67. package/dist/commonjs/src/client/index.js.map +0 -1
  68. package/dist/commonjs/src/client/plugins/index.d.ts +0 -3
  69. package/dist/commonjs/src/client/plugins/index.d.ts.map +0 -1
  70. package/dist/commonjs/src/client/plugins/index.js +0 -3
  71. package/dist/commonjs/src/client/plugins/index.js.map +0 -1
  72. package/dist/commonjs/src/component/_generated/api.d.ts +0 -12
  73. package/dist/commonjs/src/component/_generated/api.d.ts.map +0 -1
  74. package/dist/commonjs/src/component/_generated/api.js +0 -22
  75. package/dist/commonjs/src/component/_generated/api.js.map +0 -1
  76. package/dist/commonjs/src/component/_generated/server.d.ts +0 -64
  77. package/dist/commonjs/src/component/_generated/server.d.ts.map +0 -1
  78. package/dist/commonjs/src/component/_generated/server.js +0 -74
  79. package/dist/commonjs/src/component/_generated/server.js.map +0 -1
  80. package/dist/commonjs/src/component/adapter.d.ts +0 -355
  81. package/dist/commonjs/src/component/adapter.d.ts.map +0 -1
  82. package/dist/commonjs/src/component/adapter.js +0 -573
  83. package/dist/commonjs/src/component/adapter.js.map +0 -1
  84. package/dist/commonjs/src/component/adapterTest.d.ts +0 -18
  85. package/dist/commonjs/src/component/adapterTest.d.ts.map +0 -1
  86. package/dist/commonjs/src/component/adapterTest.js +0 -75
  87. package/dist/commonjs/src/component/adapterTest.js.map +0 -1
  88. package/dist/commonjs/src/component/convex.config.d.ts +0 -3
  89. package/dist/commonjs/src/component/convex.config.d.ts.map +0 -1
  90. package/dist/commonjs/src/component/convex.config.js +0 -4
  91. package/dist/commonjs/src/component/convex.config.js.map +0 -1
  92. package/dist/commonjs/src/component/schema.d.ts +0 -562
  93. package/dist/commonjs/src/component/schema.d.ts.map +0 -1
  94. package/dist/commonjs/src/component/schema.js +0 -217
  95. package/dist/commonjs/src/component/schema.js.map +0 -1
  96. package/dist/commonjs/src/nextjs/index.d.ts +0 -10
  97. package/dist/commonjs/src/nextjs/index.d.ts.map +0 -1
  98. package/dist/commonjs/src/nextjs/index.js +0 -43
  99. package/dist/commonjs/src/nextjs/index.js.map +0 -1
  100. package/dist/commonjs/src/plugins/convex/client.d.ts +0 -9
  101. package/dist/commonjs/src/plugins/convex/client.d.ts.map +0 -1
  102. package/dist/commonjs/src/plugins/convex/client.js +0 -7
  103. package/dist/commonjs/src/plugins/convex/client.js.map +0 -1
  104. package/dist/commonjs/src/plugins/convex/index.d.ts +0 -415
  105. package/dist/commonjs/src/plugins/convex/index.d.ts.map +0 -1
  106. package/dist/commonjs/src/plugins/convex/index.js +0 -354
  107. package/dist/commonjs/src/plugins/convex/index.js.map +0 -1
  108. package/dist/commonjs/src/plugins/cross-domain/client.d.ts +0 -132
  109. package/dist/commonjs/src/plugins/cross-domain/client.d.ts.map +0 -1
  110. package/dist/commonjs/src/plugins/cross-domain/client.js +0 -176
  111. package/dist/commonjs/src/plugins/cross-domain/client.js.map +0 -1
  112. package/dist/commonjs/src/plugins/cross-domain/index.d.ts +0 -83
  113. package/dist/commonjs/src/plugins/cross-domain/index.d.ts.map +0 -1
  114. package/dist/commonjs/src/plugins/cross-domain/index.js +0 -153
  115. package/dist/commonjs/src/plugins/cross-domain/index.js.map +0 -1
  116. package/dist/commonjs/src/plugins/index.d.ts +0 -3
  117. package/dist/commonjs/src/plugins/index.d.ts.map +0 -1
  118. package/dist/commonjs/src/plugins/index.js +0 -3
  119. package/dist/commonjs/src/plugins/index.js.map +0 -1
  120. package/dist/commonjs/src/react/client.d.ts +0 -31
  121. package/dist/commonjs/src/react/client.d.ts.map +0 -1
  122. package/dist/commonjs/src/react/client.js +0 -96
  123. package/dist/commonjs/src/react/client.js.map +0 -1
  124. package/dist/commonjs/src/react/index.d.ts.map +0 -1
  125. package/dist/commonjs/src/react/index.js.map +0 -1
  126. package/dist/commonjs/src/react-start/index.d.ts +0 -45
  127. package/dist/commonjs/src/react-start/index.d.ts.map +0 -1
  128. package/dist/commonjs/src/react-start/index.js +0 -60
  129. package/dist/commonjs/src/react-start/index.js.map +0 -1
  130. package/dist/commonjs/src/utils/index.d.ts +0 -9
  131. package/dist/commonjs/src/utils/index.d.ts.map +0 -1
  132. package/dist/commonjs/src/utils/index.js +0 -35
  133. package/dist/commonjs/src/utils/index.js.map +0 -1
  134. package/dist/esm/client/createSchemaInternal.d.ts +0 -24
  135. package/dist/esm/client/createSchemaInternal.d.ts.map +0 -1
  136. package/dist/esm/client/createSchemaInternal.js +0 -105
  137. package/dist/esm/client/createSchemaInternal.js.map +0 -1
  138. package/dist/esm/component/lib.d.ts +0 -432
  139. package/dist/esm/component/lib.d.ts.map +0 -1
  140. package/dist/esm/component/lib.js +0 -570
  141. package/dist/esm/component/lib.js.map +0 -1
  142. package/dist/esm/component/util.d.ts +0 -1406
  143. package/dist/esm/component/util.d.ts.map +0 -1
  144. package/dist/esm/component/util.js +0 -4
  145. package/dist/esm/component/util.js.map +0 -1
  146. package/dist/esm/src/auth.d.ts +0 -3085
  147. package/dist/esm/src/auth.d.ts.map +0 -1
  148. package/dist/esm/src/auth.js +0 -72
  149. package/dist/esm/src/auth.js.map +0 -1
  150. package/dist/esm/src/client/adapter.d.ts +0 -18
  151. package/dist/esm/src/client/adapter.d.ts.map +0 -1
  152. package/dist/esm/src/client/adapter.js +0 -211
  153. package/dist/esm/src/client/adapter.js.map +0 -1
  154. package/dist/esm/src/client/createSchema.d.ts +0 -25
  155. package/dist/esm/src/client/createSchema.d.ts.map +0 -1
  156. package/dist/esm/src/client/createSchema.js +0 -103
  157. package/dist/esm/src/client/createSchema.js.map +0 -1
  158. package/dist/esm/src/client/index.d.ts +0 -3310
  159. package/dist/esm/src/client/index.d.ts.map +0 -1
  160. package/dist/esm/src/client/index.js +0 -377
  161. package/dist/esm/src/client/index.js.map +0 -1
  162. package/dist/esm/src/client/plugins/index.d.ts +0 -3
  163. package/dist/esm/src/client/plugins/index.d.ts.map +0 -1
  164. package/dist/esm/src/client/plugins/index.js +0 -3
  165. package/dist/esm/src/client/plugins/index.js.map +0 -1
  166. package/dist/esm/src/component/_generated/api.d.ts +0 -12
  167. package/dist/esm/src/component/_generated/api.d.ts.map +0 -1
  168. package/dist/esm/src/component/_generated/api.js +0 -22
  169. package/dist/esm/src/component/_generated/api.js.map +0 -1
  170. package/dist/esm/src/component/_generated/server.d.ts +0 -64
  171. package/dist/esm/src/component/_generated/server.d.ts.map +0 -1
  172. package/dist/esm/src/component/_generated/server.js +0 -74
  173. package/dist/esm/src/component/_generated/server.js.map +0 -1
  174. package/dist/esm/src/component/adapter.d.ts +0 -355
  175. package/dist/esm/src/component/adapter.d.ts.map +0 -1
  176. package/dist/esm/src/component/adapter.js +0 -573
  177. package/dist/esm/src/component/adapter.js.map +0 -1
  178. package/dist/esm/src/component/adapterTest.d.ts +0 -18
  179. package/dist/esm/src/component/adapterTest.d.ts.map +0 -1
  180. package/dist/esm/src/component/adapterTest.js +0 -75
  181. package/dist/esm/src/component/adapterTest.js.map +0 -1
  182. package/dist/esm/src/component/convex.config.d.ts +0 -3
  183. package/dist/esm/src/component/convex.config.d.ts.map +0 -1
  184. package/dist/esm/src/component/convex.config.js +0 -4
  185. package/dist/esm/src/component/convex.config.js.map +0 -1
  186. package/dist/esm/src/component/schema.d.ts +0 -562
  187. package/dist/esm/src/component/schema.d.ts.map +0 -1
  188. package/dist/esm/src/component/schema.js +0 -217
  189. package/dist/esm/src/component/schema.js.map +0 -1
  190. package/dist/esm/src/nextjs/index.d.ts +0 -10
  191. package/dist/esm/src/nextjs/index.d.ts.map +0 -1
  192. package/dist/esm/src/nextjs/index.js +0 -43
  193. package/dist/esm/src/nextjs/index.js.map +0 -1
  194. package/dist/esm/src/plugins/convex/client.d.ts +0 -9
  195. package/dist/esm/src/plugins/convex/client.d.ts.map +0 -1
  196. package/dist/esm/src/plugins/convex/client.js +0 -7
  197. package/dist/esm/src/plugins/convex/client.js.map +0 -1
  198. package/dist/esm/src/plugins/convex/index.d.ts +0 -415
  199. package/dist/esm/src/plugins/convex/index.d.ts.map +0 -1
  200. package/dist/esm/src/plugins/convex/index.js +0 -354
  201. package/dist/esm/src/plugins/convex/index.js.map +0 -1
  202. package/dist/esm/src/plugins/cross-domain/client.d.ts +0 -132
  203. package/dist/esm/src/plugins/cross-domain/client.d.ts.map +0 -1
  204. package/dist/esm/src/plugins/cross-domain/client.js +0 -176
  205. package/dist/esm/src/plugins/cross-domain/client.js.map +0 -1
  206. package/dist/esm/src/plugins/cross-domain/index.d.ts +0 -83
  207. package/dist/esm/src/plugins/cross-domain/index.d.ts.map +0 -1
  208. package/dist/esm/src/plugins/cross-domain/index.js +0 -153
  209. package/dist/esm/src/plugins/cross-domain/index.js.map +0 -1
  210. package/dist/esm/src/plugins/index.d.ts +0 -3
  211. package/dist/esm/src/plugins/index.d.ts.map +0 -1
  212. package/dist/esm/src/plugins/index.js +0 -3
  213. package/dist/esm/src/plugins/index.js.map +0 -1
  214. package/dist/esm/src/react/client.d.ts +0 -31
  215. package/dist/esm/src/react/client.d.ts.map +0 -1
  216. package/dist/esm/src/react/client.js +0 -96
  217. package/dist/esm/src/react/client.js.map +0 -1
  218. package/dist/esm/src/react/index.d.ts.map +0 -1
  219. package/dist/esm/src/react/index.js.map +0 -1
  220. package/dist/esm/src/react-start/index.d.ts +0 -45
  221. package/dist/esm/src/react-start/index.d.ts.map +0 -1
  222. package/dist/esm/src/react-start/index.js +0 -60
  223. package/dist/esm/src/react-start/index.js.map +0 -1
  224. package/dist/esm/src/utils/index.d.ts +0 -9
  225. package/dist/esm/src/utils/index.d.ts.map +0 -1
  226. package/dist/esm/src/utils/index.js +0 -35
  227. package/dist/esm/src/utils/index.js.map +0 -1
  228. package/src/react/client.tsx +0 -178
@@ -1,3 +1,4 @@
1
+ import { HookEndpointContext } from "better-auth";
1
2
  import { setSessionCookie } from "better-auth/cookies";
2
3
  import { generateRandomString } from "better-auth/crypto";
3
4
  import {
@@ -19,6 +20,10 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
19
20
  return new URL(relativeCallbackURL, siteUrl).toString();
20
21
  };
21
22
 
23
+ const isExpoNative = (ctx: HookEndpointContext) => {
24
+ return ctx.headers?.has("expo-origin");
25
+ };
26
+
22
27
  return {
23
28
  id: "cross-domain",
24
29
  // TODO: remove this in the next minor release, it doesn't
@@ -35,15 +40,17 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
35
40
  hooks: {
36
41
  before: [
37
42
  {
38
- matcher(context) {
39
- return Boolean(
40
- context.request?.headers.get("better-auth-cookie") ||
41
- context.headers?.get("better-auth-cookie")
43
+ matcher(ctx) {
44
+ return (
45
+ Boolean(
46
+ ctx.request?.headers.get("better-auth-cookie") ||
47
+ ctx.headers?.get("better-auth-cookie")
48
+ ) && !isExpoNative(ctx)
42
49
  );
43
50
  },
44
- handler: createAuthMiddleware(async (c) => {
45
- const existingHeaders = (c.request?.headers ||
46
- c.headers) as Headers;
51
+ handler: createAuthMiddleware(async (ctx) => {
52
+ const existingHeaders = (ctx.request?.headers ||
53
+ ctx.headers) as Headers;
47
54
  const headers = new Headers({
48
55
  ...Object.fromEntries(existingHeaders?.entries()),
49
56
  });
@@ -65,7 +72,11 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
65
72
  },
66
73
  {
67
74
  matcher: (ctx) => {
68
- return ctx.method === "GET" && ctx.path.startsWith("/verify-email");
75
+ return (
76
+ ctx.method === "GET" &&
77
+ ctx.path.startsWith("/verify-email") &&
78
+ !isExpoNative(ctx)
79
+ );
69
80
  },
70
81
  handler: createAuthMiddleware(async (ctx) => {
71
82
  if (ctx.query?.callbackURL) {
@@ -77,13 +88,14 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
77
88
  {
78
89
  matcher: (ctx) => {
79
90
  return (
80
- (ctx.method === "POST" && ctx.path.startsWith("/link-social")) ||
81
- ctx.path.startsWith("/send-verification-email") ||
82
- ctx.path.startsWith("/sign-in/email") ||
83
- ctx.path.startsWith("/sign-in/social") ||
84
- ctx.path.startsWith("/sign-in/magic-link") ||
85
- ctx.path.startsWith("/delete-user") ||
86
- ctx.path.startsWith("/change-email")
91
+ ((ctx.method === "POST" && ctx.path.startsWith("/link-social")) ||
92
+ ctx.path.startsWith("/send-verification-email") ||
93
+ ctx.path.startsWith("/sign-in/email") ||
94
+ ctx.path.startsWith("/sign-in/social") ||
95
+ ctx.path.startsWith("/sign-in/magic-link") ||
96
+ ctx.path.startsWith("/delete-user") ||
97
+ ctx.path.startsWith("/change-email")) &&
98
+ !isExpoNative(ctx)
87
99
  );
88
100
  },
89
101
  handler: createAuthMiddleware(async (ctx) => {
@@ -105,8 +117,8 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
105
117
  ],
106
118
  after: [
107
119
  {
108
- matcher() {
109
- return true;
120
+ matcher(ctx) {
121
+ return !isExpoNative(ctx);
110
122
  },
111
123
  handler: createAuthMiddleware(async (ctx) => {
112
124
  const setCookie = ctx.context.responseHeaders?.get("set-cookie");
@@ -120,9 +132,10 @@ export const crossDomain = ({ siteUrl }: { siteUrl: string }) => {
120
132
  {
121
133
  matcher: (ctx) => {
122
134
  return (
123
- ctx.path?.startsWith("/callback") ||
124
- ctx.path?.startsWith("/oauth2/callback") ||
125
- ctx.path?.startsWith("/magic-link/verify")
135
+ (ctx.path?.startsWith("/callback") ||
136
+ ctx.path?.startsWith("/oauth2/callback") ||
137
+ ctx.path?.startsWith("/magic-link/verify")) &&
138
+ !isExpoNative(ctx)
126
139
  );
127
140
  },
128
141
  handler: createAuthMiddleware(async (ctx) => {
@@ -1,38 +1,120 @@
1
- "use client";
1
+ import { useEffect } from "react";
2
2
 
3
- import { ConvexProviderWithAuth, ConvexReactClient } from "convex/react";
4
- import { PropsWithChildren, useMemo } from "react";
5
- import {
6
- AuthClient,
7
- AuthProvider,
8
- useAuth,
9
- type ConvexAuthClient,
10
- } from "./client";
3
+ import { ReactNode, useCallback, useMemo } from "react";
4
+ import { AuthTokenFetcher } from "convex/browser";
5
+ import { ConvexProviderWithAuth } from "convex/react";
6
+ import { BetterAuthClientPlugin, ClientOptions } from "better-auth";
7
+ import { createAuthClient } from "better-auth/react";
8
+ import { convexClient, crossDomainClient } from "../client/plugins";
11
9
 
10
+ type CrossDomainClient = ReturnType<typeof crossDomainClient>;
11
+ type ConvexClient = ReturnType<typeof convexClient>;
12
+ type PluginsWithCrossDomain = (
13
+ | CrossDomainClient
14
+ | ConvexClient
15
+ | BetterAuthClientPlugin
16
+ )[];
17
+ type PluginsWithoutCrossDomain = (ConvexClient | BetterAuthClientPlugin)[];
18
+ type AuthClientWithPlugins<
19
+ Plugins extends PluginsWithCrossDomain | PluginsWithoutCrossDomain,
20
+ > = ReturnType<
21
+ typeof createAuthClient<
22
+ ClientOptions & {
23
+ plugins: Plugins;
24
+ }
25
+ >
26
+ >;
27
+ export type AuthClient =
28
+ | AuthClientWithPlugins<PluginsWithCrossDomain>
29
+ | AuthClientWithPlugins<PluginsWithoutCrossDomain>;
30
+
31
+ // Until we can import from our own entry points (requires TypeScript 4.7),
32
+ // just describe the interface enough to help users pass the right type.
33
+ type IConvexReactClient = {
34
+ setAuth(fetchToken: AuthTokenFetcher): void;
35
+ clearAuth(): void;
36
+ };
37
+
38
+ /**
39
+ * A wrapper React component which provides a {@link react.ConvexReactClient}
40
+ * authenticated with Better Auth.
41
+ *
42
+ * @public
43
+ */
12
44
  export function ConvexBetterAuthProvider({
45
+ children,
13
46
  client,
14
47
  authClient,
15
- children,
16
- }: PropsWithChildren<{
17
- client: ConvexReactClient;
48
+ }: {
49
+ children: ReactNode;
50
+ client: IConvexReactClient;
18
51
  authClient: AuthClient;
19
- }>) {
20
- const convexAuthClient = useMemo(
21
- () =>
22
- ({
23
- verbose: (client as any).options?.verbose,
24
- logger: client.logger,
25
- }) satisfies ConvexAuthClient,
26
- [client]
27
- );
52
+ }) {
53
+ const useBetterAuth = useUseAuthFromBetterAuth(authClient);
54
+
55
+ useEffect(() => {
56
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
57
+ (async () => {
58
+ const url = new URL(window.location?.href);
59
+ const token = url.searchParams.get("ott");
60
+ if (token) {
61
+ const authClientWithCrossDomain =
62
+ authClient as AuthClientWithPlugins<PluginsWithCrossDomain>;
63
+ url.searchParams.delete("ott");
64
+ const result =
65
+ await authClientWithCrossDomain.crossDomain.oneTimeToken.verify({
66
+ token,
67
+ });
68
+ const session = result.data?.session;
69
+ if (session) {
70
+ await authClient.getSession({
71
+ fetchOptions: {
72
+ headers: {
73
+ Authorization: `Bearer ${session.token}`,
74
+ },
75
+ },
76
+ });
77
+ authClientWithCrossDomain.updateSession();
78
+ }
79
+ window.history.replaceState({}, "", url);
80
+ }
81
+ })();
82
+ }, [authClient]);
28
83
  return (
29
- <AuthProvider client={convexAuthClient} authClient={authClient}>
30
- <ConvexProviderWithAuth client={client} useAuth={useAuth}>
31
- {children}
32
- </ConvexProviderWithAuth>
33
- </AuthProvider>
84
+ <ConvexProviderWithAuth client={client} useAuth={useBetterAuth}>
85
+ {children}
86
+ </ConvexProviderWithAuth>
34
87
  );
35
88
  }
36
89
 
37
- // TODO: Remove, short-lived alias
38
- export { ConvexBetterAuthProvider as ConvexProviderWithBetterAuth };
90
+ function useUseAuthFromBetterAuth(authClient: AuthClient) {
91
+ return useMemo(
92
+ () =>
93
+ function useAuthFromBetterAuth() {
94
+ const { data: session, isPending: isSessionPending } =
95
+ authClient.useSession();
96
+ const fetchAccessToken = useCallback(
97
+ async () => {
98
+ try {
99
+ const { data } = await authClient.convex.token();
100
+ return data?.token || null;
101
+ } catch {
102
+ return null;
103
+ }
104
+ },
105
+ // Build a new fetchAccessToken to trigger setAuth() whenever the
106
+ // session changes.
107
+ [session]
108
+ );
109
+ return useMemo(
110
+ () => ({
111
+ isLoading: isSessionPending,
112
+ isAuthenticated: session !== null,
113
+ fetchAccessToken,
114
+ }),
115
+ [isSessionPending, session, fetchAccessToken]
116
+ );
117
+ },
118
+ [authClient]
119
+ );
120
+ }
@@ -1,24 +0,0 @@
1
- import { BetterAuthDbSchema } from "better-auth/db";
2
- export declare const indexFields: {
3
- account: (string | string[])[];
4
- rateLimit: string[];
5
- session: (string | string[])[];
6
- verification: string[];
7
- user: (string | string[])[];
8
- passkey: string[];
9
- apikey: string[];
10
- member: string[][];
11
- invitation: string[][];
12
- oauthConsent: string[][];
13
- ssoProvider: string[];
14
- subscription: string[];
15
- };
16
- export declare const createSchema: ({ file, tables, }: {
17
- tables: BetterAuthDbSchema;
18
- file?: string;
19
- }) => Promise<{
20
- code: string;
21
- path: string;
22
- overwrite: boolean;
23
- }>;
24
- //# sourceMappingURL=createSchemaInternal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSchemaInternal.d.ts","sourceRoot":"","sources":["../../../src/client/createSchemaInternal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,gBAAgB,CAAC;AAIzE,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAgBvB,CAAC;AA6CF,eAAO,MAAM,YAAY,GAAU,mBAGhC;IACD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;;EAmFA,CAAC"}
@@ -1,105 +0,0 @@
1
- // Manually add fields to index on for schema generation,
2
- // all fields in the schema specialFields are automatically indexed
3
- export const indexFields = {
4
- account: ["accountId", ["accountId", "providerId"], ["providerId", "userId"]],
5
- rateLimit: ["key"],
6
- session: ["expiresAt", ["expiresAt", "userId"]],
7
- verification: ["expiresAt", "identifier"],
8
- user: [["email", "name"], "name", "userId"],
9
- passkey: ["credentialID"],
10
- apikey: ["key"],
11
- member: [["organizationId", "userId"]],
12
- invitation: [
13
- ["email", "organizationId", "status"],
14
- ["organizationId", "status"],
15
- ],
16
- oauthConsent: [["clientId", "userId"]],
17
- ssoProvider: ["organizationId", "domain"],
18
- subscription: ["stripeSubscriptionId", "stripeCustomerId", "referenceId"],
19
- };
20
- // Return map of unique, sortable, and reference fields
21
- const specialFields = (tables) => Object.fromEntries(Object.entries(tables)
22
- .map(([key, table]) => {
23
- const fields = Object.fromEntries(Object.entries(table.fields)
24
- .map(([fieldKey, field]) => [
25
- fieldKey,
26
- {
27
- ...(field.sortable ? { sortable: true } : {}),
28
- ...(field.unique ? { unique: true } : {}),
29
- ...(field.references ? { references: field.references } : {}),
30
- },
31
- ])
32
- .filter(([_key, value]) => typeof value === "object" ? Object.keys(value).length > 0 : true));
33
- return [key, fields];
34
- })
35
- .filter(([_key, value]) => typeof value === "object" ? Object.keys(value).length > 0 : true));
36
- const mergedIndexFields = (tables) => Object.fromEntries(Object.entries(tables).map(([key]) => {
37
- const manualIndexes = indexFields[key] || [];
38
- const specialFieldIndexes = Object.keys(specialFields(tables)[key] ||
39
- {}).filter((index) => !manualIndexes.some((m) => Array.isArray(m) ? m[0] === index : m === index));
40
- return [key, manualIndexes.concat(specialFieldIndexes)];
41
- }));
42
- export const createSchema = async ({ file, tables, }) => {
43
- const path = await import("path");
44
- const baseName = path.basename(process.cwd());
45
- if (baseName === "convex") {
46
- throw new Error("Better Auth schema must be generated in the Better Auth component directory.");
47
- }
48
- let code = `// This file is auto-generated. Do not edit this file manually.
49
- // To regenerate the schema, run:
50
- // \`npx @better-auth/cli generate --output ${file} -y\`
51
-
52
- import { defineSchema, defineTable } from "convex/server";
53
- import { v } from "convex/values";
54
-
55
- export const tables = {
56
- `;
57
- for (const tableKey in tables) {
58
- const table = tables[tableKey];
59
- const modelName = table.modelName;
60
- // No id fields in Convex schema
61
- const fields = Object.fromEntries(Object.entries(table.fields).filter(([key]) => key !== "id"));
62
- function getType(name, field) {
63
- const type = field.type;
64
- const typeMap = {
65
- string: `v.string()`,
66
- boolean: `v.boolean()`,
67
- number: `v.number()`,
68
- date: `v.number()`,
69
- "number[]": `v.array(v.number())`,
70
- "string[]": `v.array(v.string())`,
71
- };
72
- return typeMap[type];
73
- }
74
- const indexes = mergedIndexFields(tables)[modelName]?.map((index) => {
75
- const indexArray = Array.isArray(index) ? index.sort() : [index];
76
- const indexName = indexArray.join("_");
77
- return `.index("${indexName}", ${JSON.stringify(indexArray)})`;
78
- }) || [];
79
- const schema = `${modelName}: defineTable({
80
- ${Object.keys(fields)
81
- .map((field) => {
82
- const attr = fields[field];
83
- const type = getType(field, attr);
84
- const optional = (fieldSchema) => attr.required
85
- ? fieldSchema
86
- : `v.optional(v.union(v.null(), ${fieldSchema}))`;
87
- return ` ${field}: ${optional(type)},`;
88
- })
89
- .join("\n")}
90
- })${indexes.length > 0 ? `\n ${indexes.join("\n ")}` : ""},\n`;
91
- code += ` ${schema}`;
92
- }
93
- code += `};
94
-
95
- const schema = defineSchema(tables);
96
-
97
- export default schema;
98
- `;
99
- return {
100
- code,
101
- path: file ?? "./schema.ts",
102
- overwrite: true,
103
- };
104
- };
105
- //# sourceMappingURL=createSchemaInternal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSchemaInternal.js","sourceRoot":"","sources":["../../../src/client/createSchemaInternal.ts"],"names":[],"mappings":"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"}