gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-wallet-webex] 01/05: headless wallet skeleton, type


From: gnunet
Subject: [GNUnet-SVN] [taler-wallet-webex] 01/05: headless wallet skeleton, type fixes
Date: Thu, 01 Aug 2019 23:21:21 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-webex.

commit 16ecbc9f177f1f71048840edf9b7af20ace3aad8
Author: Florian Dold <address@hidden>
AuthorDate: Sun Jul 21 23:50:10 2019 +0200

    headless wallet skeleton, type fixes
---
 gulpfile.js                                 |   1 +
 package.json                                |   3 +
 packages/idb-bridge/package.json            |   9 +-
 packages/idb-bridge/src/BridgeIDBFactory.ts |   2 +-
 packages/idb-bridge/src/MemoryBackend.ts    |   2 -
 packages/idb-bridge/tsconfig.json           |   1 +
 src/http.ts                                 |   2 +-
 src/query.ts                                |   2 +-
 src/wallet.ts                               |   4 +-
 src/walletTypes.ts                          |   2 +-
 src/webex/pages/return-coins.tsx            |   2 +-
 src/webex/wxBackend.ts                      | 142 +++-------------------------
 tsconfig.json                               |   5 +-
 yarn.lock                                   |  11 ++-
 14 files changed, 43 insertions(+), 145 deletions(-)

diff --git a/gulpfile.js b/gulpfile.js
index cbcd366e..fb99d0a7 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -110,6 +110,7 @@ const tsBaseArgs = {
   allowJs: true,
   checkJs: true,
   noUnusedLocals: true,
+  incremental: true,
 };
 
 
diff --git a/package.json b/package.json
index 90f4ec58..42a2712b 100644
--- a/package.json
+++ b/package.json
@@ -57,5 +57,8 @@
     "webpack-bundle-analyzer": "^3.0.2",
     "webpack-cli": "^3.1.0",
     "webpack-merge": "^4.1.0"
+  },
+  "dependencies": {
+    "commander": "^2.20.0"
   }
 }
diff --git a/packages/idb-bridge/package.json b/packages/idb-bridge/package.json
index 52396bfe..940f1747 100644
--- a/packages/idb-bridge/package.json
+++ b/packages/idb-bridge/package.json
@@ -2,15 +2,14 @@
   "name": "idb-bridge",
   "version": "0.0.1",
   "description": "IndexedDB implementation that uses SQLite3 as storage",
-  "main": "index.js",
+  "main": "./build/index.js",
+  "types": "./build/index.d.ts",
   "author": "Florian Dold",
   "license": "AGPL-3.0-or-later",
   "private": false,
-  "dependencies": {
-    "sqlite3": "^4.0.8"
-  },
   "scripts": {
-    "test": "tsc && ava"
+    "test": "tsc && ava",
+    "build": "tsc"
   },
   "devDependencies": {
     "ava": "2.1.0",
diff --git a/packages/idb-bridge/src/BridgeIDBFactory.ts 
b/packages/idb-bridge/src/BridgeIDBFactory.ts
index ad02be46..f6234b49 100644
--- a/packages/idb-bridge/src/BridgeIDBFactory.ts
+++ b/packages/idb-bridge/src/BridgeIDBFactory.ts
@@ -27,7 +27,7 @@ import queueTask from "./util/queueTask";
 
 type DatabaseList = Array<{ name: string; version: number }>;
 
-class BridgeIDBFactory {
+export class BridgeIDBFactory {
   public cmp = compareKeys;
   private backend: Backend;
   private connections: BridgeIDBDatabase[] = [];
diff --git a/packages/idb-bridge/src/MemoryBackend.ts 
b/packages/idb-bridge/src/MemoryBackend.ts
index bd9b8996..1a85a739 100644
--- a/packages/idb-bridge/src/MemoryBackend.ts
+++ b/packages/idb-bridge/src/MemoryBackend.ts
@@ -881,8 +881,6 @@ export class MemoryBackend implements Backend {
       // if requested.
       if (req.resultLevel === ResultLevel.Full) {
         for (let i = 0; i < numResults; i++) {
-          console.log("getting value for index", i);
-          console.log("with key", primaryKeys[i]);
           const result = storeData.get(primaryKeys[i]);
           if (!result) {
             throw Error("invariant violated");
diff --git a/packages/idb-bridge/tsconfig.json 
b/packages/idb-bridge/tsconfig.json
index 1b9102e4..9f076388 100644
--- a/packages/idb-bridge/tsconfig.json
+++ b/packages/idb-bridge/tsconfig.json
@@ -6,6 +6,7 @@
         "noImplicitAny": true,
         "sourceMap": false,
         "outDir": "build",
+        "declaration": true,
         "noEmitOnError": true,
         "strict": true,
         "incremental": true,
diff --git a/src/http.ts b/src/http.ts
index 895b1097..a102b397 100644
--- a/src/http.ts
+++ b/src/http.ts
@@ -44,7 +44,7 @@ export interface HttpRequestLibrary {
  * An implementation of the [[HttpRequestLibrary]] using the
  * browser's XMLHttpRequest.
  */
-export class BrowserHttpLib {
+export class BrowserHttpLib implements HttpRequestLibrary {
   private req(method: string,
               url: string,
               options?: any): Promise<HttpResponse> {
diff --git a/src/query.ts b/src/query.ts
index 68074ec0..5feb29a5 100644
--- a/src/query.ts
+++ b/src/query.ts
@@ -580,7 +580,7 @@ class IterQueryStream<T> extends QueryStreamBase<T> {
  */
 export class QueryRoot {
   private work: Array<((t: IDBTransaction) => void)> = [];
-  private stores = new Set();
+  private stores: Set<string> = new Set();
   private kickoffPromise: Promise<void>;
 
   /**
diff --git a/src/wallet.ts b/src/wallet.ts
index 0dfb7755..fd7887a8 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -2727,14 +2727,14 @@ export class Wallet {
       exchangeWireTypes[e] = Array.from(m[e]);
     });
 
-    const senderWiresSet = new Set();
+    const senderWiresSet: Set<string> = new Set();
     await this.q()
       .iter(Stores.senderWires)
       .map(x => {
         senderWiresSet.add(x.paytoUri);
       })
       .run();
-    const senderWires = Array.from(senderWiresSet);
+    const senderWires: string[] = Array.from(senderWiresSet);
 
     return {
       exchangeWireTypes,
diff --git a/src/walletTypes.ts b/src/walletTypes.ts
index 73a72bbb..f9d753f2 100644
--- a/src/walletTypes.ts
+++ b/src/walletTypes.ts
@@ -303,7 +303,7 @@ export interface SenderWireInfos {
   /**
    * Sender wire information stored in the wallet.
    */
-  senderWires: object[];
+  senderWires: string[];
 }
 
 
diff --git a/src/webex/pages/return-coins.tsx b/src/webex/pages/return-coins.tsx
index 278f8af9..b5d53c31 100644
--- a/src/webex/pages/return-coins.tsx
+++ b/src/webex/pages/return-coins.tsx
@@ -55,7 +55,7 @@ interface ReturnSelectionItemProps extends 
ReturnSelectionListProps {
 
 interface ReturnSelectionItemState {
   selectedValue: string;
-  supportedWires: object[];
+  supportedWires: string[];
   selectedWire: string;
   currency: string;
 }
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
index f2dbd68b..0baa7d41 100644
--- a/src/webex/wxBackend.ts
+++ b/src/webex/wxBackend.ts
@@ -26,10 +26,6 @@
  */
 import { BrowserHttpLib } from "../http";
 import * as logging from "../logging";
-import {
-  Index,
-  Store,
-} from "../query";
 
 import { AmountJson } from "../amounts";
 
@@ -48,10 +44,11 @@ import { isFirefox } from "./compat";
 
 import {
   PurchaseRecord,
-  Stores,
   WALLET_DB_VERSION,
 } from "../dbTypes";
 
+import { openTalerDb, exportDb, importDb, deleteDb } from "../db";
+
 
 import { ChromeBadge } from "./chromeBadge";
 import { MessageType } from "./messages";
@@ -62,9 +59,6 @@ import Port = chrome.runtime.Port;
 import MessageSender = chrome.runtime.MessageSender;
 import { TipToken } from "../talerTypes";
 
-
-const DB_NAME = "taler";
-
 const NeedsWallet = Symbol("NeedsWallet");
 
 function handleMessage(sender: MessageSender,
@@ -104,7 +98,7 @@ function handleMessage(sender: MessageSender,
           tx.objectStore(db.objectStoreNames[i]).clear();
         }
       }
-      deleteDb();
+      deleteDb(indexedDB);
       setBadgeText({ text: "" });
       console.log("reset done");
       if (!currentWallet) {
@@ -688,6 +682,17 @@ let currentWallet: Wallet|undefined;
  */
 let oldDbVersion: number|undefined;
 
+function handleUpgradeUnsupported(oldDbVersion: number, newDbVersion: number) {
+  console.log("DB migration not supported");
+  chrome.tabs.create({
+    url: chrome.extension.getURL(
+      "/src/webex/pages/reset-required.html",
+    ),
+  });
+  setBadgeText({ text: "err" });
+  chrome.browserAction.setBadgeBackgroundColor({ color: "#F00" });
+}
+
 
 async function reinitWallet() {
   if (currentWallet) {
@@ -698,7 +703,7 @@ async function reinitWallet() {
   const badge = new ChromeBadge();
   let db: IDBDatabase;
   try {
-    db = await openTalerDb();
+    db = await openTalerDb(indexedDB, reinitWallet, handleUpgradeUnsupported);
   } catch (e) {
     console.error("could not open database", e);
     return;
@@ -867,120 +872,3 @@ export async function wxMain() {
     }
   }, { urls: ["<all_urls>"] }, ["responseHeaders", "blocking"]);
 }
-
-
-/**
- * Return a promise that resolves
- * to the taler wallet db.
- */
-function openTalerDb(): Promise<IDBDatabase> {
-  return new Promise<IDBDatabase>((resolve, reject) => {
-    const req = indexedDB.open(DB_NAME, WALLET_DB_VERSION);
-    req.onerror = (e) => {
-      console.log("taler database error", e);
-      reject(e);
-    };
-    req.onsuccess = (e) => {
-      req.result.onversionchange = (evt: IDBVersionChangeEvent) => {
-        console.log(`handling live db version change from ${evt.oldVersion} to 
${evt.newVersion}`);
-        req.result.close();
-        reinitWallet();
-      };
-      resolve(req.result);
-    };
-    req.onupgradeneeded = (e) => {
-      const db = req.result;
-      console.log(`DB: upgrade needed: oldVersion=${e.oldVersion}, 
newVersion=${e.newVersion}`);
-      switch (e.oldVersion) {
-        case 0: // DB does not exist yet
-
-          for (const n in Stores) {
-            if ((Stores as any)[n] instanceof Store) {
-              const si: Store<any> = (Stores as any)[n];
-              const s = db.createObjectStore(si.name, si.storeParams);
-              for (const indexName in (si as any)) {
-                if ((si as any)[indexName] instanceof Index) {
-                  const ii: Index<any, any> = (si as any)[indexName];
-                  s.createIndex(ii.indexName, ii.keyPath, ii.options);
-                }
-              }
-            }
-          }
-          break;
-        default:
-          if (e.oldVersion !== WALLET_DB_VERSION) {
-            oldDbVersion = e.oldVersion;
-            chrome.tabs.create({
-              url: 
chrome.extension.getURL("/src/webex/pages/reset-required.html"),
-            });
-            setBadgeText({text: "err"});
-            chrome.browserAction.setBadgeBackgroundColor({color: "#F00"});
-            throw Error("incompatible DB");
-          }
-          break;
-      }
-    };
-  });
-}
-
-
-function exportDb(db: IDBDatabase): Promise<any> {
-  const dump = {
-    name: db.name,
-    stores: {} as {[s: string]: any},
-    version: db.version,
-  };
-
-  return new Promise((resolve, reject) => {
-
-    const tx = db.transaction(Array.from(db.objectStoreNames));
-    tx.addEventListener("complete", () => {
-      resolve(dump);
-    });
-    // tslint:disable-next-line:prefer-for-of
-    for (let i = 0; i < db.objectStoreNames.length; i++) {
-      const name = db.objectStoreNames[i];
-      const storeDump = {} as {[s: string]: any};
-      dump.stores[name] = storeDump;
-      tx.objectStore(name)
-        .openCursor()
-        .addEventListener("success", (e: Event) => {
-          const cursor = (e.target as any).result;
-          if (cursor) {
-            storeDump[cursor.key] = cursor.value;
-            cursor.continue();
-          }
-        });
-    }
-  });
-}
-
-
-function importDb(db: IDBDatabase, dump: any): Promise<void> {
-  console.log("importing db", dump);
-  return new Promise<void>((resolve, reject) => {
-    const tx = db.transaction(Array.from(db.objectStoreNames), "readwrite");
-    if (dump.stores) {
-      for (const storeName in dump.stores) {
-        const objects = [];
-        const dumpStore = dump.stores[storeName];
-        for (const key in dumpStore) {
-          objects.push(dumpStore[key]);
-        }
-        console.log(`importing ${objects.length} records into ${storeName}`);
-        const store = tx.objectStore(storeName);
-        for (const obj of objects) {
-          store.put(obj);
-        }
-      }
-    }
-    tx.addEventListener("complete", () => {
-      resolve();
-    });
-  });
-}
-
-
-function deleteDb() {
-  indexedDB.deleteDatabase(DB_NAME);
-}
diff --git a/tsconfig.json b/tsconfig.json
index 081140fa..db44f039 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -19,7 +19,8 @@
     "noImplicitAny": true,
     "allowJs": true,
     "checkJs": true,
-    "noUnusedLocals": true
+    "noUnusedLocals": true,
+    "incremental": true
   },
   "files": [
     "decl/chrome/chrome.d.ts",
@@ -37,7 +38,9 @@
     "src/crypto/nodeWorker.ts",
     "src/crypto/nodeWorkerEntry.ts",
     "src/crypto/startWorker.js",
+    "src/db.ts",
     "src/dbTypes.ts",
+    "src/headless/taler-wallet-cli.ts",
     "src/helpers-test.ts",
     "src/helpers.ts",
     "src/http.ts",
diff --git a/yarn.lock b/yarn.lock
index f624383b..76c42889 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1671,6 +1671,11 @@ commander@^2.12.1, commander@^2.18.0, commander@^2.19.0, 
commander@~2.19.0:
   resolved 
"https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a";
   integrity 
sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
 
+commander@^2.20.0:
+  version "2.20.0"
+  resolved 
"https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422";
+  integrity 
sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
 common-path-prefix@^1.0.0:
   version "1.0.0"
   resolved 
"https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0";
@@ -6323,9 +6328,9 @@ typescript@3.2.x:
   integrity 
sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==
 
 typescript@^3.3.4000:
-  version "3.3.4000"
-  resolved 
"https://registry.yarnpkg.com/typescript/-/typescript-3.3.4000.tgz#76b0f89cfdbf97827e1112d64f283f1151d6adf0";
-  integrity 
sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==
+  version "3.5.3"
+  resolved 
"https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977";
+  integrity 
sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
 
 uglify-js@^3.0.27, uglify-js@^3.1.4:
   version "3.5.2"

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]