From 1acd519951b3d27a3963139fceed8e3937834d42 Mon Sep 17 00:00:00 2001 From: Ethan Niser <100045248+ethanniser@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:43:27 +0000 Subject: [PATCH] scaffold auth --- bun.lockb | Bin 121692 -> 122520 bytes package.json | 4 +++- src/auth/index.ts | 27 +++++++++++++++++++++++++++ src/components/base.tsx | 37 +------------------------------------ src/config/index.ts | 3 ++- src/db/index.ts | 2 +- src/db/schemas/auth.ts | 27 +++++++++++++++++++++++++++ src/db/schemas/index.ts | 1 + src/{ => types}/htmx.d.ts | 2 +- src/types/lucia.d.ts | 6 ++++++ 10 files changed, 69 insertions(+), 40 deletions(-) create mode 100644 src/auth/index.ts create mode 100644 src/db/schemas/auth.ts rename src/{ => types}/htmx.d.ts (95%) create mode 100644 src/types/lucia.d.ts diff --git a/bun.lockb b/bun.lockb index 66641e43efbac82972d1bbd3fde926b8d9bc28f1..13ce3658fbb55e8f20b6f24c1340dabaa02d4d75 100755 GIT binary patch delta 24361 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 L-`{>A^OgP|0oYpS delta 23722 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 ( href="https://cdn.jsdelivr.net/npm/@unocss/reset/tailwind.min.css" /> - - -
- - {children} - + {children} ); diff --git a/src/config/index.ts b/src/config/index.ts index 3662bfd..09d30b5 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -6,13 +6,14 @@ const env = createEnv({ LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]), DATABASE_URL: z.string().min(1), DATABASE_AUTH_TOKEN: z.string().min(1), + NODE_ENV: z.enum(["development", "production"]), }, runtimeEnv: process.env, }); const args = { // watch: process.argv.includes("--watch"), - liveReload: true + // liveReload: true, }; export const config = { diff --git a/src/db/index.ts b/src/db/index.ts index e76edff..cb5631a 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -3,7 +3,7 @@ import { createClient } from "@libsql/client"; import * as schema from "./schemas"; import { config } from "../config"; -const client = createClient({ +export const client = createClient({ url: config.env.DATABASE_URL, authToken: config.env.DATABASE_AUTH_TOKEN, }); diff --git a/src/db/schemas/auth.ts b/src/db/schemas/auth.ts new file mode 100644 index 0000000..254e67d --- /dev/null +++ b/src/db/schemas/auth.ts @@ -0,0 +1,27 @@ +import { sqliteTable, text, blob } from "drizzle-orm/sqlite-core"; + +export const user = sqliteTable("user", { + id: text("id").primaryKey(), + // other user attributes +}); + +export const session = sqliteTable("user_session", { + id: text("id").primaryKey(), + userId: text("user_id") + .notNull() + .references(() => user.id), + activeExpires: blob("active_expires", { + mode: "bigint", + }).notNull(), + idleExpires: blob("idle_expires", { + mode: "bigint", + }).notNull(), +}); + +export const key = sqliteTable("user_key", { + id: text("id").primaryKey(), + userId: text("user_id") + .notNull() + .references(() => user.id), + hashedPassword: text("hashed_password"), +}); diff --git a/src/db/schemas/index.ts b/src/db/schemas/index.ts index c97aa6b..8bfc8b1 100644 --- a/src/db/schemas/index.ts +++ b/src/db/schemas/index.ts @@ -1 +1,2 @@ export { todos } from "./todos"; +export * from "./auth" \ No newline at end of file diff --git a/src/htmx.d.ts b/src/types/htmx.d.ts similarity index 95% rename from src/htmx.d.ts rename to src/types/htmx.d.ts index 52105a5..bfe856a 100644 --- a/src/htmx.d.ts +++ b/src/types/htmx.d.ts @@ -27,7 +27,7 @@ type RouterPattern = : T; declare namespace JSX { - type Schema = import("./main").App["meta"]["schema"]; + type Schema = import("../main").App["meta"]["schema"]; type PostRoutes = RoutesByType; type GetRoutes = RoutesByType; diff --git a/src/types/lucia.d.ts b/src/types/lucia.d.ts new file mode 100644 index 0000000..481dd47 --- /dev/null +++ b/src/types/lucia.d.ts @@ -0,0 +1,6 @@ +/// +declare namespace Lucia { + type Auth = import("../auth/index").Auth; + type DatabaseUserAttributes = {}; + type DatabaseSessionAttributes = {}; +}