aboutsummaryrefslogtreecommitdiff
path: root/extension/background/db.ts
diff options
context:
space:
mode:
Diffstat (limited to 'extension/background/db.ts')
-rw-r--r--extension/background/db.ts89
1 files changed, 89 insertions, 0 deletions
diff --git a/extension/background/db.ts b/extension/background/db.ts
new file mode 100644
index 000000000..12d944a83
--- /dev/null
+++ b/extension/background/db.ts
@@ -0,0 +1,89 @@
+"use strict";
+/**
+ * Declarations and helpers for
+ * things that are stored in the wallet's
+ * database.
+ */
+
+
+
+namespace Db {
+ export interface Mint {
+ baseUrl: string;
+ keys: Keys
+ }
+
+ export interface CoinWithDenom {
+ coin: Coin;
+ denom: Denomination;
+ }
+
+ export interface Keys {
+ denoms: { [key: string]: Denomination };
+ }
+
+ export interface Denomination {
+ value: AmountJson;
+ denom_pub: string;
+ fee_withdraw: AmountJson;
+ fee_deposit: AmountJson;
+ }
+
+ export interface PreCoin {
+ coinPub: string;
+ coinPriv: string;
+ reservePub: string;
+ denomPub: string;
+ blindingKey: string;
+ withdrawSig: string;
+ coinEv: string;
+ mintBaseUrl: string;
+ coinValue: AmountJson;
+ }
+
+ export interface Coin {
+ coinPub: string;
+ coinPriv: string;
+ denomPub: string;
+ denomSig: string;
+ currentAmount: AmountJson;
+ }
+
+
+}
+
+
+const DB_NAME = "taler";
+const DB_VERSION = 1;
+
+/**
+ * Return a promise that resolves
+ * to the taler wallet db.
+ */
+function openTalerDb(): Promise<IDBDatabase> {
+ return new Promise((resolve, reject) => {
+ let req = indexedDB.open(DB_NAME, DB_VERSION);
+ req.onerror = (e) => {
+ reject(e);
+ };
+ req.onsuccess = (e) => {
+ resolve(req.result);
+ };
+ req.onupgradeneeded = (e) => {
+ let db = req.result;
+ console.log ("DB: upgrade needed: oldVersion = " + e.oldVersion);
+ switch (e.oldVersion) {
+ case 0: // DB does not exist yet
+ let mints = db.createObjectStore("mints", { keyPath: "baseUrl" });
+ mints.createIndex("pubKey", "keys.master_public_key");
+ db.createObjectStore("reserves", { keyPath: "reserve_pub"});
+ db.createObjectStore("denoms", { keyPath: "denomPub" });
+ let coins = db.createObjectStore("coins", { keyPath: "coinPub" });
+ coins.createIndex("mintBaseUrl", "mintBaseUrl");
+ db.createObjectStore("transactions", { keyPath: "contractHash" });
+ db.createObjectStore("precoins", { keyPath: "coinPub", autoIncrement: true });
+ break;
+ }
+ };
+ });
+}