import { DrizzleClient } from "./DrizzleClient"; import type { Transaction } from "./types"; import { isShuttingDown, incrementTransactions, decrementTransactions } from "./shutdown"; export const withTransaction = async ( callback: (tx: Transaction) => Promise, tx?: Transaction ): Promise => { if (tx) { return await callback(tx); } else { if (isShuttingDown()) { throw new Error("System is shutting down, no new transactions allowed."); } incrementTransactions(); try { return await DrizzleClient.transaction(async (newTx) => { return await callback(newTx); }); } finally { decrementTransactions(); } } };