@convex-dev/better-auth 0.8.0-alpha.8 → 0.8.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 (291) hide show
  1. package/dist/commonjs/auth.d.ts +4 -0
  2. package/dist/commonjs/auth.d.ts.map +1 -0
  3. package/dist/commonjs/auth.js +44 -0
  4. package/dist/commonjs/auth.js.map +1 -0
  5. package/dist/commonjs/client/adapter.d.ts +8 -10
  6. package/dist/commonjs/client/adapter.d.ts.map +1 -1
  7. package/dist/commonjs/client/adapter.js +48 -32
  8. package/dist/commonjs/client/adapter.js.map +1 -1
  9. package/dist/commonjs/client/adapterUtils.d.ts +66 -0
  10. package/dist/commonjs/client/adapterUtils.d.ts.map +1 -0
  11. package/dist/commonjs/client/adapterUtils.js +429 -0
  12. package/dist/commonjs/client/adapterUtils.js.map +1 -0
  13. package/dist/commonjs/client/createSchema.d.ts +24 -0
  14. package/dist/commonjs/client/createSchema.d.ts.map +1 -0
  15. package/dist/commonjs/client/createSchema.js +101 -0
  16. package/dist/commonjs/client/createSchema.js.map +1 -0
  17. package/dist/commonjs/client/index.d.ts +449 -599
  18. package/dist/commonjs/client/index.d.ts.map +1 -1
  19. package/dist/commonjs/client/index.js +339 -212
  20. package/dist/commonjs/client/index.js.map +1 -1
  21. package/dist/commonjs/component/adapter.d.ts +128 -0
  22. package/dist/commonjs/component/adapter.d.ts.map +1 -0
  23. package/dist/commonjs/component/adapter.js +5 -0
  24. package/dist/commonjs/component/adapter.js.map +1 -0
  25. package/dist/commonjs/component/adapterTest.d.ts +3 -5
  26. package/dist/commonjs/component/adapterTest.d.ts.map +1 -1
  27. package/dist/commonjs/component/adapterTest.js +3 -17
  28. package/dist/commonjs/component/adapterTest.js.map +1 -1
  29. package/dist/commonjs/component/lib.d.ts +4 -2
  30. package/dist/commonjs/component/lib.d.ts.map +1 -1
  31. package/dist/commonjs/component/schema.d.ts +464 -175
  32. package/dist/commonjs/component/schema.d.ts.map +1 -1
  33. package/dist/commonjs/component/schema.js +74 -158
  34. package/dist/commonjs/component/schema.js.map +1 -1
  35. package/dist/commonjs/component/util.d.ts +31 -11
  36. package/dist/commonjs/component/util.d.ts.map +1 -1
  37. package/dist/commonjs/nextjs/index.d.ts +1 -2
  38. package/dist/commonjs/nextjs/index.d.ts.map +1 -1
  39. package/dist/commonjs/nextjs/index.js +3 -2
  40. package/dist/commonjs/nextjs/index.js.map +1 -1
  41. package/dist/commonjs/plugins/convex/client.d.ts +2 -5
  42. package/dist/commonjs/plugins/convex/client.d.ts.map +1 -1
  43. package/dist/commonjs/plugins/convex/client.js.map +1 -1
  44. package/dist/commonjs/plugins/convex/index.d.ts +13 -144
  45. package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
  46. package/dist/commonjs/plugins/convex/index.js +11 -125
  47. package/dist/commonjs/plugins/convex/index.js.map +1 -1
  48. package/dist/commonjs/plugins/cross-domain/index.js +2 -2
  49. package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
  50. package/dist/commonjs/react-start/index.d.ts +17 -36
  51. package/dist/commonjs/react-start/index.d.ts.map +1 -1
  52. package/dist/commonjs/react-start/index.js +43 -31
  53. package/dist/commonjs/react-start/index.js.map +1 -1
  54. package/dist/commonjs/src/auth.d.ts +3085 -0
  55. package/dist/commonjs/src/auth.d.ts.map +1 -0
  56. package/dist/commonjs/src/auth.js +72 -0
  57. package/dist/commonjs/src/auth.js.map +1 -0
  58. package/dist/commonjs/src/client/adapter.d.ts +18 -0
  59. package/dist/commonjs/src/client/adapter.d.ts.map +1 -0
  60. package/dist/commonjs/src/client/adapter.js +211 -0
  61. package/dist/commonjs/src/client/adapter.js.map +1 -0
  62. package/dist/commonjs/src/client/createSchema.d.ts +25 -0
  63. package/dist/commonjs/src/client/createSchema.d.ts.map +1 -0
  64. package/dist/commonjs/src/client/createSchema.js +103 -0
  65. package/dist/commonjs/src/client/createSchema.js.map +1 -0
  66. package/dist/commonjs/src/client/index.d.ts +3310 -0
  67. package/dist/commonjs/src/client/index.d.ts.map +1 -0
  68. package/dist/commonjs/src/client/index.js +377 -0
  69. package/dist/commonjs/src/client/index.js.map +1 -0
  70. package/dist/commonjs/src/client/plugins/index.d.ts +3 -0
  71. package/dist/commonjs/src/client/plugins/index.d.ts.map +1 -0
  72. package/dist/commonjs/src/client/plugins/index.js +3 -0
  73. package/dist/commonjs/src/client/plugins/index.js.map +1 -0
  74. package/dist/commonjs/src/component/_generated/api.d.ts +12 -0
  75. package/dist/commonjs/src/component/_generated/api.d.ts.map +1 -0
  76. package/dist/commonjs/src/component/_generated/api.js +22 -0
  77. package/dist/commonjs/src/component/_generated/api.js.map +1 -0
  78. package/dist/commonjs/src/component/_generated/server.d.ts +64 -0
  79. package/dist/commonjs/src/component/_generated/server.d.ts.map +1 -0
  80. package/dist/commonjs/src/component/_generated/server.js +74 -0
  81. package/dist/commonjs/src/component/_generated/server.js.map +1 -0
  82. package/dist/commonjs/src/component/adapter.d.ts +355 -0
  83. package/dist/commonjs/src/component/adapter.d.ts.map +1 -0
  84. package/dist/commonjs/src/component/adapter.js +573 -0
  85. package/dist/commonjs/src/component/adapter.js.map +1 -0
  86. package/dist/commonjs/src/component/adapterTest.d.ts +18 -0
  87. package/dist/commonjs/src/component/adapterTest.d.ts.map +1 -0
  88. package/dist/commonjs/src/component/adapterTest.js +75 -0
  89. package/dist/commonjs/src/component/adapterTest.js.map +1 -0
  90. package/dist/commonjs/src/component/convex.config.d.ts +3 -0
  91. package/dist/commonjs/src/component/convex.config.d.ts.map +1 -0
  92. package/dist/commonjs/src/component/convex.config.js +4 -0
  93. package/dist/commonjs/src/component/convex.config.js.map +1 -0
  94. package/dist/commonjs/src/component/schema.d.ts +562 -0
  95. package/dist/commonjs/src/component/schema.d.ts.map +1 -0
  96. package/dist/commonjs/src/component/schema.js +217 -0
  97. package/dist/commonjs/src/component/schema.js.map +1 -0
  98. package/dist/commonjs/src/nextjs/index.d.ts +10 -0
  99. package/dist/commonjs/src/nextjs/index.d.ts.map +1 -0
  100. package/dist/commonjs/src/nextjs/index.js +43 -0
  101. package/dist/commonjs/src/nextjs/index.js.map +1 -0
  102. package/dist/commonjs/src/plugins/convex/client.d.ts +9 -0
  103. package/dist/commonjs/src/plugins/convex/client.d.ts.map +1 -0
  104. package/dist/commonjs/src/plugins/convex/client.js +7 -0
  105. package/dist/commonjs/src/plugins/convex/client.js.map +1 -0
  106. package/dist/commonjs/src/plugins/convex/index.d.ts +415 -0
  107. package/dist/commonjs/src/plugins/convex/index.d.ts.map +1 -0
  108. package/dist/commonjs/src/plugins/convex/index.js +354 -0
  109. package/dist/commonjs/src/plugins/convex/index.js.map +1 -0
  110. package/dist/commonjs/src/plugins/cross-domain/client.d.ts +132 -0
  111. package/dist/commonjs/src/plugins/cross-domain/client.d.ts.map +1 -0
  112. package/dist/commonjs/src/plugins/cross-domain/client.js +176 -0
  113. package/dist/commonjs/src/plugins/cross-domain/client.js.map +1 -0
  114. package/dist/commonjs/src/plugins/cross-domain/index.d.ts +83 -0
  115. package/dist/commonjs/src/plugins/cross-domain/index.d.ts.map +1 -0
  116. package/dist/commonjs/src/plugins/cross-domain/index.js +153 -0
  117. package/dist/commonjs/src/plugins/cross-domain/index.js.map +1 -0
  118. package/dist/commonjs/src/plugins/index.d.ts +3 -0
  119. package/dist/commonjs/src/plugins/index.d.ts.map +1 -0
  120. package/dist/commonjs/src/plugins/index.js +3 -0
  121. package/dist/commonjs/src/plugins/index.js.map +1 -0
  122. package/dist/commonjs/src/react/client.d.ts +31 -0
  123. package/dist/commonjs/src/react/client.d.ts.map +1 -0
  124. package/dist/commonjs/src/react/client.js +96 -0
  125. package/dist/commonjs/src/react/client.js.map +1 -0
  126. package/dist/commonjs/src/react/index.d.ts +9 -0
  127. package/dist/commonjs/src/react/index.d.ts.map +1 -0
  128. package/dist/commonjs/src/react/index.js +15 -0
  129. package/dist/commonjs/src/react/index.js.map +1 -0
  130. package/dist/commonjs/src/react-start/index.d.ts +45 -0
  131. package/dist/commonjs/src/react-start/index.d.ts.map +1 -0
  132. package/dist/commonjs/src/react-start/index.js +60 -0
  133. package/dist/commonjs/src/react-start/index.js.map +1 -0
  134. package/dist/commonjs/src/utils/index.d.ts +9 -0
  135. package/dist/commonjs/src/utils/index.d.ts.map +1 -0
  136. package/dist/commonjs/src/utils/index.js +35 -0
  137. package/dist/commonjs/src/utils/index.js.map +1 -0
  138. package/dist/esm/auth.d.ts +4 -0
  139. package/dist/esm/auth.d.ts.map +1 -0
  140. package/dist/esm/auth.js +44 -0
  141. package/dist/esm/auth.js.map +1 -0
  142. package/dist/esm/client/adapter.d.ts +8 -10
  143. package/dist/esm/client/adapter.d.ts.map +1 -1
  144. package/dist/esm/client/adapter.js +48 -32
  145. package/dist/esm/client/adapter.js.map +1 -1
  146. package/dist/esm/client/adapterUtils.d.ts +66 -0
  147. package/dist/esm/client/adapterUtils.d.ts.map +1 -0
  148. package/dist/esm/client/adapterUtils.js +429 -0
  149. package/dist/esm/client/adapterUtils.js.map +1 -0
  150. package/dist/esm/client/createSchema.d.ts +24 -0
  151. package/dist/esm/client/createSchema.d.ts.map +1 -0
  152. package/dist/esm/client/createSchema.js +101 -0
  153. package/dist/esm/client/createSchema.js.map +1 -0
  154. package/dist/esm/client/index.d.ts +449 -599
  155. package/dist/esm/client/index.d.ts.map +1 -1
  156. package/dist/esm/client/index.js +339 -212
  157. package/dist/esm/client/index.js.map +1 -1
  158. package/dist/esm/component/adapter.d.ts +128 -0
  159. package/dist/esm/component/adapter.d.ts.map +1 -0
  160. package/dist/esm/component/adapter.js +5 -0
  161. package/dist/esm/component/adapter.js.map +1 -0
  162. package/dist/esm/component/adapterTest.d.ts +3 -5
  163. package/dist/esm/component/adapterTest.d.ts.map +1 -1
  164. package/dist/esm/component/adapterTest.js +3 -17
  165. package/dist/esm/component/adapterTest.js.map +1 -1
  166. package/dist/esm/component/lib.d.ts +4 -2
  167. package/dist/esm/component/lib.d.ts.map +1 -1
  168. package/dist/esm/component/schema.d.ts +464 -175
  169. package/dist/esm/component/schema.d.ts.map +1 -1
  170. package/dist/esm/component/schema.js +74 -158
  171. package/dist/esm/component/schema.js.map +1 -1
  172. package/dist/esm/component/util.d.ts +31 -11
  173. package/dist/esm/component/util.d.ts.map +1 -1
  174. package/dist/esm/nextjs/index.d.ts +1 -2
  175. package/dist/esm/nextjs/index.d.ts.map +1 -1
  176. package/dist/esm/nextjs/index.js +3 -2
  177. package/dist/esm/nextjs/index.js.map +1 -1
  178. package/dist/esm/plugins/convex/client.d.ts +2 -5
  179. package/dist/esm/plugins/convex/client.d.ts.map +1 -1
  180. package/dist/esm/plugins/convex/client.js.map +1 -1
  181. package/dist/esm/plugins/convex/index.d.ts +13 -144
  182. package/dist/esm/plugins/convex/index.d.ts.map +1 -1
  183. package/dist/esm/plugins/convex/index.js +11 -125
  184. package/dist/esm/plugins/convex/index.js.map +1 -1
  185. package/dist/esm/plugins/cross-domain/index.js +2 -2
  186. package/dist/esm/plugins/cross-domain/index.js.map +1 -1
  187. package/dist/esm/react-start/index.d.ts +17 -36
  188. package/dist/esm/react-start/index.d.ts.map +1 -1
  189. package/dist/esm/react-start/index.js +43 -31
  190. package/dist/esm/react-start/index.js.map +1 -1
  191. package/dist/esm/src/auth.d.ts +3085 -0
  192. package/dist/esm/src/auth.d.ts.map +1 -0
  193. package/dist/esm/src/auth.js +72 -0
  194. package/dist/esm/src/auth.js.map +1 -0
  195. package/dist/esm/src/client/adapter.d.ts +18 -0
  196. package/dist/esm/src/client/adapter.d.ts.map +1 -0
  197. package/dist/esm/src/client/adapter.js +211 -0
  198. package/dist/esm/src/client/adapter.js.map +1 -0
  199. package/dist/esm/src/client/createSchema.d.ts +25 -0
  200. package/dist/esm/src/client/createSchema.d.ts.map +1 -0
  201. package/dist/esm/src/client/createSchema.js +103 -0
  202. package/dist/esm/src/client/createSchema.js.map +1 -0
  203. package/dist/esm/src/client/index.d.ts +3310 -0
  204. package/dist/esm/src/client/index.d.ts.map +1 -0
  205. package/dist/esm/src/client/index.js +377 -0
  206. package/dist/esm/src/client/index.js.map +1 -0
  207. package/dist/esm/src/client/plugins/index.d.ts +3 -0
  208. package/dist/esm/src/client/plugins/index.d.ts.map +1 -0
  209. package/dist/esm/src/client/plugins/index.js +3 -0
  210. package/dist/esm/src/client/plugins/index.js.map +1 -0
  211. package/dist/esm/src/component/_generated/api.d.ts +12 -0
  212. package/dist/esm/src/component/_generated/api.d.ts.map +1 -0
  213. package/dist/esm/src/component/_generated/api.js +22 -0
  214. package/dist/esm/src/component/_generated/api.js.map +1 -0
  215. package/dist/esm/src/component/_generated/server.d.ts +64 -0
  216. package/dist/esm/src/component/_generated/server.d.ts.map +1 -0
  217. package/dist/esm/src/component/_generated/server.js +74 -0
  218. package/dist/esm/src/component/_generated/server.js.map +1 -0
  219. package/dist/esm/src/component/adapter.d.ts +355 -0
  220. package/dist/esm/src/component/adapter.d.ts.map +1 -0
  221. package/dist/esm/src/component/adapter.js +573 -0
  222. package/dist/esm/src/component/adapter.js.map +1 -0
  223. package/dist/esm/src/component/adapterTest.d.ts +18 -0
  224. package/dist/esm/src/component/adapterTest.d.ts.map +1 -0
  225. package/dist/esm/src/component/adapterTest.js +75 -0
  226. package/dist/esm/src/component/adapterTest.js.map +1 -0
  227. package/dist/esm/src/component/convex.config.d.ts +3 -0
  228. package/dist/esm/src/component/convex.config.d.ts.map +1 -0
  229. package/dist/esm/src/component/convex.config.js +4 -0
  230. package/dist/esm/src/component/convex.config.js.map +1 -0
  231. package/dist/esm/src/component/schema.d.ts +562 -0
  232. package/dist/esm/src/component/schema.d.ts.map +1 -0
  233. package/dist/esm/src/component/schema.js +217 -0
  234. package/dist/esm/src/component/schema.js.map +1 -0
  235. package/dist/esm/src/nextjs/index.d.ts +10 -0
  236. package/dist/esm/src/nextjs/index.d.ts.map +1 -0
  237. package/dist/esm/src/nextjs/index.js +43 -0
  238. package/dist/esm/src/nextjs/index.js.map +1 -0
  239. package/dist/esm/src/plugins/convex/client.d.ts +9 -0
  240. package/dist/esm/src/plugins/convex/client.d.ts.map +1 -0
  241. package/dist/esm/src/plugins/convex/client.js +7 -0
  242. package/dist/esm/src/plugins/convex/client.js.map +1 -0
  243. package/dist/esm/src/plugins/convex/index.d.ts +415 -0
  244. package/dist/esm/src/plugins/convex/index.d.ts.map +1 -0
  245. package/dist/esm/src/plugins/convex/index.js +354 -0
  246. package/dist/esm/src/plugins/convex/index.js.map +1 -0
  247. package/dist/esm/src/plugins/cross-domain/client.d.ts +132 -0
  248. package/dist/esm/src/plugins/cross-domain/client.d.ts.map +1 -0
  249. package/dist/esm/src/plugins/cross-domain/client.js +176 -0
  250. package/dist/esm/src/plugins/cross-domain/client.js.map +1 -0
  251. package/dist/esm/src/plugins/cross-domain/index.d.ts +83 -0
  252. package/dist/esm/src/plugins/cross-domain/index.d.ts.map +1 -0
  253. package/dist/esm/src/plugins/cross-domain/index.js +153 -0
  254. package/dist/esm/src/plugins/cross-domain/index.js.map +1 -0
  255. package/dist/esm/src/plugins/index.d.ts +3 -0
  256. package/dist/esm/src/plugins/index.d.ts.map +1 -0
  257. package/dist/esm/src/plugins/index.js +3 -0
  258. package/dist/esm/src/plugins/index.js.map +1 -0
  259. package/dist/esm/src/react/client.d.ts +31 -0
  260. package/dist/esm/src/react/client.d.ts.map +1 -0
  261. package/dist/esm/src/react/client.js +96 -0
  262. package/dist/esm/src/react/client.js.map +1 -0
  263. package/dist/esm/src/react/index.d.ts +9 -0
  264. package/dist/esm/src/react/index.d.ts.map +1 -0
  265. package/dist/esm/src/react/index.js +15 -0
  266. package/dist/esm/src/react/index.js.map +1 -0
  267. package/dist/esm/src/react-start/index.d.ts +45 -0
  268. package/dist/esm/src/react-start/index.d.ts.map +1 -0
  269. package/dist/esm/src/react-start/index.js +60 -0
  270. package/dist/esm/src/react-start/index.js.map +1 -0
  271. package/dist/esm/src/utils/index.d.ts +9 -0
  272. package/dist/esm/src/utils/index.d.ts.map +1 -0
  273. package/dist/esm/src/utils/index.js +35 -0
  274. package/dist/esm/src/utils/index.js.map +1 -0
  275. package/package.json +30 -7
  276. package/src/auth.ts +57 -0
  277. package/src/client/adapter.test.ts +15 -0
  278. package/src/client/adapter.ts +83 -58
  279. package/src/{component/lib.ts → client/adapterUtils.ts} +106 -256
  280. package/src/client/createSchema.ts +149 -0
  281. package/src/client/index.ts +561 -317
  282. package/src/component/_generated/api.d.ts +1744 -787
  283. package/src/component/adapter.ts +13 -0
  284. package/src/component/adapterTest.ts +8 -34
  285. package/src/component/schema.ts +81 -172
  286. package/src/nextjs/index.ts +5 -5
  287. package/src/plugins/convex/client.ts +2 -3
  288. package/src/plugins/convex/index.ts +16 -147
  289. package/src/plugins/cross-domain/index.ts +2 -2
  290. package/src/react-start/index.ts +76 -44
  291. 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 = <O extends BetterAuthOptions>(
12
+ export const convex = (
17
13
  opts: {
18
14
  jwtExpirationSeconds?: number;
19
15
  deleteExpiredSessionsOnLogin?: boolean;
20
- options?: O;
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,14 +29,11 @@ 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, userId, image, ...user }, session }) => ({
33
+ definePayload: ({ user: { id, image, ...user }, session }) => ({
62
34
  ...user,
63
35
  sessionId: session.id,
36
+ iat: Math.floor(new Date().getTime() / 1000),
64
37
  }),
65
38
  },
66
39
  });
@@ -76,69 +49,20 @@ export const convex = <O extends BetterAuthOptions>(
76
49
  };
77
50
  return {
78
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
+ },
79
62
  hooks: {
80
- before: [
81
- {
82
- matcher: (ctx) => {
83
- return !!ctx.body?.userId;
84
- },
85
- handler: createAuthMiddleware(async (ctx) => {
86
- const user: { id: string } | null =
87
- await ctx.context.adapter.findOne({
88
- model: "user",
89
- where: [
90
- {
91
- field: "userId",
92
- operator: "eq",
93
- value: ctx.body?.userId,
94
- },
95
- ],
96
- });
97
- if (!user) {
98
- throw new Error("User not found");
99
- }
100
- ctx.body.userId = user.id;
101
- return {
102
- context: ctx,
103
- };
104
- }),
105
- },
106
- ...bearer.hooks.before,
107
- ],
63
+ before: [...bearer.hooks.before],
108
64
  after: [
109
65
  ...oidcProvider.hooks.after,
110
- {
111
- matcher: (ctx) => {
112
- return (
113
- deleteExpiredSessionsOnLogin &&
114
- (ctx.path?.startsWith("/sign-in") ||
115
- ctx.path?.startsWith("/callback"))
116
- );
117
- },
118
- handler: createAuthMiddleware(async (ctx) => {
119
- // Delete expired sessions at login
120
- const userId = ctx.context.newSession?.user.id;
121
- if (!userId) {
122
- return;
123
- }
124
- await ctx.context.adapter.deleteMany({
125
- model: "session",
126
- where: [
127
- {
128
- field: "userId",
129
- operator: "eq",
130
- value: userId,
131
- connector: "AND",
132
- },
133
- {
134
- operator: "lte",
135
- field: "expiresAt",
136
- value: new Date().getTime(),
137
- },
138
- ],
139
- });
140
- }),
141
- },
142
66
  {
143
67
  matcher: (ctx) => {
144
68
  return (
@@ -193,61 +117,6 @@ export const convex = <O extends BetterAuthOptions>(
193
117
  ],
194
118
  },
195
119
  endpoints: {
196
- getSession: createAuthEndpoint(
197
- "/get-session",
198
- {
199
- method: "GET",
200
- query: z.optional(
201
- z.object({
202
- // If cookie cache is enabled, it will disable the cache
203
- // and fetch the session from the database
204
- disableCookieCache: z
205
- .boolean({
206
- description:
207
- "Disable cookie cache and fetch session from database",
208
- })
209
- .or(z.string().transform((v) => v === "true"))
210
- .optional(),
211
- disableRefresh: z
212
- .boolean({
213
- description:
214
- "Disable session refresh. Useful for checking session status, without updating the session",
215
- })
216
- .optional(),
217
- })
218
- ),
219
- metadata: {
220
- CUSTOM_SESSION: true,
221
- openapi: {
222
- description: "Get custom session data",
223
- responses: {
224
- "200": {
225
- description: "Success",
226
- content: {
227
- "application/json": {
228
- schema: {
229
- type: "array",
230
- nullable: true,
231
- items: {
232
- $ref: "#/components/schemas/Session",
233
- },
234
- },
235
- },
236
- },
237
- },
238
- },
239
- },
240
- },
241
- requireHeaders: true,
242
- },
243
- async (ctx) => {
244
- const response = await customSession.endpoints.getSession({
245
- ...ctx,
246
- returnHeaders: false,
247
- });
248
- return response;
249
- }
250
- ),
251
120
  getOpenIdConfig: createAuthEndpoint(
252
121
  "/convex/.well-known/openid-configuration",
253
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
- console.error("No session found");
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
- console.error("No redirect to found");
144
+ ctx.context.logger.error("No redirect to found");
145
145
  return;
146
146
  }
147
147
  const url = new URL(redirectTo);
@@ -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 { GenericActionCtx } from "convex/server";
4
+ import {
5
+ FunctionReference,
6
+ FunctionReturnType,
7
+ GenericActionCtx,
8
+ } from "convex/server";
5
9
  import { JWT_COOKIE_NAME } from "../plugins/convex";
6
- import { oneLine } from "common-tags";
10
+ import { ConvexHttpClient } from "convex/browser";
7
11
 
8
- export const getCookieName = async (
9
- createAuth: (ctx: GenericActionCtx<any>) => ReturnType<typeof betterAuth>
12
+ export const getCookieName = (
13
+ createAuth: (ctx: any) => ReturnType<typeof betterAuth>
10
14
  ) => {
11
- const auth = createAuth({} as any);
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 requireConvexSiteUrl = (
18
- opts: { convexSiteUrl: string; verbose?: boolean },
19
- calledFrom: string
20
+ export const setupFetchClient = async (
21
+ createAuth: (ctx: any) => ReturnType<typeof betterAuth>
20
22
  ) => {
21
- if (!opts.convexSiteUrl) {
22
- throw new Error(`${calledFrom}: opts.convexSiteUrl is required`);
23
- }
24
- if (opts.verbose) {
25
- console.log(`${calledFrom}: opts.convexSiteUrl: ${opts.convexSiteUrl}`);
26
- }
27
- return opts.convexSiteUrl;
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: string;
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 = requireConvexSiteUrl(opts, "fetchSession");
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
+ createAuth: (ctx: any) => ReturnType<typeof betterAuth>,
99
+ opts?: { convexSiteUrl?: string }
100
+ ) => {
101
+ const { getCookie } = await import("@tanstack/react-start/server");
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: { convexSiteUrl: string; verbose?: boolean }
113
+ opts?: { convexSiteUrl?: string; verbose?: boolean }
62
114
  ) => {
63
115
  const requestUrl = new URL(request.url);
64
- const convexSiteUrl = requireConvexSiteUrl(opts, "reactStartHandler");
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,4 +0,0 @@
1
- import { typedV } from "convex-helpers/validators";
2
- import schema from "./schema";
3
-
4
- export const vv = typedV(schema);