45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
|
import Dexie from "dexie";
|
||
|
|
||
|
// Store to IndexedDB as well so that the
|
||
|
// service worker can access it
|
||
|
// TODO: Probably make everything depend on this and not use localStorage,
|
||
|
// but that's a larger refactoring effort for another PR
|
||
|
|
||
|
class SessionReplica {
|
||
|
constructor() {
|
||
|
const db = new Dexie("session-replica");
|
||
|
|
||
|
db.version(1).stores({
|
||
|
keyValueStore: "&key",
|
||
|
});
|
||
|
|
||
|
this.db = db;
|
||
|
}
|
||
|
|
||
|
async store(username, token) {
|
||
|
try {
|
||
|
await this.db.keyValueStore.bulkPut([
|
||
|
{ key: "user", value: username },
|
||
|
{ key: "token", value: token },
|
||
|
]);
|
||
|
} catch (e) {
|
||
|
console.error("[Session] Error replicating session to IndexedDB", e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async reset() {
|
||
|
try {
|
||
|
await this.db.delete();
|
||
|
} catch (e) {
|
||
|
console.error("[Session] Error resetting session on IndexedDB", e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async username() {
|
||
|
return (await this.db.keyValueStore.get({ key: "user" }))?.value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const sessionReplica = new SessionReplica();
|
||
|
export default sessionReplica;
|