latest merchant protocol for refunds

This commit is contained in:
Florian Dold 2020-07-27 13:36:32 +05:30
parent 880f335ee6
commit 694d913d1f
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 7 additions and 30 deletions

View File

@ -35,7 +35,6 @@ import {
initRetryInfo,
CoinStatus,
RefundReason,
RefundEventRecord,
RefundState,
PurchaseRecord,
} from "../types/dbTypes";
@ -44,10 +43,10 @@ import { parseRefundUri } from "../util/taleruri";
import { createRefreshGroup, getTotalRefreshCost } from "./refresh";
import { Amounts } from "../util/amounts";
import {
codecForMerchantOrderStatus,
MerchantCoinRefundStatus,
MerchantCoinRefundSuccessStatus,
MerchantCoinRefundFailureStatus,
codecForMerchantOrderStatusPaid,
} from "../types/talerTypes";
import { guardOperationException } from "./errors";
import { getTimestampNow } from "../util/time";
@ -414,14 +413,9 @@ async function processPurchaseQueryRefundImpl(
const refundResponse = await readSuccessResponseJsonOrThrow(
request,
codecForMerchantOrderStatus(),
codecForMerchantOrderStatusPaid(),
);
if (refundResponse.order_status !== "paid") {
logger.error("can't refund unpaid order");
return;
}
await acceptRefunds(
ws,
proposalId,

View File

@ -839,15 +839,7 @@ export interface ExchangeRevealResponse {
ev_sigs: ExchangeRevealItem[];
}
export type MerchantOrderStatus =
| MerchantOrderStatusPaid
| MerchantOrderStatusUnpaid;
interface MerchantOrderStatusPaid {
/**
* Has the payment for this order (ever) been completed?
*/
order_status: "paid";
/**
* Was the payment refunded (even partially, via refund or abort)?
@ -930,11 +922,6 @@ export interface MerchantCoinRefundFailureStatus {
}
export interface MerchantOrderStatusUnpaid {
/**
* Has the payment for this order (ever) been completed?
*/
order_status: "unpaid";
/**
* URI that the wallet must process to complete the payment.
*/
@ -1250,7 +1237,6 @@ export const codecForMerchantOrderStatusPaid = (): Codec<
MerchantOrderStatusPaid
> =>
makeCodecForObject<MerchantOrderStatusPaid>()
.property("order_status", makeCodecForConstString("paid"))
.property("merchant_pub", codecForString)
.property("refund_amount", codecForString)
.property("refunded", codecForBoolean)
@ -1261,14 +1247,6 @@ export const codecForMerchantOrderStatusUnpaid = (): Codec<
MerchantOrderStatusUnpaid
> =>
makeCodecForObject<MerchantOrderStatusUnpaid>()
.property("order_status", makeCodecForConstString("unpaid"))
.property("taler_pay_uri", codecForString)
.property("already_paid_order_id", makeCodecOptional(codecForString))
.build("MerchantOrderStatusUnpaid");
export const codecForMerchantOrderStatus = (): Codec<MerchantOrderStatus> =>
makeCodecForUnion<MerchantOrderStatus>()
.discriminateOn("order_status")
.alternative("paid", codecForMerchantOrderStatusPaid())
.alternative("unpaid", codecForMerchantOrderStatusUnpaid())
.build("MerchantOrderStatus");

View File

@ -176,6 +176,11 @@ class UnionCodecBuilder<
const baseCodec = this.baseCodec;
return {
decode(x: any, c?: Context): R {
if (!c) {
c = {
path: [`(${objectDisplayName})`],
};
}
const d = x[discriminator];
if (d === undefined) {
throw new DecodingError(