aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/db.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-12-01 18:16:40 +0100
committerFlorian Dold <florian@dold.me>2021-12-01 18:16:47 +0100
commit668ffa7302d9f1629848c250904fd269979bb8b0 (patch)
tree4a32d212d1146383bb4bd16132dec4fa09845f73 /packages/taler-wallet-core/src/db.ts
parentb0c2a73146907b2edeb1d2c97536478c995eb73b (diff)
downloadwallet-core-668ffa7302d9f1629848c250904fd269979bb8b0.tar.xz
wallet-core: implement exportDb API call
Diffstat (limited to 'packages/taler-wallet-core/src/db.ts')
-rw-r--r--packages/taler-wallet-core/src/db.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index 2d818f1db..4296d0503 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -41,6 +41,7 @@ import {
} from "@gnu-taler/taler-util";
import { RetryInfo } from "./util/retries.js";
import { PayCoinSelection } from "./util/coinSelection.js";
+import { Event, IDBDatabase } from "@gnu-taler/idb-bridge";
/**
* Name of the Taler database. This is effectively the major
@@ -1773,3 +1774,33 @@ export const walletMetadataStore = {
{},
),
};
+
+export 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();
+ }
+ });
+ }
+ });
+}