diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/deposits.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/deposits.ts | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/packages/taler-wallet-core/src/operations/deposits.ts b/packages/taler-wallet-core/src/operations/deposits.ts index b529e5ead..71caae5b3 100644 --- a/packages/taler-wallet-core/src/operations/deposits.ts +++ b/packages/taler-wallet-core/src/operations/deposits.ts @@ -21,6 +21,7 @@ import { AbsoluteTime, AmountJson, Amounts, + bytesToString, CancellationToken, canonicalJson, codecForDepositSuccess, @@ -35,6 +36,7 @@ import { ExchangeDepositRequest, GetFeeForDepositRequest, getRandomBytes, + hashTruncate32, hashWire, HttpStatusCode, Logger, @@ -44,6 +46,7 @@ import { PrepareDepositRequest, PrepareDepositResponse, RefreshReason, + stringToBytes, TalerErrorCode, TalerProtocolTimestamp, TrackDepositGroupRequest, @@ -59,6 +62,7 @@ import { TransactionStatus, } from "../db.js"; import { TalerError } from "../errors.js"; +import { checkKycStatus } from "../index.js"; import { InternalWalletState } from "../internal-wallet-state.js"; import { readSuccessResponseJsonOrThrow } from "../util/http.js"; import { OperationAttemptResult } from "../util/retries.js"; @@ -151,7 +155,28 @@ export async function processDepositGroup( if (depositGroup.transactionPerCoin[i] !== TransactionStatus.Wired) { const track = await trackDepositPermission(ws, depositGroup, perm); - updatedTxStatus = txStatusFromTrack(track); + + if (track.type === "accepted") { + if (!track.kyc_ok && track.requirement_row !== undefined) { + updatedTxStatus = TransactionStatus.KycRequired; + const { requirement_row: requirementRow } = track; + const paytoHash = encodeCrock( + hashTruncate32(stringToBytes(depositGroup.wire.payto_uri + "\0")), + ); + await checkKycStatus( + ws, + perm.exchange_url, + { paytoHash, requirementRow }, + "individual", + ); + } else { + updatedTxStatus = TransactionStatus.Accepted; + } + } else if (track.type === "wired") { + updatedTxStatus = TransactionStatus.Wired; + } else { + updatedTxStatus = TransactionStatus.Unknown; + } } if (updatedTxStatus !== undefined || updatedDeposit !== undefined) { @@ -199,19 +224,6 @@ export async function processDepositGroup( return OperationAttemptResult.finishedEmpty(); } -function txStatusFromTrack(t: TrackTransaction): TransactionStatus { - if (t.type === "accepted") { - if (!t.kyc_ok && t.requirement_row !== undefined) { - return TransactionStatus.KycRequired; - } - return TransactionStatus.Accepted; - } - if (t.type === "wired") { - return TransactionStatus.Wired; - } - return TransactionStatus.Unknown; -} - export async function trackDepositGroup( ws: InternalWalletState, req: TrackDepositGroupRequest, |