AOSSIE-Org / AOSSIE-Org/OrgExplorer

[BUG]: Unclosed IndexedDB database connections in github.js cause memory leaks

Open Beginner friendly
#216 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
JavaScript
Stars
34
Forks
92
Avg merge
8d 7h
Merged PRs (30d)
12

Description

### Bug Description
In `src/services/github.js`, `openDB()` opens an IndexedDB database connection on every cached API request (`cacheGet`, `cacheSet`, `cacheClear`). However, the returned `db` handle is never closed once the transaction finishes or encounters an error.

When analyzing an organization with multiple repositories and fetching contributors, issues, and pull requests, hundreds of `IDBDatabase` connection handles remain open concurrently in the browser tab. This causes memory buildup and can trigger connection limit warnings or block database upgrades.

### Steps to Reproduce
1. Open OrgExplorer and analyze an organization with multiple repositories.
2. Open Chrome DevTools -> Application -> Storage -> IndexedDB -> `orgexplorer_cache`.
3. Observe active database connection handles persisting without closing.

### Code Context
In `src/services/github.js`:
```javascript
export async function cacheGet(key) {
try {
const db = await openDB()
return new Promise(res => {
const req = db.transaction(STORE, 'readonly').objectStore(STORE).get(key)
req.onsuccess = () => {
const r = req.result
if (!r || Date.now() - r.ts > TTL_MS) return res(null)
res(r.v)
// Missing db.close() cleanup
}
req.onerror = () => res(null)
})
} catch { return null }
}
```

By contrast, `src/services/cache.js` properly handles transaction lifecycles and calls `db.close()` on completion and error.

### Environment Details
- Location: `src/services/github.js`
- Impacted Browsers: All browsers supporting IndexedDB (Chrome, Firefox, Safari, Edge)

### Impact
High - Major feature is broken

Contributor guide

Open the contributing guide

Research direction

Start with openDB and the cacheGet, cacheSet, and cacheClear entry points in src/services/github.js, comparing their transaction lifecycle with src/services/cache.js. Reproduce an organization analysis and inspect IndexedDB in Chrome DevTools; done means successful and failed requests no longer leave connection handles open or block database upgrades.

Written by the indexing model from the issue text.

Assessment

Tech stack
github, javascript
Domain
databases, frontend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
84/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.