import { DB_PATH } from "$lib/utils/constants"; import { logger } from "$lib/utils/logger"; import { Database, Statement } from "bun:sqlite"; export class DatabaseBrokerManager { private static initialized = false private static db: Database // UGLY: should be more flexible public static init() { logger.debug("Initializing Database", "SSLSnifferApp") if (DatabaseBrokerManager.initialized) { logger.debug("database initialized Twice?", "SSLSnifferApp") throw new Error("SSLSniffer has already been initialized") } DatabaseBrokerManager.db = DatabaseBrokerManager.initDatabase() DatabaseBrokerManager.initialized = true } public static get ready() { return DatabaseBrokerManager.initialized } public static prepare(query: string) { logger.debug(`Statement: ${query}`, "SQLite Query Preparation") return DatabaseBrokerManager.db.prepare(query) } private static initDatabase() { const db = new Database( DB_PATH, { create: true, strict: true } ) // Improve performance db.exec("PRAGMA journal_mode = WAL;"); // Activate cascade operations db.exec("PRAGMA foreign_keys = ON") return db } private static closeDatabase(graceful?: boolean) { if (!graceful) { graceful = true } // Change of variable to make it more readable const forceful = !graceful DatabaseBrokerManager.db.close(forceful) } }