diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-07-28 14:22:35 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-07-28 14:22:35 +0530 |
commit | 4365cd6401713b2e207d8c032c0558487e860154 (patch) | |
tree | f66b4bc5aa9dd7e92b72546e0b2fe79c18ed6573 /src/operations | |
parent | 472307a607b046e32f50b05a8be44c47c4b153d4 (diff) | |
download | wallet-core-4365cd6401713b2e207d8c032c0558487e860154.tar.xz |
towards the new withdrawal API (temporarily breaks WebExtension wallet)
Diffstat (limited to 'src/operations')
-rw-r--r-- | src/operations/withdraw.ts | 59 |
1 files changed, 44 insertions, 15 deletions
diff --git a/src/operations/withdraw.ts b/src/operations/withdraw.ts index 6f591602d..486375300 100644 --- a/src/operations/withdraw.ts +++ b/src/operations/withdraw.ts @@ -32,12 +32,13 @@ import { import { BankWithdrawDetails, ExchangeWithdrawDetails, - WithdrawalDetailsResponse, OperationErrorDetails, + ExchangeListItem, } from "../types/walletTypes"; import { codecForWithdrawOperationStatusResponse, codecForWithdrawResponse, + WithdrawUriInfoResponse, } from "../types/talerTypes"; import { InternalWalletState } from "./state"; import { parseWithdrawUri } from "../util/taleruri"; @@ -154,7 +155,7 @@ export async function getBankWithdrawalInfo( return { amount: Amounts.parseOrThrow(status.amount), confirmTransferUrl: status.confirm_transfer_url, - extractedStatusUrl: uriResult.bankIntegrationApiBaseUrl, + extractedStatusUrl: reqUrl.href, selectionDone: status.selection_done, senderWire: status.sender_wire, suggestedExchange: status.suggested_exchange, @@ -706,22 +707,50 @@ export async function getExchangeWithdrawalInfo( return ret; } -export async function getWithdrawDetailsForUri( +export async function getWithdrawalDetailsForUri( ws: InternalWalletState, talerWithdrawUri: string, - maybeSelectedExchange?: string, -): Promise<WithdrawalDetailsResponse> { +): Promise<WithdrawUriInfoResponse> { const info = await getBankWithdrawalInfo(ws, talerWithdrawUri); - let rci: ExchangeWithdrawDetails | undefined = undefined; - if (maybeSelectedExchange) { - rci = await getExchangeWithdrawalInfo( - ws, - maybeSelectedExchange, - info.amount, - ); + if (info.suggestedExchange) { + // FIXME: right now the exchange gets permanently added, + // we might want to only temporarily add it. + try { + await updateExchangeFromUrl(ws, info.suggestedExchange); + } catch (e) { + // We still continued if it failed, as other exchanges might be available. + // We don't want to fail if the bank-suggested exchange is broken/offline. + logger.trace(`querying bank-suggested exchange (${info.suggestedExchange}) failed`) + } } + + const exchangesRes: (ExchangeListItem | undefined)[] = await ws.db + .iter(Stores.exchanges) + .map((x) => { + const details = x.details; + if (!details) { + return undefined; + } + if (!x.addComplete) { + return undefined; + } + if (!x.wireInfo) { + return undefined; + } + if (details.currency !== info.amount.currency) { + return undefined; + } + return { + exchangeBaseUrl: x.baseUrl, + currency: details.currency, + paytoUris: x.wireInfo.accounts.map((x) => x.payto_uri), + }; + }); + const exchanges = exchangesRes.filter((x) => !!x) as ExchangeListItem[]; + return { - bankWithdrawDetails: info, - exchangeWithdrawDetails: rci, - }; + amount: Amounts.stringify(info.amount), + defaultExchangeBaseUrl: info.suggestedExchange, + possibleExchanges: exchanges, + } } |