Implement unified storage architecture

- Replace fragmented storage backends with single IndexedDBStorageBackend
- Create multi-store StorageBackend interface (storeName parameter)
- Remove old backends: IndexedDBBackend, LocalStorageBackend, SessionIndexedDBBackend, WebExtensionStorageBackend
- Remove old repositories: ProviderKeysRepository, SessionRepository, SettingsRepository
- Simplify AppStorage to directly expose storage methods (getSetting/setSetting, getProviderKey/setProviderKey)
- Create SessionsRepository for session-specific operations
- Update all consumers to use new simplified API
- Update example app to use new storage architecture
- Benefits: 10GB+ quota (vs 10MB chrome.storage), single database, consistent API
This commit is contained in:
Mario Zechner 2025-10-08 16:14:29 +02:00
parent b3cce7b400
commit bbbc232c7c
19 changed files with 421 additions and 998 deletions

View file

@ -29,7 +29,7 @@ export class ApiKeyPromptDialog extends DialogBase {
// Poll for key existence - when key is added, resolve and close
const checkInterval = setInterval(async () => {
const hasKey = await getAppStorage().providerKeys.hasKey(this.provider);
const hasKey = !!(await getAppStorage().getProviderKey(this.provider));
if (hasKey) {
clearInterval(checkInterval);
if (this.resolvePromise) {

View file

@ -30,13 +30,7 @@ export class SessionListDialog extends DialogBase {
this.loading = true;
try {
const storage = getAppStorage();
if (!storage.sessions) {
console.error("Session storage not available");
this.sessions = [];
return;
}
this.sessions = await storage.sessions.listSessions();
this.sessions = await storage.sessions.getAllMetadata();
} catch (err) {
console.error("Failed to load sessions:", err);
this.sessions = [];

View file

@ -56,8 +56,8 @@ export class ProxyTab extends SettingsTab {
// Load proxy settings when tab is connected
try {
const storage = getAppStorage();
const enabled = await storage.settings.get<boolean>("proxy.enabled");
const url = await storage.settings.get<string>("proxy.url");
const enabled = await storage.getSetting<boolean>("proxy.enabled");
const url = await storage.getSetting<string>("proxy.url");
if (enabled !== null) this.proxyEnabled = enabled;
if (url !== null) this.proxyUrl = url;
@ -69,8 +69,8 @@ export class ProxyTab extends SettingsTab {
private async saveProxySettings() {
try {
const storage = getAppStorage();
await storage.settings.set("proxy.enabled", this.proxyEnabled);
await storage.settings.set("proxy.url", this.proxyUrl);
await storage.setSetting("proxy.enabled", this.proxyEnabled);
await storage.setSetting("proxy.url", this.proxyUrl);
} catch (error) {
console.error("Failed to save proxy settings:", error);
}