fix(storage): close IndexedDB connection after operations in directMessagesStore

Ensures `db.close()` is called in `js/directMessagesStore.js` methods (`loadDirectMessageSnapshot`, `saveDirectMessageSnapshot`, `clearDirectMessageSnapshot`) to prevent hanging `deleteDatabase` calls in tests (and potentially in app teardown). This resolves the timeout issue in `tests/nostr/dm-direct-message-flow.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
google-labs-jules[bot]andPR0M3TH3AN committed 2026-01-27 02:17:18 +00:00
1 parent 8e6257881d
commit 5a9452380a
1 file changed
+39 -28
+39 -28
View File
@@ -192,16 +192,19 @@ export async function loadDirectMessageSnapshot(pubkey) {
try {
const db = await openSettingsDb();
if (db) {
const stored = await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readonly");
const store = tx.objectStore(STORE_NAME);
const request = store.get(dbKey);
request.onsuccess = () => resolve(request.result || []);
request.onerror = () =>
reject(request.error || new Error("Failed to load snapshot"));
});
return normalizeSnapshotList(stored);
try {
const stored = await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readonly");
const store = tx.objectStore(STORE_NAME);
const request = store.get(dbKey);
request.onsuccess = () => resolve(request.result || []);
request.onerror = () =>
reject(request.error || new Error("Failed to load snapshot"));
});
return normalizeSnapshotList(stored);
} finally {
db.close();
}
}
} catch (error) {
userLogger.warn(
@@ -244,15 +247,19 @@ export async function saveDirectMessageSnapshot(pubkey, snapshot) {
try {
const db = await openSettingsDb();
if (db) {
await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readwrite");
const store = tx.objectStore(STORE_NAME);
const request = store.put(normalizedSnapshot, dbKey);
request.onsuccess = () => resolve();
request.onerror = () =>
reject(request.error || new Error("Failed to write snapshot"));
});
return normalizedSnapshot;
try {
await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readwrite");
const store = tx.objectStore(STORE_NAME);
const request = store.put(normalizedSnapshot, dbKey);
request.onsuccess = () => resolve();
request.onerror = () =>
reject(request.error || new Error("Failed to write snapshot"));
});
return normalizedSnapshot;
} finally {
db.close();
}
}
} catch (error) {
userLogger.warn(
@@ -290,15 +297,19 @@ export async function clearDirectMessageSnapshot(pubkey) {
try {
const db = await openSettingsDb();
if (db) {
await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readwrite");
const store = tx.objectStore(STORE_NAME);
const request = store.delete(dbKey);
request.onsuccess = () => resolve();
request.onerror = () =>
reject(request.error || new Error("Failed to clear snapshot"));
});
cleared = true;
try {
await new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, "readwrite");
const store = tx.objectStore(STORE_NAME);
const request = store.delete(dbKey);
request.onsuccess = () => resolve();
request.onerror = () =>
reject(request.error || new Error("Failed to clear snapshot"));
});
cleared = true;
} finally {
db.close();
}
}
} catch (error) {
userLogger.warn(