aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-util/src/logging.ts24
-rw-r--r--packages/taler-wallet-core/src/db.ts6
-rw-r--r--packages/taler-wallet-core/src/host-impl.node.ts6
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts2
-rw-r--r--packages/taler-wallet-core/src/util/promiseUtils.ts17
-rw-r--r--packages/taler-wallet-core/src/util/query.ts17
-rw-r--r--packages/taler-wallet-webextension/src/wxBackend.ts2
7 files changed, 59 insertions, 15 deletions
diff --git a/packages/taler-util/src/logging.ts b/packages/taler-util/src/logging.ts
index d17baba66..663bc59c8 100644
--- a/packages/taler-util/src/logging.ts
+++ b/packages/taler-util/src/logging.ts
@@ -37,6 +37,28 @@ const byTagLogLevel: Record<string, LogLevel> = {};
let nativeLogging: boolean = false;
+
+// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/toString
+Error.prototype.toString = function () {
+ if (
+ this === null ||
+ (typeof this !== "object" && typeof this !== "function")
+ ) {
+ throw new TypeError();
+ }
+ let name = this.name;
+ name = name === undefined ? "Error" : `${name}`;
+ let msg = this.message;
+ msg = msg === undefined ? "" : `${msg}`;
+
+ let cause = ""
+ if ("cause" in this) {
+ cause = `\n Caused by: ${this.cause}`
+ }
+ return `${name}: ${msg}${cause}`;
+};
+
+
export function getGlobalLogLevel(): string {
return globalLogLevel;
}
@@ -126,7 +148,7 @@ function writeNodeLog(
* and uses the corresponding console.* method to log in the browser.
*/
export class Logger {
- constructor(private tag: string) {}
+ constructor(private tag: string) { }
shouldLogTrace(): boolean {
const level = byTagLogLevel[this.tag] ?? globalLogLevel;
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index b0605cb1d..705df48b1 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -3012,8 +3012,10 @@ function upgradeFromStoreMap(
});
} catch (e) {
const moreInfo = e instanceof Error ? ` Reason: ${e.message}` : "";
- throw Error(
+ throw new Error(
`Migration failed. Could not create store ${swi.storeName}.${moreInfo}`,
+ // @ts-expect-error no support for options.cause yet
+ { cause: e },
);
}
}
@@ -3040,6 +3042,8 @@ function upgradeFromStoreMap(
const moreInfo = e instanceof Error ? ` Reason: ${e.message}` : "";
throw Error(
`Migration failed. Could not create index ${indexDesc.name}/${indexDesc.keyPath}. ${moreInfo}`,
+ // @ts-expect-error no support for options.cause yet
+ { cause: e },
);
}
}
diff --git a/packages/taler-wallet-core/src/host-impl.node.ts b/packages/taler-wallet-core/src/host-impl.node.ts
index fefee1067..622ea742e 100644
--- a/packages/taler-wallet-core/src/host-impl.node.ts
+++ b/packages/taler-wallet-core/src/host-impl.node.ts
@@ -68,7 +68,11 @@ async function makeFileDb(
logger.trace("wallet file doesn't exist yet");
} else {
logger.error("could not open wallet database file");
- throw e;
+ throw Error(
+ "could not open wallet database file",
+ // @ts-expect-error no support for options.cause yet
+ { cause: e },
+ );
}
}
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index d664a6da6..86f05478a 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -2116,7 +2116,7 @@ async function registerReserveWithBank(
if (
withdrawalGroup.wgInfo.withdrawalType != WithdrawalRecordType.BankIntegrated
) {
- throw Error();
+ throw Error("expecting withdrarwal type = bank integrated");
}
const bankInfo = withdrawalGroup.wgInfo.bankInfo;
if (!bankInfo) {
diff --git a/packages/taler-wallet-core/src/util/promiseUtils.ts b/packages/taler-wallet-core/src/util/promiseUtils.ts
index df4cc343b..d152a12f4 100644
--- a/packages/taler-wallet-core/src/util/promiseUtils.ts
+++ b/packages/taler-wallet-core/src/util/promiseUtils.ts
@@ -23,6 +23,7 @@ export interface OpenedPromise<T> {
promise: Promise<T>;
resolve: (val: T) => void;
reject: (err: any) => void;
+ lastError?: any;
}
/**
@@ -33,16 +34,22 @@ export interface OpenedPromise<T> {
*/
export function openPromise<T>(): OpenedPromise<T> {
let resolve: ((x?: any) => void) | null = null;
- let reject: ((reason?: any) => void) | null = null;
+ let promiseReject: ((reason?: any) => void) | null = null;
const promise = new Promise<T>((res, rej) => {
resolve = res;
- reject = rej;
+ promiseReject = rej;
});
- if (!(resolve && reject)) {
+ if (!(resolve && promiseReject)) {
// Never happens, unless JS implementation is broken
- throw Error();
+ throw Error("JS implementation is broken");
}
- return { resolve, reject, promise };
+ const result: OpenedPromise<T> = { resolve, reject: promiseReject, promise };
+ function saveLastError(reason?: any) {
+ result.lastError = reason;
+ promiseReject!(reason);
+ }
+ result.reject = saveLastError;
+ return result;
}
export class AsyncCondition {
diff --git a/packages/taler-wallet-core/src/util/query.ts b/packages/taler-wallet-core/src/util/query.ts
index efb1a3f42..8274e252b 100644
--- a/packages/taler-wallet-core/src/util/query.ts
+++ b/packages/taler-wallet-core/src/util/query.ts
@@ -34,6 +34,7 @@ import {
IDBCursor,
IDBKeyPath,
IDBKeyRange,
+ IDBOpenDBRequest,
} from "@gnu-taler/idb-bridge";
import { Codec, Logger, j2s } from "@gnu-taler/taler-util";
@@ -250,9 +251,9 @@ export function openDatabase(
): Promise<IDBDatabase> {
return new Promise<IDBDatabase>((resolve, reject) => {
const req = idbFactory.open(databaseName, databaseVersion);
- req.onerror = (e) => {
- logger.error("database error", e);
- reject(new Error("database error"));
+ req.onerror = (event) => {
+ // @ts-expect-error
+ reject(new Error(`database opening error`, { cause: req.error }));
};
req.onsuccess = (e) => {
req.result.onversionchange = (evt: IDBVersionChangeEvent) => {
@@ -268,11 +269,17 @@ export function openDatabase(
const db = req.result;
const newVersion = e.newVersion;
if (!newVersion) {
- throw Error("upgrade needed, but new version unknown");
+ // @ts-expect-error
+ throw Error("upgrade needed, but new version unknown", {
+ cause: req.error,
+ });
}
const transaction = req.transaction;
if (!transaction) {
- throw Error("no transaction handle available in upgrade handler");
+ // @ts-expect-error
+ throw Error("no transaction handle available in upgrade handler", {
+ cause: req.error,
+ });
}
logger.info(
`handling upgradeneeded event on ${databaseName} from ${e.oldVersion} to ${e.newVersion}`,
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts
index 95d31c519..c8df7d6ca 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -232,7 +232,7 @@ async function dispatch<
error: makeErrorDetail(
TalerErrorCode.WALLET_CORE_NOT_AVAILABLE,
{},
- "wallet core not available",
+ `wallet core not available, last error: ${walletInit.lastError}`,
),
};
}