diff options
Diffstat (limited to 'packages/taler-wallet-core/src/util')
-rw-r--r-- | packages/taler-wallet-core/src/util/coinSelection.ts | 3 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/util/promiseUtils.ts | 40 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/util/query.ts | 2 |
3 files changed, 42 insertions, 3 deletions
diff --git a/packages/taler-wallet-core/src/util/coinSelection.ts b/packages/taler-wallet-core/src/util/coinSelection.ts index e06d7454b..be868867d 100644 --- a/packages/taler-wallet-core/src/util/coinSelection.ts +++ b/packages/taler-wallet-core/src/util/coinSelection.ts @@ -56,10 +56,8 @@ import { } from "@gnu-taler/taler-util"; import { DenominationRecord } from "../db.js"; import { - getAutoRefreshExecuteThreshold, getExchangeWireDetailsInTx, isWithdrawableDenom, - WalletDbReadOnlyTransaction, WalletDbReadOnlyTransactionArr, } from "../index.js"; import { InternalWalletState } from "../internal-wallet-state.js"; @@ -67,6 +65,7 @@ import { getMerchantPaymentBalanceDetails, getPeerPaymentBalanceDetailsInTx, } from "../operations/balance.js"; +import { getAutoRefreshExecuteThreshold } from "../operations/common.js"; import { checkDbInvariant, checkLogicInvariant } from "./invariants.js"; const logger = new Logger("coinSelection.ts"); diff --git a/packages/taler-wallet-core/src/util/promiseUtils.ts b/packages/taler-wallet-core/src/util/promiseUtils.ts index d152a12f4..bc1e40260 100644 --- a/packages/taler-wallet-core/src/util/promiseUtils.ts +++ b/packages/taler-wallet-core/src/util/promiseUtils.ts @@ -70,3 +70,43 @@ export class AsyncCondition { this.promCap = undefined; } } + +/** + * Flag that can be raised to notify asynchronous waiters. + * + * You can think of it as a promise that can + * be un-resolved. + */ +export class AsyncFlag { + private promCap?: OpenedPromise<void> = undefined; + private internalFlagRaised: boolean = false; + + constructor() {} + + /** + * Wait until the flag is raised. + * + * Reset if before returning. + */ + wait(): Promise<void> { + if (this.internalFlagRaised) { + return Promise.resolve(); + } + if (!this.promCap) { + this.promCap = openPromise<void>(); + } + return this.promCap.promise; + } + + raise(): void { + this.internalFlagRaised = true; + if (this.promCap) { + this.promCap.resolve(); + } + } + + reset(): void { + this.internalFlagRaised = false; + this.promCap = undefined; + } +} diff --git a/packages/taler-wallet-core/src/util/query.ts b/packages/taler-wallet-core/src/util/query.ts index d96a03c61..5fba61f11 100644 --- a/packages/taler-wallet-core/src/util/query.ts +++ b/packages/taler-wallet-core/src/util/query.ts @@ -919,7 +919,7 @@ export class DbAccess<StoreMap> { strStoreNames.push(swi.storeName); accessibleStores[swi.storeName] = swi; } - const tx = this.db.transaction(strStoreNames, "readwrite"); + const tx = this.db.transaction(strStoreNames, "readonly"); const readContext = makeReadContext(tx, accessibleStores); return runTx(tx, readContext, txf); } |