From c5906abf106d22cc35b8facdda4313b6125160b9 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 20 Jan 2020 11:53:21 +0100 Subject: verboseDetails for pay and withdraw --- src/headless/integrationtest.ts | 4 ++++ src/operations/history.ts | 45 +++++++++++++++++++++++++++++++++++++++++ src/types/history.ts | 21 ++++++++++++++++++- 3 files changed, 69 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/headless/integrationtest.ts b/src/headless/integrationtest.ts index ee52c4c46..6ec28dc4f 100644 --- a/src/headless/integrationtest.ts +++ b/src/headless/integrationtest.ts @@ -186,4 +186,8 @@ export async function runIntegrationTest(args: IntegrationTestArgs) { ); await myWallet.runUntilDone(); + + const history = await myWallet.getHistory(); + + console.log("history after integration test:", JSON.stringify(history, undefined, 2)); } diff --git a/src/operations/history.ts b/src/operations/history.ts index 4eb626d6c..54874f64f 100644 --- a/src/operations/history.ts +++ b/src/operations/history.ts @@ -23,6 +23,8 @@ import { TipRecord, ProposalStatus, ProposalRecord, + PlanchetRecord, + CoinRecord, } from "../types/dbTypes"; import * as Amounts from "../util/amounts"; import { AmountJson } from "../util/amounts"; @@ -33,6 +35,8 @@ import { OrderShortInfo, ReserveType, ReserveCreationDetail, + VerbosePayCoinDetails, + VerboseWithdrawDetails, } from "../types/history"; import { assertUnreachable } from "../util/assertUnreachable"; import { TransactionHandle, Store } from "../util/query"; @@ -203,6 +207,22 @@ export async function getHistory( tx.iter(Stores.withdrawalSession).forEach(wsr => { if (wsr.timestampFinish) { + const cs: PlanchetRecord[] = []; + wsr.planchets.forEach((x) => { + if (x) { + cs.push(x); + } + }); + const verboseDetails: VerboseWithdrawDetails = { + coins: cs.map((x) => ({ + value: Amounts.toString(x.coinValue), + denomPub: x.denomPub, + })), + }; + const coins = cs.map((x) => ({ + value: x.coinValue + })); + history.push({ type: HistoryEventType.Withdrawn, withdrawSessionId: wsr.withdrawSessionId, @@ -215,6 +235,7 @@ export async function getHistory( exchangeBaseUrl: wsr.exchangeBaseUrl, timestamp: wsr.timestampFinish, withdrawalSource: wsr.source, + verboseDetails, }); } }); @@ -234,6 +255,29 @@ export async function getHistory( if (!orderShortInfo) { return; } + const coins: { + value: string, + contribution: string; + denomPub: string; + }[] = []; + for (const x of purchase.payReq.coins) { + const c = await tx.get(Stores.coins, x.coin_pub); + if (!c) { + // FIXME: what to do here?? + continue; + } + const d = await tx.get(Stores.denominations, [c.exchangeBaseUrl, c.denomPub]); + if (!d) { + // FIXME: what to do here?? + continue; + } + coins.push({ + contribution: x.contribution, + denomPub: c.denomPub, + value: Amounts.toString(d.value), + }); + } + const verboseDetails: VerbosePayCoinDetails = { coins }; const amountPaidWithFees = Amounts.sum( purchase.payReq.coins.map(x => Amounts.parseOrThrow(x.contribution)), ).amount; @@ -246,6 +290,7 @@ export async function getHistory( timestamp: pe.timestamp, numCoins: purchase.payReq.coins.length, amountPaidWithFees: Amounts.toString(amountPaidWithFees), + verboseDetails, }); }); diff --git a/src/types/history.ts b/src/types/history.ts index a0e816148..7acf84dc5 100644 --- a/src/types/history.ts +++ b/src/types/history.ts @@ -23,7 +23,6 @@ import { ReserveTransaction } from "./ReserveTransaction"; import { WithdrawalSource } from "./dbTypes"; import { Timestamp } from "../util/time"; - /** * Type tags for the history event types. */ @@ -466,6 +465,15 @@ export interface HistoryPaymentAbortedEvent { amountLost: string; } +export interface VerbosePayCoinDetails { + coins: + { + value: string, + contribution: string; + denomPub: string; + }[], +} + /** * History event to indicate that a payment has been (re-)submitted * to the merchant. @@ -501,6 +509,8 @@ export interface HistoryPaymentSent { * Session ID that the payment was (re-)submitted under. */ sessionId: string | undefined; + + verboseDetails: VerbosePayCoinDetails; } /** @@ -575,6 +585,13 @@ export interface HistoryRefreshedEvent { refreshGroupId: string; } +export interface VerboseWithdrawDetails { + coins: { + value: string; + denomPub: string; + }[]; +} + /** * A withdrawal has completed. */ @@ -604,6 +621,8 @@ export interface HistoryWithdrawnEvent { * Amount that actually was added to the wallet's balance. */ amountWithdrawnEffective: string; + + verboseDetails: VerboseWithdrawDetails; } /** -- cgit v1.2.3