forked from jsnbuchanan/crowd-funder-for-time-pwa
Cleaned up old Dexie class. Added mnemonic and dateCreated columns.
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
/**
|
||||
* Field names used by the tables for the DB objects.
|
||||
*/
|
||||
export enum Field {
|
||||
// Setting
|
||||
KEY = "key",
|
||||
VALUE = "value",
|
||||
// Log
|
||||
SEVERITY = "severity",
|
||||
LABEL = "label",
|
||||
ERROR = "error",
|
||||
// Accounts
|
||||
NAME = "name",
|
||||
DESCRIPTION = "description",
|
||||
ID = "id",
|
||||
IDENTITY = "indentity",
|
||||
CREATED_TIMESTAMP = "createdTimestamp",
|
||||
STATUS = "status",
|
||||
}
|
||||
|
||||
export enum Severity {
|
||||
DEBUG = "Debug",
|
||||
INFO = "Info",
|
||||
WARN = "Warning",
|
||||
ERROR = "Error",
|
||||
CRITICAL = "Critical",
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
/**
|
||||
* Dexie table names used by the DexieWrapper service.
|
||||
*/
|
||||
export enum AppTable {
|
||||
ACCOUNTS = "Accounts-Table",
|
||||
}
|
||||
@@ -3,13 +3,16 @@ import { Table } from "dexie";
|
||||
export type Account = {
|
||||
id?: number;
|
||||
publicKey: string;
|
||||
mnemonic: string;
|
||||
identity: string;
|
||||
dateCreated: number;
|
||||
};
|
||||
|
||||
export type AccountsTable = {
|
||||
accounts: Table<Account>;
|
||||
};
|
||||
|
||||
// mark encrypted field by starting with a $ character
|
||||
export const accountsSchema = {
|
||||
accounts: "++id, publicKey, $identity",
|
||||
accounts: "++id, publicKey, $mnemonic, $identity, dateCreated",
|
||||
};
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import type { Field } from "@/constants/model";
|
||||
|
||||
export interface IDBAccount {
|
||||
[Field.ID]?: string;
|
||||
[Field.IDENTITY]: string;
|
||||
[Field.NAME]: string;
|
||||
[Field.DESCRIPTION]: string;
|
||||
[Field.CREATED_TIMESTAMP]: number;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
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<IDBAccount>;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Preconfigured DexieWrapper
|
||||
*/
|
||||
export const dexieWrapper = new DexieWrapper(
|
||||
`${AppString.APP_NAME} v${AppString.VERSION}`,
|
||||
secret
|
||||
);
|
||||
@@ -1,41 +0,0 @@
|
||||
import type { IndexableType } from "dexie";
|
||||
import { AppTable } from "@/constants/table";
|
||||
import { Field } from "@/constants/model";
|
||||
import { dexieWrapper } from "@/services/DexieWrapper";
|
||||
import type { IDBAccount } from "@/models/Account";
|
||||
|
||||
export default function useDBAccounts() {
|
||||
/**
|
||||
* Gets all data from the Logs table.
|
||||
* @returns IDBAccount[]
|
||||
*/
|
||||
async function getAccountsTable(): Promise<IDBAccount[]> {
|
||||
return await dexieWrapper.table(AppTable.ACCOUNTS).toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an Account to the database.
|
||||
* @param name
|
||||
* @param description
|
||||
* @param identity
|
||||
* @returns Id of new Account
|
||||
*/
|
||||
async function addAccount(
|
||||
name: string,
|
||||
description: string,
|
||||
identity: string
|
||||
): Promise<IndexableType> {
|
||||
const account: IDBAccount = {
|
||||
[Field.CREATED_TIMESTAMP]: new Date().getTime(),
|
||||
[Field.NAME]: name,
|
||||
[Field.DESCRIPTION]: description,
|
||||
[Field.IDENTITY]: identity,
|
||||
};
|
||||
return await dexieWrapper.table(AppTable.ACCOUNTS).add(account);
|
||||
}
|
||||
|
||||
return {
|
||||
getAccountsTable,
|
||||
addAccount,
|
||||
};
|
||||
}
|
||||
@@ -228,7 +228,9 @@ export default class AccountViewView extends Vue {
|
||||
odexie._allTables.accounts
|
||||
.add({
|
||||
publicKey: newId.keys[0].publicKeyHex,
|
||||
mnemonic: mnemonic,
|
||||
identity: JSON.stringify(newId),
|
||||
dateCreated: new Date().getTime(),
|
||||
})
|
||||
.then(function () {
|
||||
odexie._allTables.accounts.each(function (account) {
|
||||
|
||||
@@ -5,6 +5,6 @@ module.exports = defineConfig({
|
||||
devtool: "source-map",
|
||||
experiments: {
|
||||
topLevelAwait: true,
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user