diff --git a/src/controller/index.ts b/src/controller/index.ts index 54b46cc..0bb3c78 100644 --- a/src/controller/index.ts +++ b/src/controller/index.ts @@ -3,7 +3,7 @@ import { ScramjetFrame } from "./frame"; import { $scramjet, loadCodecs } from "../scramjet"; export class ScramjetController { - private store: IDBDatabase; + private db: IDBDatabase; constructor(config: Partial) { // sane ish defaults @@ -86,14 +86,17 @@ export class ScramjetController { return new Promise((resolve, reject) => { db.onsuccess = async () => { - this.store = db.result; + this.db = db.result; await this.#saveConfig(); resolve(db.result); }; db.onupgradeneeded = () => { - const db2 = db.result; - if (!db2.objectStoreNames.contains("config")) { - db2.createObjectStore("config"); + const res = db.result; + if (!res.objectStoreNames.contains("config")) { + res.createObjectStore("config"); + } + if (!res.objectStoreNames.contains("cookies")) { + res.createObjectStore("cookies"); } }; db.onerror = () => reject(db.error); @@ -101,12 +104,12 @@ export class ScramjetController { } async #saveConfig() { - if (!this.store) { + if (!this.db) { console.error("Store not ready!"); return; } - const tx = this.store.transaction("config", "readwrite"); + const tx = this.db.transaction("config", "readwrite"); const store = tx.objectStore("config"); const req = store.put($scramjet.config, "config"); diff --git a/src/worker/index.ts b/src/worker/index.ts index e15fbb0..e6fb682 100644 --- a/src/worker/index.ts +++ b/src/worker/index.ts @@ -19,7 +19,23 @@ export class ScramjetServiceWorker extends EventTarget { super(); this.client = new $scramjet.shared.util.BareClient(); - addEventListener("message", ({ data }: { data: MessageC2W }) => { + const db = indexedDB.open("$scramjet", 1); + + db.onsuccess = () => { + const res = db.result; + const tx = res.transaction("cookies", "readonly"); + const store = tx.objectStore("cookies"); + const cookies = store.get("cookies"); + + cookies.onsuccess = () => { + if (cookies.result) { + this.cookieStore.load(cookies.result); + dbg.log("Loaded cookies from IDB!"); + } + }; + } + + addEventListener("message", async ({ data }: { data: MessageC2W }) => { if (!("scramjet$type" in data)) return; if (data.scramjet$type === "registerServiceWorker") { @@ -29,7 +45,14 @@ export class ScramjetServiceWorker extends EventTarget { } if (data.scramjet$type === "cookie") { - this.cookieStore.setCookies([data.cookie], new URL(data.url)); + await this.cookieStore.setCookies([data.cookie], new URL(data.url)); + const db = indexedDB.open("$scramjet", 1); + db.onsuccess = () => { + const res = db.result; + const tx = res.transaction("cookies", "readwrite"); + const store = tx.objectStore("cookies"); + store.put(this.cookieStore.dump(), "cookies"); + } } }); } @@ -54,7 +77,6 @@ export class ScramjetServiceWorker extends EventTarget { resolve(); }; - config.onerror = () => reject(config.error); };