summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/pay.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-08-24 15:08:34 +0200
committerFlorian Dold <florian@dold.me>2021-08-24 15:08:34 +0200
commita09359bd3930f2a4550de22bd018122a2c7846e6 (patch)
tree9adad799168353bad6e0eb9e6df8744463ba2f56 /packages/taler-wallet-core/src/operations/pay.ts
parent408d8e9fc896193fbcff1afd12aa04ab6d513798 (diff)
downloadwallet-core-a09359bd3930f2a4550de22bd018122a2c7846e6.tar.gz
wallet-core-a09359bd3930f2a4550de22bd018122a2c7846e6.tar.bz2
wallet-core-a09359bd3930f2a4550de22bd018122a2c7846e6.zip
implement freezing for payments
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/pay.ts21
1 files changed, 21 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts
index a201e6f8d..9a7b0d069 100644
--- a/packages/taler-wallet-core/src/operations/pay.ts
+++ b/packages/taler-wallet-core/src/operations/pay.ts
@@ -93,6 +93,7 @@ import {
readSuccessResponseJsonOrErrorCode,
readSuccessResponseJsonOrThrow,
readTalerErrorResponse,
+ readUnexpectedResponseDetails,
throwUnexpectedRequestError,
} from "../util/http.js";
import {
@@ -1209,6 +1210,26 @@ async function submitPay(
};
}
+ if (resp.status === HttpResponseStatus.BadRequest) {
+ const errDetails = await readUnexpectedResponseDetails(resp);
+ logger.warn("unexpected 400 response for /pay");
+ logger.warn(j2s(errDetails));
+ await ws.db
+ .mktx((x) => ({ purchases: x.purchases }))
+ .runReadWrite(async (tx) => {
+ const purch = await tx.purchases.get(proposalId);
+ if (!purch) {
+ return;
+ }
+ purch.payFrozen = true;
+ purch.lastPayError = errDetails;
+ delete purch.payRetryInfo;
+ await tx.purchases.put(purch);
+ });
+ // FIXME: Maybe introduce a new return type for this instead of throwing?
+ throw new OperationFailedAndReportedError(errDetails);
+ }
+
if (resp.status === HttpResponseStatus.Conflict) {
const err = await readTalerErrorResponse(resp);
if (