Register the @better-auth/passkey plugin alongside the existing better-auth setup. Adds a passkey table to the Drizzle schema with FK cascade to user, RLS enabled, and a userId index. The rpID is derived dynamically from CLIENT_URL so Portless dev (e.g. https://wt44.localhost) and production both work without extra env config. The plugin is placed before customSession to preserve the requirement that customSession remain last.
132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
import { relations } from "drizzle-orm";
|
|
import { organizations } from "../models/orgModels/orgTable.js";
|
|
import {
|
|
account,
|
|
invitation,
|
|
member,
|
|
oauthAccessToken,
|
|
oauthClient,
|
|
oauthConsent,
|
|
oauthRefreshToken,
|
|
passkey,
|
|
session,
|
|
user,
|
|
} from "./auth-schema.js";
|
|
|
|
export const userRelations = relations(user, ({ many }) => ({
|
|
sessions: many(session),
|
|
accounts: many(account),
|
|
memberships: many(member),
|
|
invitations: many(invitation),
|
|
oauthClients: many(oauthClient),
|
|
oauthRefreshTokens: many(oauthRefreshToken),
|
|
oauthAccessTokens: many(oauthAccessToken),
|
|
oauthConsents: many(oauthConsent),
|
|
passkeys: many(passkey),
|
|
}));
|
|
|
|
export const passkeyRelations = relations(passkey, ({ one }) => ({
|
|
user: one(user, {
|
|
fields: [passkey.userId],
|
|
references: [user.id],
|
|
}),
|
|
}));
|
|
|
|
const sessionRelations = relations(session, ({ one, many }) => ({
|
|
user: one(user, {
|
|
fields: [session.userId],
|
|
references: [user.id],
|
|
}),
|
|
oauthRefreshTokens: many(oauthRefreshToken),
|
|
oauthAccessTokens: many(oauthAccessToken),
|
|
}));
|
|
|
|
const accountRelations = relations(account, ({ one }) => ({
|
|
user: one(user, {
|
|
fields: [account.userId],
|
|
references: [user.id],
|
|
}),
|
|
}));
|
|
|
|
export const memberRelations = relations(member, ({ one }) => ({
|
|
organization: one(organizations, {
|
|
fields: [member.organizationId],
|
|
references: [organizations.id],
|
|
}),
|
|
user: one(user, {
|
|
fields: [member.userId],
|
|
references: [user.id],
|
|
}),
|
|
}));
|
|
|
|
export const inviteRelations = relations(invitation, ({ one }) => ({
|
|
organization: one(organizations, {
|
|
fields: [invitation.organizationId],
|
|
references: [organizations.id],
|
|
}),
|
|
inviter: one(user, {
|
|
fields: [invitation.inviterId],
|
|
references: [user.id],
|
|
}),
|
|
}));
|
|
|
|
// OAuth Provider relations
|
|
const oauthClientRelations = relations(oauthClient, ({ one, many }) => ({
|
|
user: one(user, {
|
|
fields: [oauthClient.userId],
|
|
references: [user.id],
|
|
}),
|
|
oauthRefreshTokens: many(oauthRefreshToken),
|
|
oauthAccessTokens: many(oauthAccessToken),
|
|
oauthConsents: many(oauthConsent),
|
|
}));
|
|
|
|
const oauthRefreshTokenRelations = relations(
|
|
oauthRefreshToken,
|
|
({ one, many }) => ({
|
|
oauthClient: one(oauthClient, {
|
|
fields: [oauthRefreshToken.clientId],
|
|
references: [oauthClient.clientId],
|
|
}),
|
|
session: one(session, {
|
|
fields: [oauthRefreshToken.sessionId],
|
|
references: [session.id],
|
|
}),
|
|
user: one(user, {
|
|
fields: [oauthRefreshToken.userId],
|
|
references: [user.id],
|
|
}),
|
|
oauthAccessTokens: many(oauthAccessToken),
|
|
}),
|
|
);
|
|
|
|
const oauthAccessTokenRelations = relations(oauthAccessToken, ({ one }) => ({
|
|
oauthClient: one(oauthClient, {
|
|
fields: [oauthAccessToken.clientId],
|
|
references: [oauthClient.clientId],
|
|
}),
|
|
session: one(session, {
|
|
fields: [oauthAccessToken.sessionId],
|
|
references: [session.id],
|
|
}),
|
|
user: one(user, {
|
|
fields: [oauthAccessToken.userId],
|
|
references: [user.id],
|
|
}),
|
|
oauthRefreshToken: one(oauthRefreshToken, {
|
|
fields: [oauthAccessToken.refreshId],
|
|
references: [oauthRefreshToken.id],
|
|
}),
|
|
}));
|
|
|
|
const oauthConsentRelations = relations(oauthConsent, ({ one }) => ({
|
|
oauthClient: one(oauthClient, {
|
|
fields: [oauthConsent.clientId],
|
|
references: [oauthClient.clientId],
|
|
}),
|
|
user: one(user, {
|
|
fields: [oauthConsent.userId],
|
|
references: [user.id],
|
|
}),
|
|
}));
|