aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-10-05 18:31:56 +0200
committerFlorian Dold <florian@dold.me>2022-10-05 18:31:56 +0200
commit957f9a5efb26194a7911cdaf722502ba09e5bd58 (patch)
treed7edfb20814d8f9cf418457de0a3ff86c7690308 /packages/taler-wallet-core/src/operations
parent99ace8b7d24416f2b184d66006c89b61935e132e (diff)
downloadwallet-core-957f9a5efb26194a7911cdaf722502ba09e5bd58.tar.xz
wallet-core: fix default auditor/exchange loading logic
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/backup/import.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/exchanges.ts59
-rw-r--r--packages/taler-wallet-core/src/operations/pending.ts1
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts21
4 files changed, 45 insertions, 38 deletions
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts
index 9997dd09d..fb747ef1c 100644
--- a/packages/taler-wallet-core/src/operations/backup/import.ts
+++ b/packages/taler-wallet-core/src/operations/backup/import.ts
@@ -362,6 +362,8 @@ export async function importBackup(
lastUpdate: undefined,
nextUpdate: TalerProtocolTimestamp.now(),
nextRefreshCheck: TalerProtocolTimestamp.now(),
+ lastKeysEtag: undefined,
+ lastWireEtag: undefined,
});
}
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts
index 82222a5c4..60a4e91dd 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -63,7 +63,11 @@ import {
readSuccessResponseJsonOrThrow,
readSuccessResponseTextOrThrow,
} from "../util/http.js";
-import { DbAccess, GetReadOnlyAccess } from "../util/query.js";
+import {
+ DbAccess,
+ GetReadOnlyAccess,
+ GetReadWriteAccess,
+} from "../util/query.js";
import {
OperationAttemptResult,
OperationAttemptResultType,
@@ -316,33 +320,35 @@ async function downloadExchangeWireInfo(
return wireInfo;
}
-async function provideExchangeRecord(
+export async function provideExchangeRecordInTx(
ws: InternalWalletState,
+ tx: GetReadWriteAccess<{
+ exchanges: typeof WalletStoresV1.exchanges;
+ exchangeDetails: typeof WalletStoresV1.exchangeDetails;
+ }>,
baseUrl: string,
now: AbsoluteTime,
): Promise<{
exchange: ExchangeRecord;
exchangeDetails: ExchangeDetailsRecord | undefined;
}> {
- return await ws.db
- .mktx((x) => [x.exchanges, x.exchangeDetails])
- .runReadWrite(async (tx) => {
- let exchange = await tx.exchanges.get(baseUrl);
- if (!exchange) {
- const r: ExchangeRecord = {
- permanent: true,
- baseUrl: baseUrl,
- detailsPointer: undefined,
- lastUpdate: undefined,
- nextUpdate: AbsoluteTime.toTimestamp(now),
- nextRefreshCheck: AbsoluteTime.toTimestamp(now),
- };
- await tx.exchanges.put(r);
- exchange = r;
- }
- const exchangeDetails = await getExchangeDetails(tx, baseUrl);
- return { exchange, exchangeDetails };
- });
+ let exchange = await tx.exchanges.get(baseUrl);
+ if (!exchange) {
+ const r: ExchangeRecord = {
+ permanent: true,
+ baseUrl: baseUrl,
+ detailsPointer: undefined,
+ lastUpdate: undefined,
+ nextUpdate: AbsoluteTime.toTimestamp(now),
+ nextRefreshCheck: AbsoluteTime.toTimestamp(now),
+ lastKeysEtag: undefined,
+ lastWireEtag: undefined,
+ };
+ await tx.exchanges.put(r);
+ exchange = r;
+ }
+ const exchangeDetails = await getExchangeDetails(tx, baseUrl);
+ return { exchange, exchangeDetails };
}
interface ExchangeKeysDownloadResult {
@@ -499,15 +505,16 @@ export async function updateExchangeFromUrlHandler(
> {
const forceNow = options.forceNow ?? false;
logger.info(`updating exchange info for ${baseUrl}, forced: ${forceNow}`);
+ console.trace("here");
const now = AbsoluteTime.now();
baseUrl = canonicalizeBaseUrl(baseUrl);
- const { exchange, exchangeDetails } = await provideExchangeRecord(
- ws,
- baseUrl,
- now,
- );
+ const { exchange, exchangeDetails } = await ws.db
+ .mktx((x) => [x.exchanges, x.exchangeDetails])
+ .runReadWrite(async (tx) => {
+ return provideExchangeRecordInTx(ws, tx, baseUrl, now);
+ });
if (
!forceNow &&
diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts
index 0dcd09e25..156feadbb 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -50,6 +50,7 @@ async function gatherExchangePending(
now: AbsoluteTime,
resp: PendingOperationsResponse,
): Promise<void> {
+ // FIXME: We should do a range query here based on the update time.
await tx.exchanges.iter().forEachAsync(async (exch) => {
const opTag = RetryTags.forExchangeUpdate(exch);
let opr = await tx.operationRetries.get(opTag);
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index 143f9ce33..d768bbeb2 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -1071,7 +1071,7 @@ export async function processWithdrawalGroup(
case WithdrawalGroupStatus.QueryingStatus: {
const doQueryAsync = async () => {
if (ws.stopped) {
- logger.info("not long-polling reserve, wallet already stopped");
+ logger.trace("not long-polling reserve, wallet already stopped");
await storeOperationPending(ws, retryTag);
return;
}
@@ -1080,7 +1080,7 @@ export async function processWithdrawalGroup(
try {
ws.activeLongpoll[retryTag] = {
cancel: () => {
- logger.info("cancel of reserve longpoll requested");
+ logger.trace("cancel of reserve longpoll requested");
cts.cancel();
},
};
@@ -1094,16 +1094,13 @@ export async function processWithdrawalGroup(
return;
}
delete ws.activeLongpoll[retryTag];
- logger.info(
- `active longpoll keys (2) ${Object.keys(ws.activeLongpoll)}`,
- );
if (!res.ready) {
await storeOperationPending(ws, retryTag);
}
ws.latch.trigger();
};
doQueryAsync();
- logger.info(
+ logger.trace(
"returning early from withdrawal for long-polling in background",
);
return {
@@ -1918,12 +1915,12 @@ export async function acceptWithdrawalFromUri(
);
}
- // Start withdrawal in the background.
- await processWithdrawalGroup(ws, withdrawalGroupId, { forceNow: true }).catch(
- (err) => {
- logger.error("Processing withdrawal (after creation) failed:", err);
- },
- );
+ // Start withdrawal in the background
+ processWithdrawalGroup(ws, withdrawalGroupId, {
+ forceNow: true,
+ }).catch((err) => {
+ logger.error("Processing withdrawal (after creation) failed:", err);
+ });
return {
reservePub: withdrawalGroup.reservePub,