diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-08-11 17:32:11 +0530 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-08-11 17:32:11 +0530 |
commit | ff3f96566151d390462931574184ed9e6b84db5b (patch) | |
tree | c8616b7acbe6f8a7ccdcd069de0ac9a3b0741df7 /packages | |
parent | 172a51a43a5cfebd06876206ec3a0cd75ad86e43 (diff) |
towards the improved confirmPay API
Diffstat (limited to 'packages')
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); |