mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-06 11:36:44 +03:00
110 lines
3.8 KiB
TypeScript
110 lines
3.8 KiB
TypeScript
#!/usr/bin/env bun
|
|
|
|
import { betterAuth } from "better-auth";
|
|
import { drizzleAdapter } from "better-auth/adapters/drizzle";
|
|
import Database from "bun:sqlite";
|
|
import { drizzle } from "drizzle-orm/bun-sqlite";
|
|
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
|
|
// Create a minimal auth instance just for schema generation
|
|
const tempDb = new Database(":memory:");
|
|
const db = drizzle({ client: tempDb });
|
|
|
|
// Minimal auth config for schema generation
|
|
const auth = betterAuth({
|
|
database: drizzleAdapter(db, {
|
|
provider: "sqlite",
|
|
usePlural: true,
|
|
}),
|
|
emailAndPassword: {
|
|
enabled: true,
|
|
},
|
|
});
|
|
|
|
// Generate the schema
|
|
// Note: $internal API is not available in current better-auth version
|
|
// const schema = auth.$internal.schema;
|
|
|
|
console.log("Better Auth Tables Required:");
|
|
console.log("============================");
|
|
|
|
// Convert Better Auth schema to Drizzle schema definitions
|
|
const drizzleSchemaCode = `// Better Auth Tables - Generated Schema
|
|
import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
|
|
import { sql } from "drizzle-orm";
|
|
|
|
// Sessions table
|
|
export const sessions = sqliteTable("sessions", {
|
|
id: text("id").primaryKey(),
|
|
token: text("token").notNull().unique(),
|
|
userId: text("user_id").notNull().references(() => users.id),
|
|
expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(),
|
|
ipAddress: text("ip_address"),
|
|
userAgent: text("user_agent"),
|
|
createdAt: integer("created_at", { mode: "timestamp" })
|
|
.notNull()
|
|
.default(sql\`(unixepoch())\`),
|
|
updatedAt: integer("updated_at", { mode: "timestamp" })
|
|
.notNull()
|
|
.default(sql\`(unixepoch())\`),
|
|
}, (table) => {
|
|
return {
|
|
userIdIdx: index("idx_sessions_user_id").on(table.userId),
|
|
tokenIdx: index("idx_sessions_token").on(table.token),
|
|
expiresAtIdx: index("idx_sessions_expires_at").on(table.expiresAt),
|
|
};
|
|
});
|
|
|
|
// Accounts table (for OAuth providers and credentials)
|
|
export const accounts = sqliteTable("accounts", {
|
|
id: text("id").primaryKey(),
|
|
userId: text("user_id").notNull().references(() => users.id),
|
|
providerId: text("provider_id").notNull(),
|
|
providerUserId: text("provider_user_id").notNull(),
|
|
accessToken: text("access_token"),
|
|
refreshToken: text("refresh_token"),
|
|
expiresAt: integer("expires_at", { mode: "timestamp" }),
|
|
password: text("password"), // For credential provider
|
|
createdAt: integer("created_at", { mode: "timestamp" })
|
|
.notNull()
|
|
.default(sql\`(unixepoch())\`),
|
|
updatedAt: integer("updated_at", { mode: "timestamp" })
|
|
.notNull()
|
|
.default(sql\`(unixepoch())\`),
|
|
}, (table) => {
|
|
return {
|
|
userIdIdx: index("idx_accounts_user_id").on(table.userId),
|
|
providerIdx: index("idx_accounts_provider").on(table.providerId, table.providerUserId),
|
|
};
|
|
});
|
|
|
|
// Verification tokens table
|
|
export const verificationTokens = sqliteTable("verification_tokens", {
|
|
id: text("id").primaryKey(),
|
|
token: text("token").notNull().unique(),
|
|
identifier: text("identifier").notNull(),
|
|
type: text("type").notNull(), // email, password-reset, etc
|
|
expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(),
|
|
createdAt: integer("created_at", { mode: "timestamp" })
|
|
.notNull()
|
|
.default(sql\`(unixepoch())\`),
|
|
}, (table) => {
|
|
return {
|
|
tokenIdx: index("idx_verification_tokens_token").on(table.token),
|
|
identifierIdx: index("idx_verification_tokens_identifier").on(table.identifier),
|
|
};
|
|
});
|
|
|
|
// Future: SSO and OIDC Provider tables will be added when we enable those plugins
|
|
`;
|
|
|
|
console.log(drizzleSchemaCode);
|
|
|
|
// Output information about the schema
|
|
console.log("\n\nSummary:");
|
|
console.log("=========");
|
|
console.log("- Better Auth will modify the existing 'users' table");
|
|
console.log("- New tables required: sessions, accounts, verification_tokens");
|
|
console.log("\nNote: The 'users' table needs emailVerified field added");
|
|
|
|
tempDb.close(); |