taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 9e379ef399a032a3fbd86d18ede867aaf6a1821f
parent b94dc8f9e26219b1f54e1456f8d7be00d333aa80
Author: Florian Dold <florian@dold.me>
Date:   Thu,  4 Nov 2021 20:20:11 +0100

anastasis-core: truth payments, status codes

Diffstat:
Mpackages/anastasis-core/src/index.ts | 34++++++++++++++++++++++++++++------
1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts @@ -466,6 +466,8 @@ async function uploadSecret( const truthMetadataMap = recoveryData.truth_metadata; const rd = recoveryData.recovery_document; + const truthPayUris: string[] = []; + for (const truthKey of Object.keys(truthMetadataMap)) { const tm = truthMetadataMap[truthKey]; const pol = state.policies![tm.policy_index]; @@ -501,12 +503,31 @@ async function uploadSecret( body: JSON.stringify(tur), }); - if (resp.status !== 204) { - return { - code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, - hint: `could not upload truth (HTTP status ${resp.status})`, - }; + if (resp.status === HttpStatusCode.NoContent) { + continue; + } + if (resp.status === HttpStatusCode.PaymentRequired) { + const talerPayUri = resp.headers.get("Taler"); + if (!talerPayUri) { + return { + code: TalerErrorCode.ANASTASIS_REDUCER_BACKEND_FAILURE, + hint: `payment requested, but no taler://pay URI given`, + }; + } + truthPayUris.push(talerPayUri); } + return { + code: TalerErrorCode.ANASTASIS_REDUCER_NETWORK_FAILED, + hint: `could not upload truth (HTTP status ${resp.status})`, + }; + } + + if (truthPayUris.length > 0) { + return { + ...state, + backup_state: BackupStates.TruthsPaying, + payments: truthPayUris, + }; } const successDetails: SuccessDetails = {}; @@ -537,7 +558,7 @@ async function uploadSecret( body: decodeCrock(encRecoveryDoc), }, ); - if (resp.status === HttpStatusCode.Accepted) { + if (resp.status === HttpStatusCode.NoContent) { let policyVersion = 0; let policyExpiration: Timestamp = { t_ms: 0 }; try { @@ -554,6 +575,7 @@ async function uploadSecret( policy_version: policyVersion, policy_expiration: policyExpiration, }; + continue; } if (resp.status === HttpStatusCode.PaymentRequired) { const talerPayUri = resp.headers.get("Taler");