Matthew Aaron Raymer
2 years ago
8 changed files with 81 additions and 8 deletions
@ -0,0 +1,34 @@ |
|||||
|
import BaseDexie from "dexie"; |
||||
|
import { encrypted, Encryption } from "@pvermeer/dexie-encrypted-addon"; |
||||
|
import { accountsSchema, AccountsTable } from "./tables/accounts"; |
||||
|
type DexieTables = AccountsTable; |
||||
|
|
||||
|
/** |
||||
|
* In order to make the next line be acceptable, the program needs to have its linter suppress a rule: |
||||
|
* https://typescript-eslint.io/rules/no-unnecessary-type-constraint/
|
||||
|
* |
||||
|
* and change *any* to *unknown* |
||||
|
* |
||||
|
* https://9to5answer.com/how-to-bypass-warning-unexpected-any-specify-a-different-type-typescript-eslint-no-explicit-any
|
||||
|
*/ |
||||
|
//export type Dexie<T extends any = DexieTables> = BaseDexie & T;
|
||||
|
export type Dexie<T extends unknown = DexieTables> = BaseDexie & T; |
||||
|
|
||||
|
export const db = new BaseDexie("kickStarter") as Dexie; |
||||
|
const schema = Object.assign({}, accountsSchema); |
||||
|
|
||||
|
// if db already made, skip creation
|
||||
|
BaseDexie.exists("kickStarter").then(function (exists) { |
||||
|
if (exists == false) { |
||||
|
// create password and place password in localStorage
|
||||
|
const secret = |
||||
|
localStorage.getItem("secret") || Encryption.createRandomEncryptionKey(); |
||||
|
|
||||
|
if (localStorage.getItem("secret") == null) { |
||||
|
localStorage.setItem("secret", secret); |
||||
|
} |
||||
|
|
||||
|
encrypted(db, { secretKey: secret }); |
||||
|
db.version(1).stores(schema); |
||||
|
} |
||||
|
}); |
@ -0,0 +1,15 @@ |
|||||
|
import { Table } from "dexie"; |
||||
|
|
||||
|
export type Account = { |
||||
|
id?: number; |
||||
|
publicKey: string; |
||||
|
identity: string; |
||||
|
}; |
||||
|
|
||||
|
export type AccountsTable = { |
||||
|
accounts: Table<Account>; |
||||
|
}; |
||||
|
|
||||
|
export const accountsSchema = { |
||||
|
accounts: "++id, publicKey, $identity", |
||||
|
}; |
Loading…
Reference in new issue