new exchange-added notifiaction and including tos information in the wxApi.listExchange api

This commit is contained in:
Sebastian 2021-11-24 08:55:37 -03:00
parent b3b3c21acb
commit f07436aa49
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1
5 changed files with 46 additions and 10 deletions

View File

@ -45,6 +45,7 @@ export enum NotificationType {
RefundQueried = "refund-queried",
RefundFinished = "refund-finished",
ExchangeOperationError = "exchange-operation-error",
ExchangeAdded = "exchange-added",
RefreshOperationError = "refresh-operation-error",
RecoupOperationError = "recoup-operation-error",
RefundApplyOperationError = "refund-apply-error",
@ -150,6 +151,10 @@ export interface RefundFinishedNotification {
type: NotificationType.RefundFinished;
}
export interface ExchangeAddedNotification {
type: NotificationType.ExchangeAdded;
}
export interface ExchangeOperationErrorNotification {
type: NotificationType.ExchangeOperationError;
error: TalerErrorDetails;
@ -243,6 +248,7 @@ export type WalletNotification =
| BackupOperationErrorNotification
| WithdrawOperationErrorNotification
| ReserveOperationErrorNotification
| ExchangeAddedNotification
| ExchangeOperationErrorNotification
| RefreshOperationErrorNotification
| RefundStatusOperationErrorNotification

View File

@ -523,17 +523,32 @@ export interface ExchangesListRespose {
exchanges: ExchangeListItem[];
}
export interface ExchangeTos {
acceptedVersion?: string;
currentVersion?: string;
contentType?: string;
content?: string;
}
export interface ExchangeListItem {
exchangeBaseUrl: string;
currency: string;
paytoUris: string[];
tos: ExchangeTos;
}
const codecForExchangeTos = (): Codec<ExchangeTos> => buildCodecForObject<ExchangeTos>()
.property("acceptedVersion", codecOptional(codecForString()))
.property("currentVersion", codecOptional(codecForString()))
.property("contentType", codecOptional(codecForString()))
.property("content", codecOptional(codecForString()))
.build("ExchangeTos")
export const codecForExchangeListItem = (): Codec<ExchangeListItem> =>
buildCodecForObject<ExchangeListItem>()
.property("currency", codecForString())
.property("exchangeBaseUrl", codecForString())
.property("paytoUris", codecForList(codecForString()))
.property("tos", codecForExchangeTos())
.build("ExchangeListItem");
export const codecForExchangesListResponse = (): Codec<ExchangesListRespose> =>

View File

@ -494,11 +494,11 @@ async function updateExchangeFromUrlImpl(
tosFound !== undefined
? tosFound
: await downloadExchangeWithTermsOfService(
baseUrl,
ws.http,
timeout,
"text/plain",
);
baseUrl,
ws.http,
timeout,
"text/plain",
);
let recoupGroupId: string | undefined = undefined;
@ -657,6 +657,9 @@ async function updateExchangeFromUrlImpl(
logger.trace("done updating exchange info in database");
ws.notify({
type: NotificationType.ExchangeAdded,
});
return {
exchange: updated.exchange,
exchangeDetails: updated.exchangeDetails,

View File

@ -218,7 +218,7 @@ export function selectWithdrawalDenominations(
for (const d of denoms) {
let count = 0;
const cost = Amounts.add(d.value, d.feeWithdraw).amount;
for (;;) {
for (; ;) {
if (Amounts.cmp(remaining, cost) < 0) {
break;
}
@ -746,8 +746,7 @@ export async function updateWithdrawalDenoms(
denom.verificationStatus === DenominationVerificationStatus.Unverified
) {
logger.trace(
`Validating denomination (${current + 1}/${
denominations.length
`Validating denomination (${current + 1}/${denominations.length
}) signature of ${denom.denomPubHash}`,
);
const valid = await ws.cryptoApi.isValidDenom(
@ -997,7 +996,7 @@ export async function getExchangeWithdrawalInfo(
) {
console.warn(
`wallet's support for exchange protocol version ${WALLET_EXCHANGE_PROTOCOL_VERSION} might be outdated ` +
`(exchange has ${exchangeDetails.protocolVersion}), checking for updates`,
`(exchange has ${exchangeDetails.protocolVersion}), checking for updates`,
);
}
}
@ -1075,6 +1074,12 @@ export async function getWithdrawalDetailsForUri(
exchanges.push({
exchangeBaseUrl: details.exchangeBaseUrl,
currency: details.currency,
tos: {
acceptedVersion: details.termsOfServiceAcceptedEtag,
currentVersion: details.termsOfServiceLastEtag,
contentType: details.termsOfServiceContentType,
content: details.termsOfServiceText,
},
paytoUris: details.wireInfo.accounts.map((x) => x.payto_uri),
});
}

View File

@ -513,9 +513,16 @@ async function getExchanges(
if (!exchangeDetails) {
continue;
}
exchanges.push({
exchangeBaseUrl: r.baseUrl,
currency,
tos: {
acceptedVersion: exchangeDetails.termsOfServiceAcceptedEtag,
currentVersion: exchangeDetails.termsOfServiceLastEtag,
contentType: exchangeDetails.termsOfServiceContentType,
content: exchangeDetails.termsOfServiceText,
},
paytoUris: exchangeDetails.wireInfo.accounts.map((x) => x.payto_uri),
});
}
@ -988,7 +995,7 @@ export async function handleCoreApiRequest(
try {
logger.error("Caught unexpected exception:");
logger.error(e.stack);
} catch (e) {}
} catch (e) { }
return {
type: "error",
operation,