import Dexie, { type Table } from "dexie"; import { encrypted, Encryption } from "@pvermeer/dexie-encrypted-addon"; import { AppString } from "@/constants/app"; import { AppTable } from "../constants/table"; import { Field } from "@/constants/model"; import { IDBAccount } from "@/models/Account"; export class DexieWrapper extends Dexie { [AppTable.ACCOUNTS]!: Table; constructor(name: string, secret: string) { super(name, { autoOpen: true }); encrypted(this, { secretKey: secret }); this.version(1).stores({ [AppTable.ACCOUNTS]: `#&${Field.ID}, $${Field.IDENTITY}`, }); } } const secret = localStorage.getItem("secret") || Encryption.createRandomEncryptionKey(); if (localStorage.getItem("secret") == null) { localStorage.setItem("secret", secret); } console.log("secret", secret); /** * Preconfigured DexieWrapper */ export const dexieWrapper = new DexieWrapper( `${AppString.APP_NAME} v${AppString.VERSION}`, secret );