diff --git a/app.js b/app.js
new file mode 100644
index 0000000..d233686
--- /dev/null
+++ b/app.js
@@ -0,0 +1,43 @@
+import FSHandle from "./store.js";
+
+const Rooms = {};
+
+async function getFolderHandle() {
+ try {
+ const dirHandle = await globalThis.showDirectoryPicker();
+ console.log("Folder selected:", dirHandle);
+
+
+ for await (const [name, roomsHandle] of dirHandle.entries())
+ {
+ if(name == "room" && roomsHandle.kind == "directory")
+ {
+ for await (const [name, roomHandle] of roomsHandle.entries())
+ {
+ if(roomHandle.kind == "directory")
+ {
+ Rooms[name] = roomHandle;
+ }
+ }
+ }
+ }
+
+ console.log(Rooms);
+
+ } catch (err) {
+ console.error("Folder selection cancelled or failed:", err);
+ }
+ }
+
+function Init()
+{
+ const d =(...args)=> document.createElement(...args);
+
+ const button = d("button");
+ button.innerText = "open";
+ button.addEventListener("click", getFolderHandle);
+
+ document.body.appendChild(button)
+}
+
+Init();
\ No newline at end of file
diff --git a/deno.json b/deno.json
index 52d32e3..8d15f5d 100644
--- a/deno.json
+++ b/deno.json
@@ -1,5 +1,8 @@
{
"compilerOptions": {
- "checkJs": true
+ "checkJs": true,
+ "lib":[
+ "deno.window", "dom"
+ ]
}
}
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f45ead3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Document
+
+
+
+
+
\ No newline at end of file
diff --git a/room/room_01/_room_meta.json b/room/room_01/_room_meta.json
new file mode 100644
index 0000000..e69de29
diff --git a/room/room_01/pass_01/_pass_meta.json b/room/room_01/pass_01/_pass_meta.json
new file mode 100644
index 0000000..e69de29
diff --git a/room/room_01/pass_01/u1.json b/room/room_01/pass_01/u1.json
new file mode 100644
index 0000000..e69de29
diff --git a/room/room_01/pass_01/u2.json b/room/room_01/pass_01/u2.json
new file mode 100644
index 0000000..e69de29
diff --git a/room/room_01/pass_01/u3.json b/room/room_01/pass_01/u3.json
new file mode 100644
index 0000000..e69de29
diff --git a/store.js b/store.js
new file mode 100644
index 0000000..bf62a10
--- /dev/null
+++ b/store.js
@@ -0,0 +1,76 @@
+// 📦 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);
+ }
+
\ No newline at end of file