aboutsummaryrefslogtreecommitdiff
path: root/extension/background
diff options
context:
space:
mode:
Diffstat (limited to 'extension/background')
-rw-r--r--extension/background/wallet.js57
-rw-r--r--extension/background/wallet.ts74
2 files changed, 120 insertions, 11 deletions
diff --git a/extension/background/wallet.js b/extension/background/wallet.js
index 1cf180434..e5740e3b8 100644
--- a/extension/background/wallet.js
+++ b/extension/background/wallet.js
@@ -23,7 +23,7 @@ function openTalerDb() {
case 0:
db.createObjectStore("mints", { keyPath: "baseUrl" });
db.createObjectStore("reserves", { keyPath: "reserve_pub" });
- db.createObjectStore("denoms", { keyPath: "denom_pub" });
+ db.createObjectStore("denoms", { keyPath: "denomPub" });
db.createObjectStore("coins", { keyPath: "coinPub" });
db.createObjectStore("withdrawals", { keyPath: "id", autoIncrement: true });
db.createObjectStore("transactions", { keyPath: "id", autoIncrement: true });
@@ -343,8 +343,16 @@ function updateMintFromUrl(db, baseUrl) {
baseUrl: baseUrl,
keys: mintKeysJson
};
- let tx = db.transaction(['mints'], 'readwrite');
+ let tx = db.transaction(['mints', 'denoms'], 'readwrite');
tx.objectStore('mints').put(mint);
+ for (let d of mintKeysJson.denoms) {
+ // TODO: verify and complete
+ let di = {
+ denomPub: d.denom_pub,
+ value: d.value
+ };
+ tx.objectStore('denoms').put(di);
+ }
tx.oncomplete = (e) => {
resolve(mint);
};
@@ -384,13 +392,56 @@ function dumpDb(db, detail, sendResponse) {
}
return true;
}
+function reset(db, detail, sendResponse) {
+ let tx = db.transaction(db.objectStoreNames, 'readwrite');
+ for (let i = 0; i < db.objectStoreNames.length; i++) {
+ tx.objectStore(db.objectStoreNames[i]).clear();
+ }
+ indexedDB.deleteDatabase(DB_NAME);
+ console.log("reset done");
+ return false;
+}
+function balances(db, detail, sendResponse) {
+ let byCurrency = {};
+ let tx = db.transaction(['coins', 'denoms']);
+ let req = tx.objectStore('coins').openCursor();
+ req.onsuccess = (e) => {
+ let cursor = req.result;
+ if (cursor) {
+ tx.objectStore('denoms').get(cursor.value.denomPub).onsuccess = (e2) => {
+ let d = e2.target.result;
+ console.log("got denom", JSON.stringify(d));
+ let acc = byCurrency[d.value.currency];
+ if (!acc) {
+ acc = new Amount(d.value);
+ console.log("initial:", JSON.stringify(acc.toJson()));
+ byCurrency[d.value.currency] = acc.toJson();
+ }
+ else {
+ let am = new Amount(acc);
+ am.add(new Amount(d.value));
+ byCurrency[d.value.currency] = am.toJson();
+ console.log("then:", JSON.stringify(am.toJson()));
+ }
+ };
+ cursor.continue();
+ }
+ else {
+ sendResponse(byCurrency);
+ console.log("response", JSON.stringify(byCurrency));
+ }
+ };
+ return true;
+}
chrome.browserAction.setBadgeText({ text: "" });
openTalerDb().then((db) => {
console.log("db loaded");
chrome.runtime.onMessage.addListener(function (req, sender, onresponse) {
let dispatch = {
"confirm-reserve": confirmReserve,
- "dump-db": dumpDb
+ "dump-db": dumpDb,
+ "balances": balances,
+ "reset": reset
};
if (req.type in dispatch) {
return dispatch[req.type](db, req.detail, onresponse);
diff --git a/extension/background/wallet.ts b/extension/background/wallet.ts
index d4dcec209..96a2ab220 100644
--- a/extension/background/wallet.ts
+++ b/extension/background/wallet.ts
@@ -26,7 +26,7 @@ function openTalerDb(): Promise<IDBDatabase> {
case 0: // DB does not exist yet
db.createObjectStore("mints", { keyPath: "baseUrl" });
db.createObjectStore("reserves", { keyPath: "reserve_pub"});
- db.createObjectStore("denoms", { keyPath: "denom_pub" });
+ db.createObjectStore("denoms", { keyPath: "denomPub" });
db.createObjectStore("coins", { keyPath: "coinPub" });
db.createObjectStore("withdrawals", { keyPath: "id", autoIncrement: true });
db.createObjectStore("transactions", { keyPath: "id", autoIncrement: true });
@@ -126,15 +126,19 @@ function rankDenom(denom1: any, denom2: any) {
}
-interface ReservePub {
- reservePub: string;
-}
-interface CoinPub {
- coinPub: string;
+interface AmountJson {
+ value: number;
+ fraction: number;
+ currency: string;
}
+interface Denomination {
+ value: AmountJson;
+ denomPub: string;
+}
+
interface PreCoin {
coinPub: string;
coinPriv: string;
@@ -407,8 +411,16 @@ function updateMintFromUrl(db, baseUrl) {
baseUrl: baseUrl,
keys: mintKeysJson
};
- let tx = db.transaction(['mints'], 'readwrite');
+ let tx = db.transaction(['mints', 'denoms'], 'readwrite');
tx.objectStore('mints').put(mint);
+ for (let d of mintKeysJson.denoms) {
+ // TODO: verify and complete
+ let di = {
+ denomPub: d.denom_pub,
+ value: d.value
+ }
+ tx.objectStore('denoms').put(di);
+ }
tx.oncomplete = (e) => {
resolve(mint);
};
@@ -451,6 +463,50 @@ function dumpDb(db, detail, sendResponse) {
}
+// Just for debugging.
+function reset(db, detail, sendResponse) {
+ let tx = db.transaction(db.objectStoreNames, 'readwrite');
+ for (let i = 0; i < db.objectStoreNames.length; i++) {
+ tx.objectStore(db.objectStoreNames[i]).clear();
+ }
+ indexedDB.deleteDatabase(DB_NAME);
+ chrome.browserAction.setBadgeText({text: ""});
+ console.log("reset done");
+ return false;
+}
+
+
+function balances(db, detail, sendResponse) {
+ let byCurrency = {};
+ let tx = db.transaction(['coins', 'denoms']);
+ let req = tx.objectStore('coins').openCursor();
+ req.onsuccess = (e) => {
+ let cursor = req.result;
+ if (cursor) {
+ tx.objectStore('denoms').get(cursor.value.denomPub).onsuccess = (e2) => {
+ let d = e2.target.result;
+ console.log("got denom", JSON.stringify(d));
+ let acc = byCurrency[d.value.currency];
+ if (!acc) {
+ acc = new Amount(d.value);
+ console.log("initial:", JSON.stringify(acc.toJson()));
+ byCurrency[d.value.currency] = acc.toJson();
+ } else {
+ let am = new Amount(acc);
+ am.add(new Amount(d.value));
+ byCurrency[d.value.currency] = am.toJson();
+ console.log("then:", JSON.stringify(am.toJson()));
+ }
+ };
+ cursor.continue();
+ } else {
+ sendResponse(byCurrency);
+ console.log("response", JSON.stringify(byCurrency));
+ }
+ }
+ return true;
+}
+
chrome.browserAction.setBadgeText({text: ""});
openTalerDb().then((db) => {
@@ -459,7 +515,9 @@ openTalerDb().then((db) => {
function (req, sender, onresponse) {
let dispatch = {
"confirm-reserve": confirmReserve,
- "dump-db": dumpDb
+ "dump-db": dumpDb,
+ "balances": balances,
+ "reset": reset
}
if (req.type in dispatch) {
return dispatch[req.type](db, req.detail, onresponse);