export interface RequestHistoryItem { id: string; url: string; method: string; headers: string; body: string; timestamp: string; status: number; responseTime: number; responseBody: string; responseHeaders: string; } class RequestHistoryDB { private readonly DB_NAME = 'RequestHistoryDB'; private readonly STORE_NAME = 'requests'; private readonly VERSION = 1; async openDB(): Promise { return new Promise((resolve, reject) => { const request = indexedDB.open(this.DB_NAME, this.VERSION); request.onerror = () => reject(request.error); request.onsuccess = () => resolve(request.result); request.onupgradeneeded = (event) => { const db = (event.target as IDBOpenDBRequest).result; if (!db.objectStoreNames.contains(this.STORE_NAME)) { const store = db.createObjectStore(this.STORE_NAME, { keyPath: 'id' }); store.createIndex('timestamp', 'timestamp', { unique: false }); store.createIndex('url', 'url', { unique: false }); store.createIndex('method', 'method', { unique: false }); } }; }); } async saveRequest(request: Omit): Promise { const db = await this.openDB(); const item: RequestHistoryItem = { ...request, id: Date.now().toString(), timestamp: new Date().toISOString(), }; return new Promise((resolve, reject) => { const transaction = db.transaction([this.STORE_NAME], 'readwrite'); const store = transaction.objectStore(this.STORE_NAME); const request = store.add(item); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } async getRequests(limit: number = 50): Promise { const db = await this.openDB(); return new Promise((resolve, reject) => { const transaction = db.transaction([this.STORE_NAME], 'readonly'); const store = transaction.objectStore(this.STORE_NAME); const index = store.index('timestamp'); const request = index.openCursor(null, 'prev'); const results: RequestHistoryItem[] = []; request.onsuccess = (event) => { const cursor = (event.target as IDBRequest).result; if (cursor && results.length < limit) { results.push(cursor.value); cursor.continue(); } else { resolve(results); } }; request.onerror = () => reject(request.error); }); } async deleteRequest(id: string): Promise { const db = await this.openDB(); return new Promise((resolve, reject) => { const transaction = db.transaction([this.STORE_NAME], 'readwrite'); const store = transaction.objectStore(this.STORE_NAME); const request = store.delete(id); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } async clearAllRequests(): Promise { const db = await this.openDB(); return new Promise((resolve, reject) => { const transaction = db.transaction([this.STORE_NAME], 'readwrite'); const store = transaction.objectStore(this.STORE_NAME); const request = store.clear(); request.onsuccess = () => resolve(); request.onerror = () => reject(request.error); }); } } export const requestHistoryDB = new RequestHistoryDB();