UNPKG

@convex-dev/better-auth

Version:
438 lines (413 loc) 12.4 kB
// This file is auto-generated from auth.ts by generate-schema.ts. Do not edit this file manually. // To regenerate the schema, run: // npx tsx generate-schema.ts import { defineSchema, defineTable } from "convex/server"; import { v } from "convex/values"; const schema = defineSchema({ user: defineTable({ name: v.string(), email: v.string(), emailVerified: v.boolean(), image: v.optional(v.union(v.null(), v.string())), createdAt: v.number(), updatedAt: v.number(), twoFactorEnabled: v.optional(v.union(v.null(), v.boolean())), isAnonymous: v.optional(v.union(v.null(), v.boolean())), username: v.optional(v.union(v.null(), v.string())), displayUsername: v.optional(v.union(v.null(), v.string())), phoneNumber: v.optional(v.union(v.null(), v.string())), phoneNumberVerified: v.optional(v.union(v.null(), v.boolean())), role: v.optional(v.union(v.null(), v.string())), banned: v.optional(v.union(v.null(), v.boolean())), banReason: v.optional(v.union(v.null(), v.string())), banExpires: v.optional(v.union(v.null(), v.number())), stripeCustomerId: v.optional(v.union(v.null(), v.string())), userId: v.optional(v.union(v.null(), v.string())), teamId: v.optional(v.union(v.null(), v.string())), }) .index("email_name", ["email","name"]) .index("name", ["name"]) .index("userId", ["userId"]) .index("username", ["username"]) .index("phoneNumber", ["phoneNumber"]), session: defineTable({ expiresAt: v.number(), token: v.string(), createdAt: v.number(), updatedAt: v.number(), ipAddress: v.optional(v.union(v.null(), v.string())), userAgent: v.optional(v.union(v.null(), v.string())), userId: v.string(), impersonatedBy: v.optional(v.union(v.null(), v.string())), activeOrganizationId: v.optional(v.union(v.null(), v.string())), activeTeamId: v.optional(v.union(v.null(), v.string())), }) .index("expiresAt", ["expiresAt"]) .index("expiresAt_userId", ["expiresAt","userId"]) .index("token", ["token"]) .index("userId", ["userId"]), account: defineTable({ accountId: v.string(), providerId: v.string(), userId: v.string(), accessToken: v.optional(v.union(v.null(), v.string())), refreshToken: v.optional(v.union(v.null(), v.string())), idToken: v.optional(v.union(v.null(), v.string())), accessTokenExpiresAt: v.optional(v.union(v.null(), v.number())), refreshTokenExpiresAt: v.optional(v.union(v.null(), v.number())), scope: v.optional(v.union(v.null(), v.string())), password: v.optional(v.union(v.null(), v.string())), createdAt: v.number(), updatedAt: v.number(), }) .index("accountId", ["accountId"]) .index("accountId_providerId", ["accountId","providerId"]) .index("providerId_userId", ["providerId","userId"]) .index("userId", ["userId"]), verification: defineTable({ identifier: v.string(), value: v.string(), expiresAt: v.number(), createdAt: v.optional(v.union(v.null(), v.number())), updatedAt: v.optional(v.union(v.null(), v.number())), }) .index("expiresAt", ["expiresAt"]) .index("identifier", ["identifier"]), twoFactor: defineTable({ secret: v.string(), backupCodes: v.string(), userId: v.string(), }) .index("userId", ["userId"]), passkey: defineTable({ name: v.optional(v.union(v.null(), v.string())), publicKey: v.string(), userId: v.string(), credentialID: v.string(), counter: v.number(), deviceType: v.string(), backedUp: v.boolean(), transports: v.optional(v.union(v.null(), v.string())), createdAt: v.optional(v.union(v.null(), v.number())), aaguid: v.optional(v.union(v.null(), v.string())), }) .index("credentialID", ["credentialID"]) .index("userId", ["userId"]), apikey: defineTable({ name: v.optional(v.union(v.null(), v.string())), start: v.optional(v.union(v.null(), v.string())), prefix: v.optional(v.union(v.null(), v.string())), key: v.string(), userId: v.string(), refillInterval: v.optional(v.union(v.null(), v.number())), refillAmount: v.optional(v.union(v.null(), v.number())), lastRefillAt: v.optional(v.union(v.null(), v.number())), enabled: v.optional(v.union(v.null(), v.boolean())), rateLimitEnabled: v.optional(v.union(v.null(), v.boolean())), rateLimitTimeWindow: v.optional(v.union(v.null(), v.number())), rateLimitMax: v.optional(v.union(v.null(), v.number())), requestCount: v.optional(v.union(v.null(), v.number())), remaining: v.optional(v.union(v.null(), v.number())), lastRequest: v.optional(v.union(v.null(), v.number())), expiresAt: v.optional(v.union(v.null(), v.number())), createdAt: v.number(), updatedAt: v.number(), permissions: v.optional(v.union(v.null(), v.string())), metadata: v.optional(v.union(v.null(), v.string())), }) .index("key", ["key"]) .index("userId", ["userId"]), oauthApplication: defineTable({ name: v.optional(v.union(v.null(), v.string())), icon: v.optional(v.union(v.null(), v.string())), metadata: v.optional(v.union(v.null(), v.string())), clientId: v.optional(v.union(v.null(), v.string())), clientSecret: v.optional(v.union(v.null(), v.string())), redirectURLs: v.optional(v.union(v.null(), v.string())), type: v.optional(v.union(v.null(), v.string())), disabled: v.optional(v.union(v.null(), v.boolean())), userId: v.optional(v.union(v.null(), v.string())), createdAt: v.optional(v.union(v.null(), v.number())), updatedAt: v.optional(v.union(v.null(), v.number())), }) .index("clientId", ["clientId"]), oauthAccessToken: defineTable({ accessToken: v.optional(v.union(v.null(), v.string())), refreshToken: v.optional(v.union(v.null(), v.string())), accessTokenExpiresAt: v.optional(v.union(v.null(), v.number())), refreshTokenExpiresAt: v.optional(v.union(v.null(), v.number())), clientId: v.optional(v.union(v.null(), v.string())), userId: v.optional(v.union(v.null(), v.string())), scopes: v.optional(v.union(v.null(), v.string())), createdAt: v.optional(v.union(v.null(), v.number())), updatedAt: v.optional(v.union(v.null(), v.number())), }) .index("accessToken", ["accessToken"]) .index("refreshToken", ["refreshToken"]), oauthConsent: defineTable({ clientId: v.optional(v.union(v.null(), v.string())), userId: v.optional(v.union(v.null(), v.string())), scopes: v.optional(v.union(v.null(), v.string())), createdAt: v.optional(v.union(v.null(), v.number())), updatedAt: v.optional(v.union(v.null(), v.number())), consentGiven: v.optional(v.union(v.null(), v.boolean())), }) .index("clientId_userId", ["clientId","userId"]), organization: defineTable({ name: v.string(), slug: v.optional(v.union(v.null(), v.string())), logo: v.optional(v.union(v.null(), v.string())), createdAt: v.number(), metadata: v.optional(v.union(v.null(), v.string())), }) .index("name", ["name"]) .index("slug", ["slug"]), member: defineTable({ organizationId: v.string(), userId: v.string(), role: v.string(), createdAt: v.number(), }) .index("organizationId_userId", ["organizationId","userId"]) .index("userId", ["userId"]) .index("role", ["role"]), invitation: defineTable({ organizationId: v.string(), email: v.string(), role: v.optional(v.union(v.null(), v.string())), teamId: v.optional(v.union(v.null(), v.string())), status: v.string(), expiresAt: v.number(), inviterId: v.string(), }) .index("email_organizationId_status", ["email","organizationId","status"]) .index("organizationId_status", ["organizationId","status"]) .index("role", ["role"]) .index("teamId", ["teamId"]) .index("status", ["status"]) .index("inviterId", ["inviterId"]), team: defineTable({ name: v.string(), organizationId: v.string(), createdAt: v.number(), updatedAt: v.optional(v.union(v.null(), v.number())), }) .index("organizationId", ["organizationId"]), teamMember: defineTable({ teamId: v.string(), userId: v.string(), createdAt: v.optional(v.union(v.null(), v.number())), }) .index("userId", ["userId"]), ssoProvider: defineTable({ issuer: v.string(), oidcConfig: v.optional(v.union(v.null(), v.string())), samlConfig: v.optional(v.union(v.null(), v.string())), userId: v.optional(v.union(v.null(), v.string())), providerId: v.string(), organizationId: v.optional(v.union(v.null(), v.string())), domain: v.string(), }) .index("organizationId", ["organizationId"]) .index("domain", ["domain"]) .index("userId", ["userId"]) .index("providerId", ["providerId"]), jwks: defineTable({ publicKey: v.string(), privateKey: v.string(), createdAt: v.number(), }), subscription: defineTable({ plan: v.string(), referenceId: v.string(), stripeCustomerId: v.optional(v.union(v.null(), v.string())), stripeSubscriptionId: v.optional(v.union(v.null(), v.string())), status: v.optional(v.union(v.null(), v.string())), periodStart: v.optional(v.union(v.null(), v.number())), periodEnd: v.optional(v.union(v.null(), v.number())), cancelAtPeriodEnd: v.optional(v.union(v.null(), v.boolean())), seats: v.optional(v.union(v.null(), v.number())), }) .index("stripeSubscriptionId", ["stripeSubscriptionId"]) .index("stripeCustomerId", ["stripeCustomerId"]) .index("referenceId", ["referenceId"]), walletAddress: defineTable({ userId: v.string(), address: v.string(), chainId: v.number(), isPrimary: v.optional(v.union(v.null(), v.boolean())), createdAt: v.number(), }) .index("userId", ["userId"]), rateLimit: defineTable({ key: v.optional(v.union(v.null(), v.string())), count: v.optional(v.union(v.null(), v.number())), lastRequest: v.optional(v.union(v.null(), v.number())), }) .index("key", ["key"]), }); export default schema; export const specialFields = { user: { name: { sortable: true }, email: { sortable: true, unique: true }, username: { sortable: true, unique: true }, phoneNumber: { sortable: true, unique: true } }, session: { token: { unique: true }, userId: { references: { model: "user", field: "id", onDelete: "cascade" } } }, account: { userId: { references: { model: "user", field: "id", onDelete: "cascade" } } }, twoFactor: { userId: { references: { model: "user", field: "id" } } }, passkey: { userId: { references: { model: "user", field: "id" } } }, apikey: { userId: { references: { model: "user", field: "id" } } }, oauthApplication: { clientId: { unique: true } }, oauthAccessToken: { accessToken: { unique: true }, refreshToken: { unique: true } }, organization: { name: { sortable: true }, slug: { sortable: true, unique: true } }, member: { organizationId: { references: { model: "organization", field: "id" } }, userId: { references: { model: "user", field: "id" } }, role: { sortable: true } }, invitation: { organizationId: { references: { model: "organization", field: "id" } }, email: { sortable: true }, role: { sortable: true }, teamId: { sortable: true }, status: { sortable: true }, inviterId: { references: { model: "user", field: "id" } } }, team: { organizationId: { references: { model: "organization", field: "id" } } }, teamMember: { userId: { references: { model: "user", field: "id" } } }, ssoProvider: { userId: { references: { model: "user", field: "id" } }, providerId: { unique: true } }, walletAddress: { userId: { references: { model: "user", field: "id" } } } };