diff options
author | Florian Dold <florian@dold.me> | 2020-11-26 12:27:31 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2020-11-26 12:27:31 +0100 |
commit | 2b19594e7adfc4ae75970db5c0881243efcac4df (patch) | |
tree | 84ace2e363fb9dd8c6880edcdd9c0f4c1792b482 /packages | |
parent | c0006300cf68cc912ecdb3135b74ebb4c5b77243 (diff) | |
download | wallet-core-2b19594e7adfc4ae75970db5c0881243efcac4df.tar.xz |
hide transient errors when accepting a tip
Diffstat (limited to 'packages')
-rw-r--r-- | packages/taler-wallet-core/src/operations/tip.ts | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/packages/taler-wallet-core/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/tip.ts index 119695de6..cbf61a86c 100644 --- a/packages/taler-wallet-core/src/operations/tip.ts +++ b/packages/taler-wallet-core/src/operations/tip.ts @@ -40,7 +40,7 @@ import { getRandomBytes, encodeCrock } from "../crypto/talerCrypto"; import { guardOperationException, makeErrorDetails } from "./errors"; import { NotificationType } from "../types/notifications"; import { getTimestampNow } from "../util/time"; -import { readSuccessResponseJsonOrThrow } from "../util/http"; +import { getHttpResponseErrorDetails, readSuccessResponseJsonOrThrow } from "../util/http"; import { URL } from "../util/url"; import { Logger } from "../util/logging"; import { checkDbInvariant } from "../util/invariants"; @@ -132,11 +132,11 @@ export async function prepareTip( async function incrementTipRetry( ws: InternalWalletState, - refreshSessionId: string, + walletTipId: string, err: TalerErrorDetails | undefined, ): Promise<void> { await ws.db.runWithWriteTransaction([Stores.tips], async (tx) => { - const t = await tx.get(Stores.tips, refreshSessionId); + const t = await tx.get(Stores.tips, walletTipId); if (!t) { return; } @@ -239,6 +239,23 @@ async function processTipImpl( const req = { planchets: planchetsDetail }; const merchantResp = await ws.http.postJson(tipStatusUrl.href, req); + + // Hide transient errors. + if ( + tipRecord.retryInfo.retryCounter < 5 && + merchantResp.status >= 500 && + merchantResp.status <= 599 + ) { + const err = makeErrorDetails( + TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, + "tip pickup failed (transient)", + getHttpResponseErrorDetails(merchantResp), + ); + await incrementTipRetry(ws, tipRecord.walletTipId, err); + // FIXME: Maybe we want to signal to the caller that the transient error happened? + return; + } + const response = await readSuccessResponseJsonOrThrow( merchantResp, codecForTipResponse(), |