import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import type { DavScope, JsonObject } from "@/worker/db/types"; export const authMeta = sqliteTable("meta", { key: text("key").primaryKey(), value: text("value").notNull(), }); export const sessions = sqliteTable( "sessions", { id: text("id").primaryKey(), createdAtMs: integer("created_at_ms").notNull(), expiresAtMs: integer("expires_at_ms").notNull(), revokedAtMs: integer("revoked_at_ms"), lastUsedAtMs: integer("last_used_at_ms"), }, (table) => [index("sessions_expires_idx").on(table.expiresAtMs), index("sessions_revoked_idx").on(table.revokedAtMs)], ); export const pats = sqliteTable( "pats", { id: text("id").primaryKey(), name: text("name").notNull(), tokenDigest: text("token_digest").notNull(), scopes: text("scopes_json", { mode: "json" }).notNull().$type(), createdAtMs: integer("created_at_ms").notNull(), expiresAtMs: integer("expires_at_ms"), revokedAtMs: integer("revoked_at_ms"), lastUsedAtMs: integer("last_used_at_ms"), }, (table) => [ index("pats_active_idx").on(table.revokedAtMs, table.expiresAtMs), index("pats_created_idx").on(table.createdAtMs), ], ); export const authEvents = sqliteTable( "auth_events", { id: text("id").primaryKey(), eventType: text("event_type").notNull(), createdAtMs: integer("created_at_ms").notNull(), data: text("data_json", { mode: "json" }).notNull().$type(), }, (table) => [ index("auth_events_created_idx").on(table.createdAtMs), index("auth_events_type_created_idx").on(table.eventType, table.createdAtMs), ], ); export type AuthMetaRow = typeof authMeta.$inferSelect; export type SessionRow = typeof sessions.$inferSelect; export type NewSessionRow = typeof sessions.$inferInsert; export type PatRow = typeof pats.$inferSelect; export type NewPatRow = typeof pats.$inferInsert; export type AuthEventRow = typeof authEvents.$inferSelect; export type NewAuthEventRow = typeof authEvents.$inferInsert;