aboutsummaryrefslogtreecommitdiff
path: root/extension/background/db.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2015-12-17 13:35:35 +0100
committerFlorian Dold <florian.dold@gmail.com>2015-12-17 13:35:35 +0100
commit464bbc3762906b3a61ddd85f4c207f140b2b750a (patch)
treebc3d58a3e5494b8f2ce6c88351c029684bf19f99 /extension/background/db.js
parentb93638b6935e7fb179385cd38a1691372b4c8432 (diff)
downloadwallet-core-464bbc3762906b3a61ddd85f4c207f140b2b750a.tar.xz
Move interfaces for db types to extra file.
Diffstat (limited to 'extension/background/db.js')
-rw-r--r--extension/background/db.js225
1 files changed, 5 insertions, 220 deletions
diff --git a/extension/background/db.js b/extension/background/db.js
index 9be933d9c..b52ee457a 100644
--- a/extension/background/db.js
+++ b/extension/background/db.js
@@ -1,220 +1,5 @@
-"use strict";
-
-var DB = function () {
- let DB = {}; // returned object with exported functions
-
- let DB_NAME = "taler";
- let DB_VERSION = 1;
-
- let db = null;
- let is_ready = null;
-
- DB.open = function (onsuccess, onerror)
- {
- is_ready = false;
-
- let req = indexedDB.open(DB_NAME, DB_VERSION);
- req.onerror = onerror;
- req.onsuccess = function (event)
- {
- db = event.target.result;
- is_ready = true;
- if (onsuccess)
- onsuccess();
- };
-
- req.onupgradeneeded = function (event)
- {
- console.log ("DB: upgrade needed: oldVersion = "+ event.oldVersion);
-
- db = event.target.result;
- db.onerror = onerror;
-
- switch (event.oldVersion)
- {
- case 0: // DB does not exist yet
- {
- let example = {};
-
- let mints = db.createObjectStore("mints", { keyPath: "mint_pub" });
- mints.createIndex("name", "name", { unique: true });
-
- example.mint = {
- mint_pub: "<mint's master pub key>", // length: 32
- name: "Mint One",
- url: "https://mint.one/",
- };
-
- let denoms = db.createObjectStore("denoms", { keyPath: "denom_pub" });
-
- example.denom = {
- denom_pub: "<denom pub key>", // length: 32
- mint_pub: "<mint's master pub key>", // length: 32
- mint_sig: "<mint's sig>", // length: 64
- withdraw_expiry_time: 1234567890,
- deposit_expiry_time: 1234567890,
- start_time: 1234567890,
- value: {
- value: 1,
- fraction: 230000, // 0..999999
- currency: "EUR",
- },
- fee: {
- withdraw: {
- value: 0,
- fraction: 100000,
- currency: "EUR",
- },
- deposit: {
- value: 0,
- fraction: 100000,
- currency: "EUR",
- },
- refresh: {
- value: 0,
- fraction: 100000,
- currency: "EUR",
- },
- },
- };
-
- let reserves = db.createObjectStore("reserves", { keyPath: "reserve_pub"});
- example.reserve = {
- reserve_pub: "<pub key>",
- reserve_priv: "<priv key>",
- mint_pub: "<mint's master pub key>",
- initial: {
- value: 1,
- fraction: 230000,
- currency: "EUR",
- },
- current: {
- value: 1,
- fraction: 230000,
- currency: "EUR",
- blind_session_pub: "<pub key>",
- status_sig: "<sig>",
- },
- };
-
- let withdrawals = db.createObjectStore("withdrawals", { keyPath: "id", autoIncrement: true });
- example.withdrawal = {
- id: 1, // generated
- reserve_pub: "<pub key>",
- reserve_sig: "<sig>",
- denom_pub: "<pub key",
- blind_session_pub: "<pub key>",
- blind_priv: "<priv key>",
- coin_pub: "<pub key>",
- coin_priv: "<priv key>",
- coin_ev: "",
- };
-
- let coins = db.createObjectStore("coins", { keyPath: "coin_pub" });
- example.coin = {
- // coin either has a withdraw_id or refresh_id
- // or it is imported in which case both are null
- withdraw_id: 1, // can be null
- refresh_id: null, // can be null
- is_refreshed: false,
- denom_pub: "<pub key>",
- coin_pub: "<pub key>",
- coin_priv: "<priv key>",
- denom_sig: "<sig>",
- spent: {
- value: 1,
- fraction: 230000,
- },
- transactions: [ 123, 456 ], // list of transaction IDs where this coin was used
- };
-
- let transactions = db.createObjectStore("transactions", { keyPath: "id", autoIncrement: true });
- example.transaction = {
- id: 1, // generated
- wire_hash: "<hash>",
- value: {
- value: 1,
- fraction: 230000,
- currency: "EUR",
- },
- contract: "<JSON>",
- is_checkout_done: true,
- is_confirmed: true,
- fulfillment_url: "https://some.shop/transaction/completed",
- };
-
- let refresh = db.createObjectStore("refresh");
- example.refresh = {
- // TODO
- };
- }
- }
-
- is_ready = true;
- if (onsuccess)
- onsuccess();
- }
- };
-
-
- DB.close = function ()
- {
- db.close();
- };
-
-
- DB.wallet_get = function (onresult, onerror)
- {
- let wallet = { };
-
- let tr = db.transaction([ "coins", "denoms" ], "readonly");
- let coins = tr.objectStore("coins");
- let denoms = tr.objectStore("denoms");
-
- let coins_cur = coins.openCursor();
- coins_cur.onerror = onerror;
- coins_cur.onsuccess = function ()
- {
- let cur = event.target.result;
- if (cur) {
- let denom_get = denoms.get(cur.valcue.denom_pub);
- denom_get.onerror = onerror;
- denom_get.onsuccess = function (event)
- {
- let denom = event.target.result;
- if (denom.currency in wallet)
- {
- let w = wallet[denom.currency];
- w.value += denom.value;
- w.fraction = (w.fraction + denom.fraction) % 1000000;
- if (1000000 <= w.fraction + denom.fraction)
- w.value++;
- }
- else
- {
- wallet[denom.currency] = denom;
- }
- cur.continue();
- }
- }
- else // no more entries
- {
- onresult(wallet);
- }
- };
- };
-
-
- DB.transaction_list = function (onresult, onerror)
- {
- // TODO
- };
-
-
- DB.reserve_list = function (onresult, onerror)
- {
- // TODO
- };
-
- return DB;
-}();
+/**
+ * Declarations and helpers for
+ * things that are stored in the wallet's
+ * database.
+ */