aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-08-11 17:32:11 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-08-11 17:32:11 +0530
commitff3f96566151d390462931574184ed9e6b84db5b (patch)
treec8616b7acbe6f8a7ccdcd069de0ac9a3b0741df7 /packages
parent172a51a43a5cfebd06876206ec3a0cd75ad86e43 (diff)
towards the improved confirmPay API
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/operations/pay.ts9
-rw-r--r--packages/taler-wallet-core/src/types/transactions.ts2
-rw-r--r--packages/taler-wallet-core/src/types/walletTypes.ts20
-rw-r--r--packages/taler-wallet-webextension/src/pages/pay.tsx3
4 files changed, 31 insertions, 3 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts
index fd997fb14..db5a56d18 100644
--- a/packages/taler-wallet-core/src/operations/pay.ts
+++ b/packages/taler-wallet-core/src/operations/pay.ts
@@ -49,6 +49,7 @@ import {
PreparePayResult,
RefreshReason,
PreparePayResultType,
+ ConfirmPayResultType,
} from "../types/walletTypes";
import * as Amounts from "../util/amounts";
import { AmountJson } from "../util/amounts";
@@ -853,7 +854,10 @@ export async function submitPay(
lastSessionId: sessionId,
};
- return { nextUrl };
+ return {
+ type: ConfirmPayResultType.Done,
+ nextUrl,
+ };
}
/**
@@ -957,6 +961,9 @@ export async function preparePayForUri(
await tx.put(Stores.purchases, p);
});
const r = await submitPay(ws, proposalId);
+ if (r.type !== ConfirmPayResultType.Done) {
+ throw Error("submitting pay failed");
+ }
return {
status: PreparePayResultType.AlreadyConfirmed,
contractTerms: JSON.parse(purchase.contractTermsRaw),
diff --git a/packages/taler-wallet-core/src/types/transactions.ts b/packages/taler-wallet-core/src/types/transactions.ts
index fe5580f85..47e3e7d5b 100644
--- a/packages/taler-wallet-core/src/types/transactions.ts
+++ b/packages/taler-wallet-core/src/types/transactions.ts
@@ -53,7 +53,7 @@ export interface TransactionsResponse {
transactions: Transaction[];
}
-interface TransactionError {
+export interface TransactionError {
/**
* TALER_EC_* unique error code.
* The action(s) offered and message displayed on the transaction item depend on this code.
diff --git a/packages/taler-wallet-core/src/types/walletTypes.ts b/packages/taler-wallet-core/src/types/walletTypes.ts
index 6175c40eb..26d7e8e0c 100644
--- a/packages/taler-wallet-core/src/types/walletTypes.ts
+++ b/packages/taler-wallet-core/src/types/walletTypes.ts
@@ -45,6 +45,7 @@ import {
} from "../util/codec";
import { AmountString } from "./talerTypes";
import { codec } from "..";
+import { TransactionError } from "./transactions";
/**
* Response for the create reserve request to the wallet.
@@ -192,13 +193,30 @@ export function mkAmount(
return { value, fraction, currency };
}
+export const enum ConfirmPayResultType {
+ Done = "done",
+ Pending = "pending",
+}
+
/**
* Result for confirmPay
*/
-export interface ConfirmPayResult {
+export interface ConfirmPayResultDone {
+ type: ConfirmPayResultType.Done,
+
nextUrl: string;
}
+export interface ConfirmPayResultPending {
+ type: ConfirmPayResultType.Pending,
+
+ lastError: TransactionError;
+}
+
+export type ConfirmPayResult =
+ | ConfirmPayResultDone
+ | ConfirmPayResultPending
+
/**
* Information about all sender wire details known to the wallet,
* as well as exchanges that accept these wire types.
diff --git a/packages/taler-wallet-webextension/src/pages/pay.tsx b/packages/taler-wallet-webextension/src/pages/pay.tsx
index 2abd423bd..b876a9c58 100644
--- a/packages/taler-wallet-webextension/src/pages/pay.tsx
+++ b/packages/taler-wallet-webextension/src/pages/pay.tsx
@@ -109,6 +109,9 @@ function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element {
try {
setLoading(true);
const res = await wxApi.confirmPay(proposalId, undefined);
+ if (res.type !== walletTypes.ConfirmPayResultType.Done) {
+ throw Error("payment pending");
+ }
document.location.href = res.nextUrl;
} catch (e) {
console.error(e);