summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/taler-wallet-core/src/db.ts4
-rw-r--r--packages/taler-wallet-core/src/util/query.ts17
-rw-r--r--packages/taler-wallet-webextension/src/wxBackend.ts2
3 files changed, 18 insertions, 5 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index c457d0ffc..687418097 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -180,8 +180,8 @@ export async function openTalerDatabase(
return new Database(mainDbHandle, Stores);
}
-export function deleteTalerDatabase(idbFactory: IDBFactory): void {
- Database.deleteDatabase(idbFactory, TALER_DB_NAME);
+export function deleteTalerDatabase(idbFactory: IDBFactory): Promise<void> {
+ return Database.deleteDatabase(idbFactory, TALER_DB_NAME);
}
export enum ReserveRecordStatus {
diff --git a/packages/taler-wallet-core/src/util/query.ts b/packages/taler-wallet-core/src/util/query.ts
index 1ef75a420..7c2aea783 100644
--- a/packages/taler-wallet-core/src/util/query.ts
+++ b/packages/taler-wallet-core/src/util/query.ts
@@ -372,7 +372,17 @@ function runWithTransaction<T, StoreTypes extends Store<string, {}>>(
const stack = Error("Failed transaction was started here.");
return new Promise((resolve, reject) => {
const storeName = stores.map((x) => x.name);
- const tx = db.transaction(storeName, mode);
+
+ let txOrUndef: IDBTransaction | undefined = undefined
+ try {
+ txOrUndef = db.transaction(storeName, mode);
+ } catch (e) {
+ logger.error("error opening transaction");
+ logger.error(`${e}`);
+ return
+ }
+ const tx = txOrUndef;
+
let funResult: any = undefined;
let gotFunResult = false;
tx.oncomplete = () => {
@@ -513,8 +523,9 @@ export function openDatabase(
export class Database<StoreMap extends AnyStoreMap> {
constructor(private db: IDBDatabase, stores: StoreMap) {}
- static deleteDatabase(idbFactory: IDBFactory, dbName: string): void {
- idbFactory.deleteDatabase(dbName);
+ static deleteDatabase(idbFactory: IDBFactory, dbName: string): Promise<void> {
+ const req = idbFactory.deleteDatabase(dbName)
+ return requestToPromise(req)
}
async exportDatabase(): Promise<any> {
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts
index cb7b9295f..745fe0366 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -33,6 +33,7 @@ import {
Database,
Stores,
makeErrorDetails,
+ deleteTalerDatabase,
} from "@gnu-taler/taler-wallet-core";
import {
classifyTalerUri,
@@ -121,6 +122,7 @@ async function dispatch(
break;
}
case "reset-db": {
+ await deleteTalerDatabase(indexedDB);
r = wrapResponse(await reinitWallet());
break;
}