diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2023-09-09 07:34:11 +0200 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2023-09-09 07:34:11 +0200 |
commit | 5495551071a3fdc36c38deb4c1cf6f4aa5b98bd4 (patch) | |
tree | adf7730b190618a0499e50a2d43cf1b850cddd16 /packages/taler-wallet-core/src/operations/withdraw.ts | |
parent | 94cfcc875065f988815c31aaf8ebf36f75ac5983 (diff) | |
parent | 6c3cfa9be7a332c2cc8490f25ebd6c73c8244842 (diff) |
Merge branch 'master' into age-withdraw
Diffstat (limited to 'packages/taler-wallet-core/src/operations/withdraw.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/withdraw.ts | 117 |
1 files changed, 49 insertions, 68 deletions
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts index a3d95fb5c..bae348dc1 100644 --- a/packages/taler-wallet-core/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -123,7 +123,6 @@ import { import { getExchangeDetails, getExchangePaytoUri, - getExchangeTrust, updateExchangeFromUrl, } from "./exchanges.js"; import { @@ -320,7 +319,7 @@ export async function abortWithdrawalTransaction( case WithdrawalGroupStatus.AbortingBank: // No transition needed, but not an error break; - case WithdrawalGroupStatus.Finished: + case WithdrawalGroupStatus.Done: case WithdrawalGroupStatus.FailedBankAborted: case WithdrawalGroupStatus.AbortedExchange: case WithdrawalGroupStatus.AbortedBank: @@ -400,7 +399,7 @@ export function computeWithdrawalTransactionStatus( return { major: TransactionMajorState.Aborted, }; - case WithdrawalGroupStatus.Finished: + case WithdrawalGroupStatus.Done: return { major: TransactionMajorState.Done, }; @@ -504,7 +503,7 @@ export function computeWithdrawalTransactionActions( switch (wgRecord.status) { case WithdrawalGroupStatus.FailedBankAborted: return [TransactionAction.Delete]; - case WithdrawalGroupStatus.Finished: + case WithdrawalGroupStatus.Done: return [TransactionAction.Delete]; case WithdrawalGroupStatus.PendingRegisteringBank: return [TransactionAction.Suspend, TransactionAction.Abort]; @@ -726,7 +725,9 @@ interface WithdrawalBatchResult { batchResp: ExchangeWithdrawBatchResponse; } enum AmlStatus { - normal= 0, pending = 1, fronzen = 2, + normal = 0, + pending = 1, + fronzen = 2, } async function handleKycRequired( @@ -773,7 +774,9 @@ async function handleKycRequired( const kycStatus = await kycStatusRes.json(); logger.info(`kyc status: ${j2s(kycStatus)}`); kycUrl = kycStatus.kyc_url; - } else if (kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons) { + } else if ( + kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons + ) { const kycStatus = await kycStatusRes.json(); logger.info(`aml status: ${j2s(kycStatus)}`); amlStatus = kycStatus.aml_status; @@ -809,11 +812,15 @@ async function handleKycRequired( requirementRow: uuidResp.requirement_row, }; wg2.kycUrl = kycUrl; - wg2.status = amlStatus === AmlStatus.normal || amlStatus === undefined ? WithdrawalGroupStatus.PendingKyc : - amlStatus === AmlStatus.pending ? WithdrawalGroupStatus.PendingAml : - amlStatus === AmlStatus.fronzen ? WithdrawalGroupStatus.SuspendedAml : - assertUnreachable(amlStatus); - + wg2.status = + amlStatus === AmlStatus.normal || amlStatus === undefined + ? WithdrawalGroupStatus.PendingKyc + : amlStatus === AmlStatus.pending + ? WithdrawalGroupStatus.PendingAml + : amlStatus === AmlStatus.fronzen + ? WithdrawalGroupStatus.SuspendedAml + : assertUnreachable(amlStatus); + await tx.withdrawalGroups.put(wg2); const newTxState = computeWithdrawalTransactionStatus(wg2); return { @@ -924,31 +931,31 @@ async function processPlanchetExchangeBatchRequest( // FIXME: handle individual error codes better! - const reqUrl = new URL( - `reserves/${withdrawalGroup.reservePub}/batch-withdraw`, - withdrawalGroup.exchangeBaseUrl, - ).href; + const reqUrl = new URL( + `reserves/${withdrawalGroup.reservePub}/batch-withdraw`, + withdrawalGroup.exchangeBaseUrl, + ).href; - try { - const resp = await ws.http.postJson(reqUrl, batchReq); - if (resp.status === HttpStatusCode.UnavailableForLegalReasons) { - await handleKycRequired(ws, withdrawalGroup, resp, 0, requestCoinIdxs); - } - const r = await readSuccessResponseJsonOrThrow( - resp, - codecForWithdrawBatchResponse(), - ); - return { - coinIdxs: requestCoinIdxs, - batchResp: r, - }; - } catch (e) { - await storeCoinError(e, requestCoinIdxs[0]); - return { - batchResp: { ev_sigs: [] }, - coinIdxs: [], - }; + try { + const resp = await ws.http.postJson(reqUrl, batchReq); + if (resp.status === HttpStatusCode.UnavailableForLegalReasons) { + await handleKycRequired(ws, withdrawalGroup, resp, 0, requestCoinIdxs); } + const r = await readSuccessResponseJsonOrThrow( + resp, + codecForWithdrawBatchResponse(), + ); + return { + coinIdxs: requestCoinIdxs, + batchResp: r, + }; + } catch (e) { + await storeCoinError(e, requestCoinIdxs[0]); + return { + batchResp: { ev_sigs: [] }, + coinIdxs: [], + }; + } } async function processPlanchetVerifyAndStoreCoin( @@ -1415,10 +1422,12 @@ async function processWithdrawalGroupPendingKyc( logger.info(`kyc status: ${j2s(kycStatus)}`); // FIXME: do we need to update the KYC url, or does it always stay constant? return { ready: false }; - } else if (kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons) { + } else if ( + kycStatusRes.status === HttpStatusCode.UnavailableForLegalReasons + ) { const kycStatus = await kycStatusRes.json(); logger.info(`aml status: ${j2s(kycStatus)}`); - return {ready : false} + return { ready: false }; } else { throw Error( `unexpected response from kyc-check (${kycStatusRes.status})`, @@ -1453,7 +1462,7 @@ async function processWithdrawalGroupPendingReady( return undefined; } const txStatusOld = computeWithdrawalTransactionStatus(wg); - wg.status = WithdrawalGroupStatus.Finished; + wg.status = WithdrawalGroupStatus.Done; wg.timestampFinish = TalerPreciseTimestamp.now(); const txStatusNew = computeWithdrawalTransactionStatus(wg); await tx.withdrawalGroups.put(wg); @@ -1551,7 +1560,7 @@ async function processWithdrawalGroupPendingReady( logger.info(`now withdrawn ${numFinished} of ${numTotalCoins} coins`); if (wg.timestampFinish === undefined && numFinished === numTotalCoins) { wg.timestampFinish = TalerPreciseTimestamp.now(); - wg.status = WithdrawalGroupStatus.Finished; + wg.status = WithdrawalGroupStatus.Done; await makeCoinsVisible(ws, tx, transactionId); } @@ -1643,7 +1652,7 @@ export async function processWithdrawalGroup( } break; } - case WithdrawalGroupStatus.Finished: + case WithdrawalGroupStatus.Done: case WithdrawalGroupStatus.FailedBankAborted: { // FIXME return TaskRunResult.pending(); @@ -1714,11 +1723,6 @@ export async function getExchangeWithdrawalInfo( exchangeWireAccounts.push(account.payto_uri); } - const { isTrusted, isAudited } = await ws.exchangeOps.getExchangeTrust( - ws, - exchange, - ); - let hasDenomWithAgeRestriction = false; logger.trace("computing earliest deposit expiration"); @@ -1797,8 +1801,6 @@ export async function getExchangeWithdrawalInfo( exchangePaytoUris: paytoUris, exchangeWireAccounts, exchangeVersion: exchangeDetails.protocolVersionRange || "unknown", - isAudited, - isTrusted, numOfferedDenoms: possibleDenoms.length, selectedDenoms, // FIXME: delete this field / replace by something we can display to the user @@ -1859,7 +1861,6 @@ export async function getWithdrawalDetailsForUri( .mktx((x) => [ x.exchanges, x.exchangeDetails, - x.exchangeTos, x.denominations, x.operationRetries, ]) @@ -2215,8 +2216,6 @@ export interface PrepareCreateWithdrawalGroupResult { withdrawalGroup: WithdrawalGroupRecord; transactionId: string; creationInfo?: { - isTrusted: boolean; - isAudited: boolean; amount: AmountJson; canonExchange: string; exchangeDetails: ExchangeDetailsRecord; @@ -2311,10 +2310,6 @@ export async function internalPrepareCreateWithdrawalGroup( logger.trace(exchangeDetails); throw Error("exchange not updated"); } - const { isAudited, isTrusted } = await getExchangeTrust( - ws, - exchangeInfo.exchange, - ); const transactionId = constructTransactionIdentifier({ tag: TransactionType.Withdrawal, withdrawalGroupId: withdrawalGroup.withdrawalGroupId, @@ -2324,8 +2319,6 @@ export async function internalPrepareCreateWithdrawalGroup( withdrawalGroup, transactionId, creationInfo: { - isAudited, - isTrusted, canonExchange, amount, exchangeDetails, @@ -2344,7 +2337,6 @@ export async function internalPerformCreateWithdrawalGroup( withdrawalGroups: typeof WalletStoresV1.withdrawalGroups; reserves: typeof WalletStoresV1.reserves; exchanges: typeof WalletStoresV1.exchanges; - exchangeTrust: typeof WalletStoresV1.exchangeTrust; }>, prep: PrepareCreateWithdrawalGroupResult, ): Promise<PerformCreateWithdrawalGroupResult> { @@ -2352,7 +2344,7 @@ export async function internalPerformCreateWithdrawalGroup( if (!prep.creationInfo) { return { withdrawalGroup, transitionInfo: undefined }; } - const { isAudited, isTrusted, amount, canonExchange, exchangeDetails } = + const { amount, canonExchange, exchangeDetails } = prep.creationInfo; await tx.withdrawalGroups.add(withdrawalGroup); @@ -2368,15 +2360,6 @@ export async function internalPerformCreateWithdrawalGroup( await tx.exchanges.put(exchange); } - if (!isAudited && !isTrusted) { - await tx.exchangeTrust.put({ - currency: amount.currency, - exchangeBaseUrl: canonExchange, - exchangeMasterPub: exchangeDetails.masterPublicKey, - uids: [encodeCrock(getRandomBytes(32))], - }); - } - const oldTxState = { major: TransactionMajorState.None, minor: undefined, @@ -2422,7 +2405,6 @@ export async function internalCreateWithdrawalGroup( x.reserves, x.exchanges, x.exchangeDetails, - x.exchangeTrust, ]) .runReadWrite(async (tx) => { return await internalPerformCreateWithdrawalGroup(ws, tx, prep); @@ -2568,7 +2550,6 @@ export async function createManualWithdrawal( x.withdrawalGroups, x.exchanges, x.exchangeDetails, - x.exchangeTrust, ]) .runReadOnly(async (tx) => { return await getFundingPaytoUris(tx, withdrawalGroup.withdrawalGroupId); |