fix(share): guard against uninitialized DB connection on /share routes (#5677)

This commit is contained in:
argusagent 2026-03-17 20:22:05 -04:00
parent 723dada78a
commit d1159d3af9

View File

@ -5,12 +5,14 @@ import dataDir from "../services/data_dir.js";
import sql_init from "../services/sql_init.js";
let dbConnection!: Database.Database;
let dbConnectionReady = false;
sql_init.dbReady.then(() => {
dbConnection = new Database(dataDir.DOCUMENT_PATH, {
readonly: true,
nativeBinding: process.env.BETTERSQLITE3_NATIVE_PATH || undefined
});
dbConnectionReady = true;
[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach((eventType) => {
process.on(eventType, () => {
@ -23,18 +25,31 @@ sql_init.dbReady.then(() => {
});
});
function assertDbReady(): void {
if (!dbConnectionReady) {
throw new Error("Share database connection is not yet ready. The application may still be initializing.");
}
}
function getRawRows<T>(query: string, params = []): T[] {
assertDbReady();
return dbConnection.prepare(query).raw().all(params) as T[];
}
function getRow<T>(query: string, params: string[] = []): T {
assertDbReady();
return dbConnection.prepare(query).get(params) as T;
}
function getColumn<T>(query: string, params: string[] = []): T[] {
assertDbReady();
return dbConnection.prepare(query).pluck().all(params) as T[];
}
export function isShareDbReady(): boolean {
return dbConnectionReady;
}
export default {
getRawRows,
getRow,