import neo4j, { Driver, Session } from "neo4j-driver"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; let driver: Driver | null = null; function readPassword(): string { if (process.env.NEO4J_PASSWORD) return process.env.NEO4J_PASSWORD; const passwordFile = resolve( process.env.PLATFORM_ROOT ?? resolve(import.meta.dirname, "../../../.."), "config/.neo4j-password", ); try { return readFileSync(passwordFile, "utf-8").trim(); } catch { throw new Error( `Neo4j password not found. Expected at ${passwordFile} or in NEO4J_PASSWORD env var.`, ); } } export function getDriver(): Driver { if (!driver) { const uri = process.env.NEO4J_URI; if (!uri) { throw new Error( "[property-data] NEO4J_URI unset — refusing to default to bolt://localhost:7687", ); } const user = process.env.NEO4J_USER ?? "neo4j"; const password = readPassword(); console.error(`[property-data] resolved neo4j_uri=${uri}`); driver = neo4j.driver(uri, neo4j.auth.basic(user, password)); } return driver; } export function getSession(): Session { return getDriver().session(); } export async function closeDriver(): Promise { if (driver) { await driver.close(); driver = null; } }