summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/withdraw.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/operations/withdraw.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts37
1 files changed, 37 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index 620ad88be..f63723535 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -66,6 +66,8 @@ import {
WALLET_BANK_INTEGRATION_PROTOCOL_VERSION,
WALLET_EXCHANGE_PROTOCOL_VERSION,
} from "../versions.js";
+import { stringify } from "querystring";
+import { downloadExchangeWithTermsOfService, ExchangeTosDownloadResult } from "./exchanges";
/**
* Logger for this file.
@@ -132,6 +134,11 @@ export interface ExchangeWithdrawDetails {
termsOfServiceAccepted: boolean;
/**
+ * Tos
+ */
+ tosRequested: ExchangeTosDownloadResult | undefined
+
+ /**
* The exchange is trusted directly.
*/
isTrusted: boolean;
@@ -930,6 +937,7 @@ export async function getExchangeWithdrawalInfo(
ws: InternalWalletState,
baseUrl: string,
amount: AmountJson,
+ tosAcceptedFormat?: string[],
): Promise<ExchangeWithdrawDetails> {
const {
exchange,
@@ -996,6 +1004,34 @@ export async function getExchangeWithdrawalInfo(
}
}
+ const noTosDownloaded =
+ exchangeDetails.termsOfServiceContentType === undefined ||
+ exchangeDetails.termsOfServiceAcceptedEtag === undefined ||
+ exchangeDetails.termsOfServiceText === undefined;
+
+ let tosFound: ExchangeTosDownloadResult | undefined = noTosDownloaded ? undefined : {
+ tosContentType: exchangeDetails.termsOfServiceContentType!,
+ tosEtag: exchangeDetails.termsOfServiceAcceptedEtag!,
+ tosText: exchangeDetails.termsOfServiceText!,
+ };
+
+ try {
+ if (tosAcceptedFormat) for (const format of tosAcceptedFormat) {
+ const resp = await downloadExchangeWithTermsOfService(
+ exchangeDetails.exchangeBaseUrl,
+ ws.http,
+ { d_ms: 1000 },
+ format
+ );
+ if (resp.tosContentType === format) {
+ tosFound = resp
+ break
+ }
+ }
+ } catch (e) {
+ tosFound = undefined
+ }
+
const withdrawFee = Amounts.sub(
selectedDenoms.totalWithdrawCost,
selectedDenoms.totalCoinValue,
@@ -1018,6 +1054,7 @@ export async function getExchangeWithdrawalInfo(
walletVersion: WALLET_EXCHANGE_PROTOCOL_VERSION,
withdrawFee,
termsOfServiceAccepted: tosAccepted,
+ tosRequested: tosFound
};
return ret;
}