From 8e1622a915387427590899a3a515d7556d2bc665 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 1 Nov 2022 13:39:42 +0100 Subject: wallet-core: better KYC error message --- .../taler-wallet-core/src/operations/withdraw.ts | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'packages/taler-wallet-core/src/operations/withdraw.ts') diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts index 6be7c7614..0e6bb8339 100644 --- a/packages/taler-wallet-core/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -47,6 +47,7 @@ import { ExchangeWithdrawRequest, ForcedDenomSel, getRandomBytes, + HttpStatusCode, j2s, LibtoolVersion, Logger, @@ -527,6 +528,23 @@ async function processPlanchetExchangeRequest( try { const resp = await ws.http.postJson(reqUrl, reqBody); + if (resp.status === HttpStatusCode.UnavailableForLegalReasons) { + logger.info("withdrawal requires KYC"); + await ws.db + .mktx((x) => [x.planchets]) + .runReadWrite(async (tx) => { + let planchet = await tx.planchets.indexes.byGroupAndIndex.get([ + withdrawalGroup.withdrawalGroupId, + coinIdx, + ]); + if (!planchet) { + return; + } + planchet.planchetStatus = PlanchetStatus.KycRequired; + await tx.planchets.put(planchet); + }); + return; + } const r = await readSuccessResponseJsonOrThrow( resp, codecForWithdrawResponse(), @@ -1126,6 +1144,7 @@ export async function processWithdrawalGroup( await Promise.all(work); let numFinished = 0; + let numKycRequired = 0; let finishedForFirstTime = false; let errorsPerCoin: Record = {}; @@ -1143,6 +1162,9 @@ export async function processWithdrawalGroup( if (x.planchetStatus === PlanchetStatus.WithdrawalDone) { numFinished++; } + if (x.planchetStatus === PlanchetStatus.KycRequired) { + numKycRequired++; + } if (x.lastError) { errorsPerCoin[x.coinIdx] = x.lastError; } @@ -1156,7 +1178,13 @@ export async function processWithdrawalGroup( await tx.withdrawalGroups.put(wg); }); - + if (numKycRequired > 0) { + throw TalerError.fromDetail( + TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED, + {}, + `KYC check required for withdrawal (not yet implemented in wallet-core)`, + ); + } if (numFinished != numTotalCoins) { throw TalerError.fromDetail( TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE, -- cgit v1.2.3