@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.
- package/dist/commonjs/client/adapter.d.ts +10 -1
- package/dist/commonjs/client/adapter.d.ts.map +1 -1
- package/dist/commonjs/client/adapter.js +183 -192
- package/dist/commonjs/client/adapter.js.map +1 -1
- package/dist/commonjs/client/index.d.ts +238 -179
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +63 -67
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/adapterTest.d.ts +19 -0
- package/dist/commonjs/component/adapterTest.d.ts.map +1 -0
- package/dist/commonjs/component/adapterTest.js +82 -0
- package/dist/commonjs/component/adapterTest.js.map +1 -0
- package/dist/commonjs/component/lib.d.ts +218 -548
- package/dist/commonjs/component/lib.d.ts.map +1 -1
- package/dist/commonjs/component/lib.js +315 -286
- package/dist/commonjs/component/lib.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +90 -28
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +76 -18
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/util.d.ts +148 -86
- package/dist/commonjs/component/util.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.js +12 -0
- package/dist/commonjs/nextjs/index.js.map +1 -1
- package/dist/commonjs/plugins/convex/index.d.ts +14 -11
- package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
- package/dist/commonjs/plugins/convex/index.js +10 -4
- package/dist/commonjs/plugins/convex/index.js.map +1 -1
- package/dist/commonjs/plugins/cross-domain/client.d.ts +1 -1
- package/dist/commonjs/plugins/cross-domain/index.d.ts +5 -3
- package/dist/commonjs/plugins/cross-domain/index.d.ts.map +1 -1
- package/dist/commonjs/plugins/cross-domain/index.js +19 -5
- package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
- package/dist/commonjs/react/client.d.ts +1 -1
- package/dist/commonjs/react/client.d.ts.map +1 -1
- package/dist/commonjs/react/client.js +3 -9
- package/dist/commonjs/react/client.js.map +1 -1
- package/dist/commonjs/react-start/index.d.ts +37 -3
- package/dist/commonjs/react-start/index.d.ts.map +1 -1
- package/dist/commonjs/react-start/index.js +20 -4
- package/dist/commonjs/react-start/index.js.map +1 -1
- package/dist/commonjs/utils/index.d.ts +2 -0
- package/dist/commonjs/utils/index.d.ts.map +1 -0
- package/dist/commonjs/utils/index.js +8 -0
- package/dist/commonjs/utils/index.js.map +1 -0
- package/dist/esm/client/adapter.d.ts +10 -1
- package/dist/esm/client/adapter.d.ts.map +1 -1
- package/dist/esm/client/adapter.js +183 -192
- package/dist/esm/client/adapter.js.map +1 -1
- package/dist/esm/client/index.d.ts +238 -179
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +63 -67
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/adapterTest.d.ts +19 -0
- package/dist/esm/component/adapterTest.d.ts.map +1 -0
- package/dist/esm/component/adapterTest.js +82 -0
- package/dist/esm/component/adapterTest.js.map +1 -0
- package/dist/esm/component/lib.d.ts +218 -548
- package/dist/esm/component/lib.d.ts.map +1 -1
- package/dist/esm/component/lib.js +315 -286
- package/dist/esm/component/lib.js.map +1 -1
- package/dist/esm/component/schema.d.ts +90 -28
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +76 -18
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/util.d.ts +148 -86
- package/dist/esm/component/util.d.ts.map +1 -1
- package/dist/esm/nextjs/index.d.ts.map +1 -1
- package/dist/esm/nextjs/index.js +12 -0
- package/dist/esm/nextjs/index.js.map +1 -1
- package/dist/esm/plugins/convex/index.d.ts +14 -11
- package/dist/esm/plugins/convex/index.d.ts.map +1 -1
- package/dist/esm/plugins/convex/index.js +10 -4
- package/dist/esm/plugins/convex/index.js.map +1 -1
- package/dist/esm/plugins/cross-domain/client.d.ts +1 -1
- package/dist/esm/plugins/cross-domain/index.d.ts +5 -3
- package/dist/esm/plugins/cross-domain/index.d.ts.map +1 -1
- package/dist/esm/plugins/cross-domain/index.js +19 -5
- package/dist/esm/plugins/cross-domain/index.js.map +1 -1
- package/dist/esm/react/client.d.ts +1 -1
- package/dist/esm/react/client.d.ts.map +1 -1
- package/dist/esm/react/client.js +3 -9
- package/dist/esm/react/client.js.map +1 -1
- package/dist/esm/react-start/index.d.ts +37 -3
- package/dist/esm/react-start/index.d.ts.map +1 -1
- package/dist/esm/react-start/index.js +20 -4
- package/dist/esm/react-start/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/package.json +20 -5
- package/src/client/adapter.test.ts +144 -0
- package/src/client/adapter.ts +191 -195
- package/src/client/index.ts +64 -80
- package/src/component/_generated/api.d.ts +605 -149
- package/src/component/adapterTest.ts +141 -0
- package/src/component/lib.ts +444 -335
- package/src/component/schema.ts +81 -19
- package/src/nextjs/index.ts +17 -0
- package/src/plugins/convex/index.ts +12 -4
- package/src/plugins/cross-domain/index.ts +19 -5
- package/src/react/client.tsx +5 -11
- package/src/react-start/index.ts +33 -6
- package/src/react-start/vite-env.d.ts +2 -0
- package/dist/commonjs/react-router/index.d.ts +0 -10
- package/dist/commonjs/react-router/index.d.ts.map +0 -1
- package/dist/commonjs/react-router/index.js +0 -24
- package/dist/commonjs/react-router/index.js.map +0 -1
- package/dist/esm/react-router/index.d.ts +0 -10
- package/dist/esm/react-router/index.d.ts.map +0 -1
- package/dist/esm/react-router/index.js +0 -24
- package/dist/esm/react-router/index.js.map +0 -1
- package/src/client/cors.ts +0 -425
- /package/src/{util.ts → utils/index.ts} +0 -0
package/src/client/index.ts
CHANGED
|
@@ -16,33 +16,36 @@ import { type GenericId, Infer, v } from "convex/values";
|
|
|
16
16
|
import type { api } from "../component/_generated/api";
|
|
17
17
|
import schema from "../component/schema";
|
|
18
18
|
import { convexAdapter } from "./adapter";
|
|
19
|
-
import corsRouter from "./cors";
|
|
20
|
-
import { getByArgsValidator, updateArgsInputValidator } from "../component/lib";
|
|
21
19
|
import { betterAuth } from "better-auth";
|
|
22
20
|
import { omit } from "convex-helpers";
|
|
23
21
|
import { createCookieGetter } from "better-auth/cookies";
|
|
24
22
|
import { fetchQuery } from "convex/nextjs";
|
|
25
23
|
import { JWT_COOKIE_NAME } from "../plugins/convex";
|
|
26
|
-
import { requireEnv } from "../
|
|
24
|
+
import { requireEnv } from "../utils";
|
|
25
|
+
import { partial } from "convex-helpers/validators";
|
|
26
|
+
import { adapterArgsValidator, adapterWhereValidator } from "../component/lib";
|
|
27
|
+
import { corsRouter } from "convex-helpers/server/cors";
|
|
27
28
|
export { convexAdapter };
|
|
28
29
|
|
|
29
30
|
const createUserFields = omit(schema.tables.user.validator.fields, ["userId"]);
|
|
30
31
|
const createUserValidator = v.object(createUserFields);
|
|
31
32
|
const createUserArgsValidator = v.object({
|
|
32
33
|
input: v.object({
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
model: v.literal("user"),
|
|
35
|
+
data: v.object(createUserFields),
|
|
35
36
|
}),
|
|
36
37
|
});
|
|
37
38
|
const updateUserArgsValidator = v.object({
|
|
38
|
-
input:
|
|
39
|
+
input: v.object({
|
|
40
|
+
model: v.literal("user"),
|
|
41
|
+
where: v.optional(v.array(adapterWhereValidator)),
|
|
42
|
+
update: v.object(partial(createUserFields)),
|
|
43
|
+
}),
|
|
39
44
|
});
|
|
40
|
-
const deleteUserArgsValidator = v.object(getByArgsValidator);
|
|
41
|
-
|
|
42
45
|
const createSessionArgsValidator = v.object({
|
|
43
46
|
input: v.object({
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
model: v.literal("session"),
|
|
48
|
+
data: v.object(schema.tables.session.validator.fields),
|
|
46
49
|
}),
|
|
47
50
|
});
|
|
48
51
|
|
|
@@ -61,7 +64,7 @@ export type AuthFunctions = {
|
|
|
61
64
|
deleteUser: FunctionReference<
|
|
62
65
|
"mutation",
|
|
63
66
|
"internal",
|
|
64
|
-
Infer<typeof
|
|
67
|
+
Infer<typeof adapterArgsValidator>
|
|
65
68
|
>;
|
|
66
69
|
updateUser: FunctionReference<
|
|
67
70
|
"mutation",
|
|
@@ -128,10 +131,14 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
128
131
|
if (!identity) {
|
|
129
132
|
return null;
|
|
130
133
|
}
|
|
131
|
-
const doc = await ctx.runQuery(this.component.lib.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
const doc = await ctx.runQuery(this.component.lib.findOne, {
|
|
135
|
+
model: "user",
|
|
136
|
+
where: [
|
|
137
|
+
{
|
|
138
|
+
field: "userId",
|
|
139
|
+
value: identity.subject,
|
|
140
|
+
},
|
|
141
|
+
],
|
|
135
142
|
});
|
|
136
143
|
if (!doc) {
|
|
137
144
|
return null;
|
|
@@ -182,35 +189,38 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
182
189
|
createUser: internalMutationGeneric({
|
|
183
190
|
args: createUserArgsValidator,
|
|
184
191
|
handler: async (ctx, args) => {
|
|
185
|
-
const userId = await opts.onCreateUser(ctx, args.input);
|
|
186
|
-
const input = { ...args.input, table: "user", userId };
|
|
192
|
+
const userId = await opts.onCreateUser(ctx, args.input.data);
|
|
187
193
|
return ctx.runMutation(this.component.lib.create, {
|
|
188
|
-
input
|
|
194
|
+
input: {
|
|
195
|
+
...args.input,
|
|
196
|
+
data: { ...args.input.data, userId },
|
|
197
|
+
},
|
|
189
198
|
});
|
|
190
199
|
},
|
|
191
200
|
}),
|
|
192
201
|
deleteUser: internalMutationGeneric({
|
|
193
|
-
args:
|
|
202
|
+
args: adapterArgsValidator,
|
|
194
203
|
handler: async (ctx, args) => {
|
|
195
|
-
const doc = await ctx.runMutation(this.component.lib.
|
|
196
|
-
if (opts.onDeleteUser) {
|
|
204
|
+
const doc = await ctx.runMutation(this.component.lib.deleteOne, args);
|
|
205
|
+
if (doc && opts.onDeleteUser) {
|
|
197
206
|
await opts.onDeleteUser(ctx, doc.userId as UserId);
|
|
198
207
|
}
|
|
208
|
+
return doc;
|
|
199
209
|
},
|
|
200
210
|
}),
|
|
201
211
|
updateUser: internalMutationGeneric({
|
|
202
212
|
args: updateUserArgsValidator,
|
|
203
213
|
handler: async (ctx, args) => {
|
|
204
214
|
const updatedUser = await ctx.runMutation(
|
|
205
|
-
this.component.lib.
|
|
206
|
-
args
|
|
215
|
+
this.component.lib.updateOne,
|
|
216
|
+
{ input: args.input }
|
|
207
217
|
);
|
|
208
218
|
// Type narrowing
|
|
209
219
|
if (!("emailVerified" in updatedUser)) {
|
|
210
220
|
throw new Error("invalid user");
|
|
211
221
|
}
|
|
212
222
|
if (opts.onUpdateUser) {
|
|
213
|
-
await opts.onUpdateUser(ctx, omit(updatedUser, ["
|
|
223
|
+
await opts.onUpdateUser(ctx, omit(updatedUser, ["_id"]));
|
|
214
224
|
}
|
|
215
225
|
return updatedUser;
|
|
216
226
|
},
|
|
@@ -218,14 +228,9 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
218
228
|
createSession: internalMutationGeneric({
|
|
219
229
|
args: createSessionArgsValidator,
|
|
220
230
|
handler: async (ctx, args) => {
|
|
221
|
-
const session = await ctx.runMutation(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
);
|
|
225
|
-
// Type narrowing
|
|
226
|
-
if (!("ipAddress" in session)) {
|
|
227
|
-
throw new Error("invalid session");
|
|
228
|
-
}
|
|
231
|
+
const session = await ctx.runMutation(this.component.lib.create, {
|
|
232
|
+
input: args.input,
|
|
233
|
+
});
|
|
229
234
|
await opts.onCreateSession?.(ctx, session);
|
|
230
235
|
return session;
|
|
231
236
|
},
|
|
@@ -241,6 +246,10 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
241
246
|
const betterAuthOptions = createAuth({} as any).options;
|
|
242
247
|
const path = betterAuthOptions.basePath ?? "/api/auth";
|
|
243
248
|
const authRequestHandler = httpActionGeneric(async (ctx, request) => {
|
|
249
|
+
if (this.config.verbose) {
|
|
250
|
+
console.log("options.baseURL", betterAuthOptions.baseURL);
|
|
251
|
+
console.log("request headers", request.headers);
|
|
252
|
+
}
|
|
244
253
|
const auth = createAuth(ctx);
|
|
245
254
|
const response = await auth.handler(request);
|
|
246
255
|
if (this.config?.verbose) {
|
|
@@ -249,15 +258,20 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
249
258
|
return response;
|
|
250
259
|
});
|
|
251
260
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
+
const wellKnown = http.lookup("/.well-known/openid-configuration", "GET");
|
|
262
|
+
|
|
263
|
+
// If registerRoutes is used multiple times, this may already be defined
|
|
264
|
+
if (!wellKnown) {
|
|
265
|
+
// Redirect root well-known to api well-known
|
|
266
|
+
http.route({
|
|
267
|
+
path: "/.well-known/openid-configuration",
|
|
268
|
+
method: "GET",
|
|
269
|
+
handler: httpActionGeneric(async () => {
|
|
270
|
+
const url = `${requireEnv("CONVEX_SITE_URL")}/api/auth/convex/.well-known/openid-configuration`;
|
|
271
|
+
return Response.redirect(url);
|
|
272
|
+
}),
|
|
273
|
+
});
|
|
274
|
+
}
|
|
261
275
|
|
|
262
276
|
if (!opts.cors) {
|
|
263
277
|
http.route({
|
|
@@ -274,50 +288,20 @@ export class BetterAuth<UserId extends string = string> {
|
|
|
274
288
|
|
|
275
289
|
return;
|
|
276
290
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const trustedOriginsFromPlugins =
|
|
286
|
-
betterAuthOptions.plugins?.reduce((acc, plugin) => {
|
|
287
|
-
if (plugin.options?.trustedOrigins) {
|
|
288
|
-
acc.push(...plugin.options.trustedOrigins);
|
|
289
|
-
}
|
|
290
|
-
return acc;
|
|
291
|
-
}, [] as string[]) ?? [];
|
|
292
|
-
|
|
293
|
-
// Reuse trustedOrigins as default for allowedOrigins
|
|
294
|
-
const allowedOrigins = async (request: Request) => {
|
|
295
|
-
return (
|
|
296
|
-
await Promise.all(
|
|
297
|
-
[...trustedOrigins, ...trustedOriginsFromPlugins].map(
|
|
298
|
-
async (origin) => {
|
|
299
|
-
if (!origin) {
|
|
300
|
-
return [];
|
|
301
|
-
}
|
|
302
|
-
if (typeof origin === "function") {
|
|
303
|
-
return origin(request);
|
|
304
|
-
}
|
|
305
|
-
return [origin];
|
|
306
|
-
}
|
|
307
|
-
)
|
|
308
|
-
)
|
|
309
|
-
)
|
|
310
|
-
.flat()
|
|
311
|
-
.map((origin) =>
|
|
291
|
+
const cors = corsRouter(http, {
|
|
292
|
+
allowedOrigins: async (request) => {
|
|
293
|
+
const trustedOriginsOption =
|
|
294
|
+
(await createAuth({} as any).$context).options.trustedOrigins ?? [];
|
|
295
|
+
const trustedOrigins = Array.isArray(trustedOriginsOption)
|
|
296
|
+
? trustedOriginsOption
|
|
297
|
+
: await trustedOriginsOption(request);
|
|
298
|
+
return trustedOrigins.map((origin) =>
|
|
312
299
|
// Strip trailing wildcards, unsupported for allowedOrigins
|
|
313
300
|
origin.endsWith("*") && origin.length > 1
|
|
314
301
|
? origin.slice(0, -1)
|
|
315
302
|
: origin
|
|
316
303
|
);
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
const cors = corsRouter(http, {
|
|
320
|
-
allowedOrigins,
|
|
304
|
+
},
|
|
321
305
|
allowCredentials: true,
|
|
322
306
|
allowedHeaders: ["Content-Type", "Better-Auth-Cookie"],
|
|
323
307
|
exposedHeaders: ["Set-Better-Auth-Cookie"],
|