From b50d496e75fb6016e1e8f770194057f9cc5729b7 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 30 Oct 2025 11:12:01 +0800 Subject: [PATCH] WIP --- package-lock.json | 1 + package.json | 1 + server/better-auth.js | 56 +++++++++++++++++++++++++++++++++++++++++++ server/server.js | 4 ++++ 4 files changed, 62 insertions(+) create mode 100644 server/better-auth.js diff --git a/package-lock.json b/package-lock.json index 0a317c85e..3fc951b1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,6 +50,7 @@ "jwt-decode": "~3.1.2", "kafkajs": "^2.2.4", "knex": "~3.1.0", + "kysely": "^0.28.8", "limiter": "~2.1.0", "liquidjs": "^10.7.0", "marked": "^14.0.0", diff --git a/package.json b/package.json index dda6c75b0..dd856b51c 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,7 @@ "jwt-decode": "~3.1.2", "kafkajs": "^2.2.4", "knex": "~3.1.0", + "kysely": "^0.28.8", "limiter": "~2.1.0", "liquidjs": "^10.7.0", "marked": "^14.0.0", diff --git a/server/better-auth.js b/server/better-auth.js new file mode 100644 index 000000000..3d37cffa4 --- /dev/null +++ b/server/better-auth.js @@ -0,0 +1,56 @@ +const { betterAuth } = require("better-auth"); +const { Kysely, SqliteDialect } = require("kysely"); +const { R } = require("redbean-node"); +const Database = require("./database"); + +let auth = undefined; + +/** + * + */ +async function getAuth() { + if (!auth) { + auth = betterAuth({ + database: await getDatabase(), + secret: "TODO-testing-secret-change-me", + trustedOrigins: [ "*" ], + emailAndPassword: { + enabled: true, + }, + }); + } + return auth; +} + +/** + * Creates a Kysely dialect for SQLite. + * @param {sqlite3.Database} database The SQLite database instance. + * @returns {SqliteDialect} The Kysely SQLite dialect. + */ +function createSQLiteKyselyDialect(database) { + return new SqliteDialect({ + database, + }); +} + +/** + * + */ +async function getDatabase() { + const rawConn = await R.knex.client.acquireConnection(); + + console.log(rawConn.run); + + if (Database.dbConfig.type === "sqlite") { + console.log("Creating Kysely SQLite dialect"); + return new Kysely({ + dialect: createSQLiteKyselyDialect(rawConn), + }); + } else { + return rawConn; + } +} + +module.exports = { + getAuth, +}; diff --git a/server/server.js b/server/server.js index 6d4149ee7..6a6640527 100644 --- a/server/server.js +++ b/server/server.js @@ -151,6 +151,7 @@ const { resetChrome } = require("./monitor-types/real-browser-monitor-type"); const { EmbeddedMariaDB } = require("./embedded-mariadb"); const { SetupDatabase } = require("./setup-database"); const { chartSocketHandler } = require("./socket-handlers/chart-socket-handler"); +const { getAuth } = require("./better-auth"); app.use(express.json()); @@ -1758,6 +1759,9 @@ async function initDatabase(testMode = false) { await Database.connect(testMode); log.info("server", "Connected to the database"); + log.debug("server", "Init Better Auth"); + const auth = getAuth(); + // Patch the database await Database.patch(port, hostname);