-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.ts
78 lines (70 loc) · 2.11 KB
/
schema.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { defineSchema, defineTable } from "convex/server";
import { Validator, v } from "convex/values";
// The users, accounts, sessions and verificationTokens tables are modeled
// from https://authjs.dev/getting-started/adapters#models
export const userSchema = {
email: v.string(),
name: v.optional(v.string()),
emailVerified: v.optional(v.number()),
image: v.optional(v.string()),
};
export const sessionSchema = {
userId: v.id("users"),
expires: v.number(),
sessionToken: v.string(),
};
export const accountSchema = {
userId: v.id("users"),
type: v.union(
v.literal("email"),
v.literal("oidc"),
v.literal("oauth"),
v.literal("webauthn"),
),
provider: v.string(),
providerAccountId: v.string(),
refresh_token: v.optional(v.string()),
access_token: v.optional(v.string()),
expires_at: v.optional(v.number()),
token_type: v.optional(v.string() as Validator<Lowercase<string>>),
scope: v.optional(v.string()),
id_token: v.optional(v.string()),
session_state: v.optional(v.string()),
};
export const verificationTokenSchema = {
identifier: v.string(),
token: v.string(),
expires: v.number(),
};
export const authenticatorSchema = {
credentialID: v.string(),
userId: v.id("users"),
providerAccountId: v.string(),
credentialPublicKey: v.string(),
counter: v.number(),
credentialDeviceType: v.string(),
credentialBackedUp: v.boolean(),
transports: v.optional(v.string()),
};
const authTables = {
users: defineTable(userSchema).index("email", ["email"]),
sessions: defineTable(sessionSchema)
.index("sessionToken", ["sessionToken"])
.index("userId", ["userId"]),
accounts: defineTable(accountSchema)
.index("providerAndAccountId", ["provider", "providerAccountId"])
.index("userId", ["userId"]),
verificationTokens: defineTable(verificationTokenSchema).index(
"identifierToken",
["identifier", "token"],
),
authenticators: defineTable(authenticatorSchema)
.index("userId", ["userId"])
.index("credentialID", ["credentialID"]),
};
export default defineSchema({
...authTables,
numbers: defineTable({
value: v.number(),
}),
});