Skip to content
File

Blob: src/worker/db/auth-do/schema.ts

typescript61 lines
1import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
2 
3import type { DavScope, JsonObject } from "@/worker/db/types";
4 
5export const authMeta = sqliteTable("meta", {
6 key: text("key").primaryKey(),
7 value: text("value").notNull(),
8});
9 
10export const sessions = sqliteTable(
11 "sessions",
12 {
13 id: text("id").primaryKey(),
14 createdAtMs: integer("created_at_ms").notNull(),
15 expiresAtMs: integer("expires_at_ms").notNull(),
16 revokedAtMs: integer("revoked_at_ms"),
17 lastUsedAtMs: integer("last_used_at_ms"),
18 },
19 (table) => [index("sessions_expires_idx").on(table.expiresAtMs), index("sessions_revoked_idx").on(table.revokedAtMs)],
20);
21 
22export const pats = sqliteTable(
23 "pats",
24 {
25 id: text("id").primaryKey(),
26 name: text("name").notNull(),
27 tokenDigest: text("token_digest").notNull(),
28 scopes: text("scopes_json", { mode: "json" }).notNull().$type<DavScope[]>(),
29 createdAtMs: integer("created_at_ms").notNull(),
30 expiresAtMs: integer("expires_at_ms"),
31 revokedAtMs: integer("revoked_at_ms"),
32 lastUsedAtMs: integer("last_used_at_ms"),
33 },
34 (table) => [
35 index("pats_active_idx").on(table.revokedAtMs, table.expiresAtMs),
36 index("pats_created_idx").on(table.createdAtMs),
37 ],
38);
39 
40export const authEvents = sqliteTable(
41 "auth_events",
42 {
43 id: text("id").primaryKey(),
44 eventType: text("event_type").notNull(),
45 createdAtMs: integer("created_at_ms").notNull(),
46 data: text("data_json", { mode: "json" }).notNull().$type<JsonObject>(),
47 },
48 (table) => [
49 index("auth_events_created_idx").on(table.createdAtMs),
50 index("auth_events_type_created_idx").on(table.eventType, table.createdAtMs),
51 ],
52);
53 
54export type AuthMetaRow = typeof authMeta.$inferSelect;
55export type SessionRow = typeof sessions.$inferSelect;
56export type NewSessionRow = typeof sessions.$inferInsert;
57export type PatRow = typeof pats.$inferSelect;
58export type NewPatRow = typeof pats.$inferInsert;
59export type AuthEventRow = typeof authEvents.$inferSelect;
60export type NewAuthEventRow = typeof authEvents.$inferInsert;