DB tweaks
This commit is contained in:
parent
f79d10eea2
commit
ddbb09b140
@ -34,6 +34,7 @@ import {
|
||||
WalletContractData,
|
||||
CoinRecord,
|
||||
DenominationRecord,
|
||||
PayCoinSelection,
|
||||
} from "../types/dbTypes";
|
||||
import { NotificationType } from "../types/notifications";
|
||||
import {
|
||||
@ -83,37 +84,6 @@ import { initRetryInfo, updateRetryInfoTimeout, getRetryDuration } from "../util
|
||||
*/
|
||||
const logger = new Logger("pay.ts");
|
||||
|
||||
/**
|
||||
* Result of selecting coins, contains the exchange, and selected
|
||||
* coins with their denomination.
|
||||
*/
|
||||
export interface PayCoinSelection {
|
||||
/**
|
||||
* Amount requested by the merchant.
|
||||
*/
|
||||
paymentAmount: AmountJson;
|
||||
|
||||
/**
|
||||
* Public keys of the coins that were selected.
|
||||
*/
|
||||
coinPubs: string[];
|
||||
|
||||
/**
|
||||
* Amount that each coin contributes.
|
||||
*/
|
||||
coinContributions: AmountJson[];
|
||||
|
||||
/**
|
||||
* How much of the wire fees is the customer paying?
|
||||
*/
|
||||
customerWireFees: AmountJson;
|
||||
|
||||
/**
|
||||
* How much of the deposit fees is the customer paying?
|
||||
*/
|
||||
customerDepositFees: AmountJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* Structure to describe a coin that is available to be
|
||||
* used in a payment.
|
||||
@ -141,9 +111,6 @@ export interface AvailableCoinInfo {
|
||||
feeDeposit: AmountJson;
|
||||
}
|
||||
|
||||
export interface PayCostInfo {
|
||||
totalCost: AmountJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the total cost of a payment to the customer.
|
||||
@ -155,7 +122,7 @@ export interface PayCostInfo {
|
||||
export async function getTotalPaymentCost(
|
||||
ws: InternalWalletState,
|
||||
pcs: PayCoinSelection,
|
||||
): Promise<PayCostInfo> {
|
||||
): Promise<AmountJson> {
|
||||
const costs = [];
|
||||
for (let i = 0; i < pcs.coinPubs.length; i++) {
|
||||
const coin = await ws.db.get(Stores.coins, pcs.coinPubs[i]);
|
||||
@ -183,9 +150,7 @@ export async function getTotalPaymentCost(
|
||||
costs.push(pcs.coinContributions[i]);
|
||||
costs.push(refreshCost);
|
||||
}
|
||||
return {
|
||||
totalCost: Amounts.sum(costs).amount,
|
||||
};
|
||||
return Amounts.sum(costs).amount;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -470,7 +435,7 @@ async function recordConfirmPay(
|
||||
contractData: d.contractData,
|
||||
lastSessionId: sessionId,
|
||||
payCoinSelection: coinSelection,
|
||||
payCostInfo,
|
||||
totalPayCost: payCostInfo,
|
||||
coinDepositPermissions,
|
||||
timestampAccept: getTimestampNow(),
|
||||
timestampLastRefundStatus: undefined,
|
||||
@ -1057,15 +1022,15 @@ export async function preparePayForUri(
|
||||
};
|
||||
}
|
||||
|
||||
const costInfo = await getTotalPaymentCost(ws, res);
|
||||
logger.trace("costInfo", costInfo);
|
||||
const totalCost = await getTotalPaymentCost(ws, res);
|
||||
logger.trace("costInfo", totalCost);
|
||||
logger.trace("coinsForPayment", res);
|
||||
|
||||
return {
|
||||
status: PreparePayResultType.PaymentPossible,
|
||||
contractTerms: JSON.parse(d.contractTermsRaw),
|
||||
proposalId: proposal.proposalId,
|
||||
amountEffective: Amounts.stringify(costInfo.totalCost),
|
||||
amountEffective: Amounts.stringify(totalCost),
|
||||
amountRaw: Amounts.stringify(res.paymentAmount),
|
||||
};
|
||||
}
|
||||
@ -1092,7 +1057,7 @@ export async function preparePayForUri(
|
||||
contractTermsHash: purchase.contractData.contractTermsHash,
|
||||
paid: true,
|
||||
amountRaw: Amounts.stringify(purchase.contractData.amount),
|
||||
amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost),
|
||||
amountEffective: Amounts.stringify(purchase.totalPayCost),
|
||||
proposalId,
|
||||
};
|
||||
} else if (!purchase.timestampFirstSuccessfulPay) {
|
||||
@ -1102,7 +1067,7 @@ export async function preparePayForUri(
|
||||
contractTermsHash: purchase.contractData.contractTermsHash,
|
||||
paid: false,
|
||||
amountRaw: Amounts.stringify(purchase.contractData.amount),
|
||||
amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost),
|
||||
amountEffective: Amounts.stringify(purchase.totalPayCost),
|
||||
proposalId,
|
||||
};
|
||||
} else {
|
||||
@ -1113,7 +1078,7 @@ export async function preparePayForUri(
|
||||
contractTermsHash: purchase.contractData.contractTermsHash,
|
||||
paid,
|
||||
amountRaw: Amounts.stringify(purchase.contractData.amount),
|
||||
amountEffective: Amounts.stringify(purchase.payCostInfo.totalCost),
|
||||
amountEffective: Amounts.stringify(purchase.totalPayCost),
|
||||
...(paid ? { nextUrl: purchase.contractData.orderId } : {}),
|
||||
proposalId,
|
||||
};
|
||||
|
@ -470,7 +470,7 @@ export async function applyRefund(
|
||||
return {
|
||||
contractTermsHash: purchase.contractData.contractTermsHash,
|
||||
proposalId: purchase.proposalId,
|
||||
amountEffectivePaid: Amounts.stringify(purchase.payCostInfo.totalCost),
|
||||
amountEffectivePaid: Amounts.stringify(purchase.totalPayCost),
|
||||
amountRefundGone: Amounts.stringify(amountRefundGone),
|
||||
amountRefundGranted: Amounts.stringify(amountRefundGranted),
|
||||
pendingAtExchange,
|
||||
|
@ -238,7 +238,7 @@ export async function getTransactions(
|
||||
transactions.push({
|
||||
type: TransactionType.Payment,
|
||||
amountRaw: Amounts.stringify(pr.contractData.amount),
|
||||
amountEffective: Amounts.stringify(pr.payCostInfo.totalCost),
|
||||
amountEffective: Amounts.stringify(pr.totalPayCost),
|
||||
status: pr.timestampFirstSuccessfulPay
|
||||
? PaymentStatus.Paid
|
||||
: PaymentStatus.Accepted,
|
||||
|
@ -27,7 +27,6 @@ import { AmountJson } from "../util/amounts";
|
||||
import {
|
||||
Auditor,
|
||||
CoinDepositPermission,
|
||||
TipResponse,
|
||||
ExchangeSignKeyJson,
|
||||
MerchantInfo,
|
||||
Product,
|
||||
@ -43,8 +42,7 @@ import {
|
||||
ReserveClosingTransaction,
|
||||
ReserveRecoupTransaction,
|
||||
} from "./ReserveTransaction";
|
||||
import { Timestamp, Duration, getTimestampNow } from "../util/time";
|
||||
import { PayCoinSelection, PayCostInfo } from "../operations/pay";
|
||||
import { Timestamp, Duration } from "../util/time";
|
||||
import { IDBKeyPath } from "idb-bridge";
|
||||
import { RetryInfo } from "../util/retries";
|
||||
|
||||
@ -1255,6 +1253,37 @@ export interface WalletContractData {
|
||||
maxDepositFee: AmountJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* Result of selecting coins, contains the exchange, and selected
|
||||
* coins with their denomination.
|
||||
*/
|
||||
export interface PayCoinSelection {
|
||||
/**
|
||||
* Amount requested by the merchant.
|
||||
*/
|
||||
paymentAmount: AmountJson;
|
||||
|
||||
/**
|
||||
* Public keys of the coins that were selected.
|
||||
*/
|
||||
coinPubs: string[];
|
||||
|
||||
/**
|
||||
* Amount that each coin contributes.
|
||||
*/
|
||||
coinContributions: AmountJson[];
|
||||
|
||||
/**
|
||||
* How much of the wire fees is the customer paying?
|
||||
*/
|
||||
customerWireFees: AmountJson;
|
||||
|
||||
/**
|
||||
* How much of the deposit fees is the customer paying?
|
||||
*/
|
||||
customerDepositFees: AmountJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record that stores status information about one purchase, starting from when
|
||||
* the customer accepts a proposal. Includes refund status if applicable.
|
||||
@ -1280,7 +1309,7 @@ export interface PurchaseRecord {
|
||||
|
||||
payCoinSelection: PayCoinSelection;
|
||||
|
||||
payCostInfo: PayCostInfo;
|
||||
totalPayCost: AmountJson;
|
||||
|
||||
/**
|
||||
* Timestamp of the first time that sending a payment to the merchant
|
||||
|
@ -931,3 +931,4 @@ export const codecForAcceptTipRequest = (): Codec<AcceptTipRequest> =>
|
||||
buildCodecForObject<AcceptTipRequest>()
|
||||
.property("walletTipId", codecForString())
|
||||
.build("AcceptTipRequest");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user