// 📦 IndexedDB Helper function openDB() { return new Promise((resolve, reject) => { const request = indexedDB.open('directory-handle-db', 1); request.onupgradeneeded = () => { request.result.createObjectStore('handles'); }; request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); } // 💾 Store a directory handle async function storeDirectoryHandle(handle) { const db = await openDB(); const tx = db.transaction('handles', 'readwrite'); tx.objectStore('handles').put(handle, 'my-folder'); await tx.done; } // 📂 Retrieve a directory handle async function getDirectoryHandle() { const db = await openDB(); const tx = db.transaction('handles', 'readonly'); return new Promise((resolve, reject) => { const getRequest = tx.objectStore('handles').get('my-folder'); getRequest.onsuccess = () => resolve(getRequest.result); getRequest.onerror = () => reject(getRequest.error); }); } // 🔐 Check or request permission async function verifyPermission(handle, mode = 'readwrite') { const opts = { mode }; if ((await handle.queryPermission(opts)) === 'granted') return true; if ((await handle.requestPermission(opts)) === 'granted') return true; return false; } // 🧠 List contents of a directory async function listDirectoryContents(dirHandle) { for await (const [name, handle] of dirHandle.entries()) { console.log(`${handle.kind === 'file' ? '📄' : '📁'} ${name}`); } } // 📌 Request persistent storage async function ensurePersistentStorage() { if (navigator.storage && navigator.storage.persist) { const granted = await navigator.storage.persist(); console.log(granted ? '✅ Persistent storage granted.' : '⚠️ Storage may be cleared under pressure.'); } } // 🚀 Main logic export default async function initDirectoryAccess() { await ensurePersistentStorage(); let handle = await getDirectoryHandle(); if (!handle || !(await verifyPermission(handle))) { handle = await window.showDirectoryPicker(); if (await verifyPermission(handle)) { await storeDirectoryHandle(handle); } else { console.warn('Permission denied for selected directory.'); return; } } console.log('📂 Directory handle ready. Listing contents:'); await listDirectoryContents(handle); }