commit 6308c7ea6ba195199ee413c6c485321a013a514a
parent cb535460350bd510dd4b2b7d6bc3c6ec5f5bcdf1
Author: Florian Dold <florian@dold.me>
Date: Wed, 10 May 2023 17:30:38 +0200
wallet-core: return txid when starting refund via URI
Diffstat:
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts
@@ -1645,6 +1645,10 @@ export interface PrepareRefundRequest {
talerRefundUri: string;
}
+export interface StartRefundQueryForUriResponse {
+ transactionId: string;
+}
+
export const codecForPrepareRefundRequest = (): Codec<PrepareRefundRequest> =>
buildCodecForObject<PrepareRefundRequest>()
.property("talerRefundUri", codecForString())
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -69,6 +69,7 @@ import {
PrepareRefundResult,
randomBytes,
RefreshReason,
+ StartRefundQueryForUriResponse,
TalerError,
TalerErrorCode,
TalerErrorDetail,
@@ -2051,7 +2052,7 @@ async function processPurchaseAcceptRefund(
export async function startRefundQueryForUri(
ws: InternalWalletState,
talerUri: string,
-): Promise<void> {
+): Promise<StartRefundQueryForUriResponse> {
const parsedUri = parseTalerUri(talerUri);
if (!parsedUri) {
throw Error("invalid taler:// URI");
@@ -2070,7 +2071,15 @@ export async function startRefundQueryForUri(
if (!purchaseRecord) {
throw Error("no purchase found, can't refund");
}
- return startQueryRefund(ws, purchaseRecord.proposalId);
+ const proposalId = purchaseRecord.proposalId;
+ const transactionId = constructTransactionIdentifier({
+ tag: TransactionType.Payment,
+ proposalId,
+ });
+ await startQueryRefund(ws, proposalId);
+ return {
+ transactionId,
+ }
}
export async function startQueryRefund(
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -110,6 +110,7 @@ import {
WithdrawFakebankRequest,
WithdrawTestBalanceRequest,
WithdrawUriInfoResponse,
+ StartRefundQueryForUriResponse,
} from "@gnu-taler/taler-util";
import { AuditorTrustRecord, WalletContractData } from "./db.js";
import {
@@ -438,7 +439,7 @@ export type ConfirmPayOp = {
export type StartRefundQueryForUriOp = {
op: WalletApiOperation.StartRefundQueryForUri;
request: PrepareRefundRequest;
- response: EmptyObject;
+ response: StartRefundQueryForUriResponse;
};
export type StartRefundQueryOp = {
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
@@ -1288,8 +1288,7 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
}
case WalletApiOperation.StartRefundQueryForUri: {
const req = codecForPrepareRefundRequest().decode(payload);
- await startRefundQueryForUri(ws, req.talerRefundUri);
- return {};
+ return await startRefundQueryForUri(ws, req.talerRefundUri);
}
case WalletApiOperation.StartRefundQuery: {
const req = codecForStartRefundQueryRequest().decode(payload);