aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2022-01-12 15:51:56 +0100
committerFlorian Dold <florian@dold.me>2022-01-12 15:51:56 +0100
commitdc596f1f4d494c3bf9e57253d773205dc0479179 (patch)
tree9c5dc7e51a9c21582819be6ad1779937a8d71378 /packages/taler-wallet-core/src/operations
parentdbdad96b27619b8190571b899d3b11dd6af39335 (diff)
downloadwallet-core-dc596f1f4d494c3bf9e57253d773205dc0479179.tar.xz
implement latest recoup protocol
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
-rw-r--r--packages/taler-wallet-core/src/operations/backup/import.ts1
-rw-r--r--packages/taler-wallet-core/src/operations/recoup.ts27
-rw-r--r--packages/taler-wallet-core/src/operations/reserves.ts2
3 files changed, 14 insertions, 16 deletions
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts
index 5ca1ebb9d..9f63441dd 100644
--- a/packages/taler-wallet-core/src/operations/backup/import.ts
+++ b/packages/taler-wallet-core/src/operations/backup/import.ts
@@ -457,7 +457,6 @@ export async function importBackup(
exchangeBaseUrl: backupExchangeDetails.base_url,
reservePub,
reservePriv: backupReserve.reserve_priv,
- requestedQuery: false,
bankInfo,
timestampCreated: backupReserve.timestamp_created,
timestampBankConfirmed:
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts
index 559513d44..9ae045cfa 100644
--- a/packages/taler-wallet-core/src/operations/recoup.ts
+++ b/packages/taler-wallet-core/src/operations/recoup.ts
@@ -43,6 +43,7 @@ import {
ReserveRecordStatus,
WithdrawCoinSource,
WalletStoresV1,
+ OperationStatus,
} from "../db.js";
import { readSuccessResponseJsonOrThrow } from "../util/http.js";
@@ -186,7 +187,6 @@ async function recoupWithdrawCoin(
denomPub: coin.denomPub,
denomPubHash: coin.denomPubHash,
denomSig: coin.denomSig,
- recoupAmount: coin.currentAmount,
});
const reqUrl = new URL(`/coins/${coin.coinPub}/recoup`, coin.exchangeBaseUrl);
logger.trace(`requesting recoup via ${reqUrl.href}`);
@@ -233,13 +233,9 @@ async function recoupWithdrawCoin(
updatedCoin.status = CoinStatus.Dormant;
const currency = updatedCoin.currentAmount.currency;
updatedCoin.currentAmount = Amounts.getZero(currency);
- if (updatedReserve.reserveStatus === ReserveRecordStatus.DORMANT) {
- updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
- updatedReserve.retryInfo = initRetryInfo();
- } else {
- updatedReserve.requestedQuery = true;
- updatedReserve.retryInfo = initRetryInfo();
- }
+ updatedReserve.reserveStatus = ReserveRecordStatus.QUERYING_STATUS;
+ updatedReserve.retryInfo = initRetryInfo();
+ updatedReserve.operationStatus = OperationStatus.Pending;
await tx.coins.put(updatedCoin);
await tx.reserves.put(updatedReserve);
await putGroupAsFinished(ws, tx, recoupGroup, coinIdx);
@@ -268,9 +264,11 @@ async function recoupRefreshCoin(
denomPub: coin.denomPub,
denomPubHash: coin.denomPubHash,
denomSig: coin.denomSig,
- recoupAmount: coin.currentAmount,
});
- const reqUrl = new URL(`/coins/${coin.coinPub}/recoup`, coin.exchangeBaseUrl);
+ const reqUrl = new URL(
+ `/coins/${coin.coinPub}/recoup-refresh`,
+ coin.exchangeBaseUrl,
+ );
logger.trace(`making recoup request for ${coin.coinPub}`);
const resp = await ws.http.postJson(reqUrl.href, recoupRequest);
@@ -381,7 +379,7 @@ async function processRecoupGroupImpl(
}
const ps = recoupGroup.coinPubs.map(async (x, i) => {
try {
- processRecoup(ws, recoupGroupId, i);
+ await processRecoup(ws, recoupGroupId, i);
} catch (e) {
logger.warn(`processRecoup failed: ${e}`);
throw e;
@@ -408,7 +406,7 @@ async function processRecoupGroupImpl(
}
for (const r of reserveSet.values()) {
- processReserve(ws, r).catch((e) => {
+ processReserve(ws, r, true).catch((e) => {
logger.error(`processing reserve ${r} after recoup failed`);
});
}
@@ -460,6 +458,9 @@ export async function createRecoupGroup(
return recoupGroupId;
}
+/**
+ * Run the recoup protocol for a single coin in a recoup group.
+ */
async function processRecoup(
ws: InternalWalletState,
recoupGroupId: string,
@@ -486,7 +487,7 @@ async function processRecoup(
const coin = await tx.coins.get(coinPub);
if (!coin) {
- throw Error(`Coin ${coinPub} not found, can't request payback`);
+ throw Error(`Coin ${coinPub} not found, can't request recoup`);
}
return coin;
});
diff --git a/packages/taler-wallet-core/src/operations/reserves.ts b/packages/taler-wallet-core/src/operations/reserves.ts
index 1550d946b..7d7b26aba 100644
--- a/packages/taler-wallet-core/src/operations/reserves.ts
+++ b/packages/taler-wallet-core/src/operations/reserves.ts
@@ -155,7 +155,6 @@ export async function createReserve(
retryInfo: initRetryInfo(),
lastError: undefined,
currency: req.amount.currency,
- requestedQuery: false,
operationStatus: OperationStatus.Pending,
};
@@ -255,7 +254,6 @@ export async function forceQueryReserve(
reserve.operationStatus = OperationStatus.Pending;
break;
default:
- reserve.requestedQuery = true;
break;
}
reserve.retryInfo = initRetryInfo();