diff options
author | Florian Dold <florian@dold.me> | 2022-01-11 12:48:32 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-01-11 14:48:02 +0100 |
commit | a05e891d6e1468fdd99f710301e286857a46aea3 (patch) | |
tree | 5ea22817eb2cec888ff52a80dcd3a9986bd768fa /packages/taler-wallet-core/src/operations/recoup.ts | |
parent | fb22009ec4799a624f00c228fbd7435b44c1cbac (diff) | |
download | wallet-core-a05e891d6e1468fdd99f710301e286857a46aea3.tar.xz |
towards new recoup API
Diffstat (limited to 'packages/taler-wallet-core/src/operations/recoup.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/recoup.ts | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts index 8a4c2242a..559513d44 100644 --- a/packages/taler-wallet-core/src/operations/recoup.ts +++ b/packages/taler-wallet-core/src/operations/recoup.ts @@ -28,6 +28,7 @@ import { Amounts, codecForRecoupConfirmation, getTimestampNow, + j2s, NotificationType, RefreshReason, TalerErrorDetails, @@ -107,7 +108,7 @@ async function putGroupAsFinished( } } if (allFinished) { - logger.trace("all recoups of recoup group are finished"); + logger.info("all recoups of recoup group are finished"); recoupGroup.timestampFinished = getTimestampNow(); recoupGroup.retryInfo = initRetryInfo(); recoupGroup.lastError = undefined; @@ -178,8 +179,17 @@ async function recoupWithdrawCoin( type: NotificationType.RecoupStarted, }); - const recoupRequest = await ws.cryptoApi.createRecoupRequest(coin); + const recoupRequest = await ws.cryptoApi.createRecoupRequest({ + blindingKey: coin.blindingKey, + coinPriv: coin.coinPriv, + coinPub: coin.coinPub, + 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}`); const resp = await ws.http.postJson(reqUrl.href, recoupRequest, { timeout: getReserveRequestTimeout(reserve), }); @@ -188,6 +198,8 @@ async function recoupWithdrawCoin( codecForRecoupConfirmation(), ); + logger.trace(`got recoup confirmation ${j2s(recoupConfirmation)}`); + if (recoupConfirmation.reserve_pub !== reservePub) { throw Error(`Coin's reserve doesn't match reserve on recoup`); } @@ -249,7 +261,15 @@ async function recoupRefreshCoin( type: NotificationType.RecoupStarted, }); - const recoupRequest = await ws.cryptoApi.createRecoupRequest(coin); + const recoupRequest = await ws.cryptoApi.createRecoupRefreshRequest({ + blindingKey: coin.blindingKey, + coinPriv: coin.coinPriv, + coinPub: coin.coinPub, + denomPub: coin.denomPub, + denomPubHash: coin.denomPubHash, + denomSig: coin.denomSig, + recoupAmount: coin.currentAmount, + }); const reqUrl = new URL(`/coins/${coin.coinPub}/recoup`, coin.exchangeBaseUrl); logger.trace(`making recoup request for ${coin.coinPub}`); @@ -359,9 +379,14 @@ async function processRecoupGroupImpl( logger.trace("recoup group finished"); return; } - const ps = recoupGroup.coinPubs.map((x, i) => - processRecoup(ws, recoupGroupId, i), - ); + const ps = recoupGroup.coinPubs.map(async (x, i) => { + try { + processRecoup(ws, recoupGroupId, i); + } catch (e) { + logger.warn(`processRecoup failed: ${e}`); + throw e; + } + }); await Promise.all(ps); const reserveSet = new Set<string>(); |