import type { AgentEvent } from './api' const DB_NAME = 'smart-factory-agent' const STORE_NAME = 'events' function openDatabase() { return new Promise((resolve, reject) => { const request = indexedDB.open(DB_NAME, 1) request.onupgradeneeded = () => { const store = request.result.createObjectStore(STORE_NAME, { keyPath: ['projectId', 'id'] }) store.createIndex('projectId', 'projectId') } request.onsuccess = () => resolve(request.result) request.onerror = () => reject(request.error) }) } export async function readCachedEvents(projectId: string): Promise { const database = await openDatabase() return new Promise((resolve, reject) => { const transaction = database.transaction(STORE_NAME, 'readonly') const request = transaction.objectStore(STORE_NAME).index('projectId').getAll(projectId) request.onsuccess = () => resolve((request.result as AgentEvent[]).sort((a, b) => a.id - b.id)) request.onerror = () => reject(request.error) transaction.oncomplete = () => database.close() }) } export async function cacheEvents(events: AgentEvent[]) { if (!events.length) return const database = await openDatabase() await new Promise((resolve, reject) => { const transaction = database.transaction(STORE_NAME, 'readwrite') const store = transaction.objectStore(STORE_NAME) for (const event of events) store.put(event) transaction.oncomplete = () => resolve() transaction.onerror = () => reject(transaction.error) }) database.close() } export async function deleteCachedEvents(projectId: string) { const database = await openDatabase() await new Promise((resolve, reject) => { const transaction = database.transaction(STORE_NAME, 'readwrite') const request = transaction.objectStore(STORE_NAME).index('projectId').openCursor(IDBKeyRange.only(projectId)) request.onsuccess = () => { const cursor = request.result if (!cursor) return cursor.delete() cursor.continue() } transaction.oncomplete = () => resolve() transaction.onerror = () => reject(transaction.error) }) database.close() }