[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: when error happen there is no
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: when error happen there is no garantee that taler error details is present, so undefined should be set |
Date: |
Mon, 02 Sep 2024 19:59:37 +0200 |
This is an automated email from the git hooks/post-receive script.
sebasjm pushed a commit to branch master
in repository wallet-core.
The following commit(s) were added to refs/heads/master by this push:
new b52b13dda when error happen there is no garantee that taler error
details is present, so undefined should be set
b52b13dda is described below
commit b52b13ddae1dfcb2866f0e55de5617681165b7de
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Mon Sep 2 14:59:09 2024 -0300
when error happen there is no garantee that taler error details is present,
so undefined should be set
---
packages/bank-ui/src/Routing.tsx | 4 +-
packages/bank-ui/src/hooks/regional.ts | 32 ++++++++---
.../bank-ui/src/pages/OperationState/views.tsx | 35 ++++++-----
.../bank-ui/src/pages/PaytoWireTransferForm.tsx | 16 +++---
packages/bank-ui/src/pages/SolveChallengePage.tsx | 18 +++---
packages/bank-ui/src/pages/WalletWithdrawForm.tsx | 6 +-
.../src/pages/WithdrawalConfirmationQuestion.tsx | 16 +++---
.../src/pages/account/ShowAccountDetails.tsx | 16 +++---
.../src/pages/account/UpdateAccountPassword.tsx | 8 +--
.../bank-ui/src/pages/admin/CreateNewAccount.tsx | 22 +++----
packages/bank-ui/src/pages/admin/DownloadStats.tsx | 4 +-
packages/bank-ui/src/pages/admin/RemoveAccount.tsx | 8 +--
.../src/pages/regional/ConversionConfig.tsx | 4 +-
.../bank-ui/src/pages/regional/CreateCashout.tsx | 16 +++---
.../src/paths/admin/create/index.tsx | 2 +-
.../src/paths/admin/list/index.tsx | 4 +-
.../src/paths/instance/accounts/create/index.tsx | 6 +-
.../src/paths/instance/accounts/list/index.tsx | 2 +-
.../src/paths/instance/accounts/update/index.tsx | 18 +++---
.../src/paths/instance/categories/create/index.tsx | 2 +-
.../src/paths/instance/categories/list/index.tsx | 2 +-
.../src/paths/instance/orders/create/index.tsx | 12 ++--
.../src/paths/instance/orders/details/index.tsx | 2 +-
.../src/paths/instance/orders/list/index.tsx | 2 +-
.../paths/instance/otp_devices/create/index.tsx | 2 +-
.../src/paths/instance/otp_devices/list/index.tsx | 2 +-
.../src/paths/instance/products/create/index.tsx | 2 +-
.../src/paths/instance/products/list/index.tsx | 4 +-
.../src/paths/instance/products/update/index.tsx | 2 +-
.../src/paths/instance/templates/create/index.tsx | 2 +-
.../src/paths/instance/templates/list/index.tsx | 2 +-
.../src/paths/instance/templates/update/index.tsx | 2 +-
.../src/paths/instance/templates/use/index.tsx | 12 ++--
.../src/paths/instance/token/index.tsx | 4 +-
.../paths/instance/tokenfamilies/create/index.tsx | 2 +-
.../paths/instance/tokenfamilies/list/index.tsx | 4 +-
.../paths/instance/tokenfamilies/update/index.tsx | 2 +-
.../src/paths/instance/transfers/create/index.tsx | 2 +-
.../src/paths/instance/transfers/list/index.tsx | 2 +-
.../src/paths/instance/webhooks/create/index.tsx | 2 +-
.../src/paths/instance/webhooks/list/index.tsx | 2 +-
.../src/paths/instance/webhooks/update/index.tsx | 2 +-
packages/taler-harness/src/index.ts | 4 +-
packages/taler-util/src/http-client/challenger.ts | 2 +-
packages/taler-util/src/http-client/exchange.ts | 31 ++++++++--
.../taler-util/src/http-client/officer-account.ts | 35 +----------
packages/taler-util/src/http-common.ts | 4 +-
packages/taler-util/src/http-impl.node.ts | 4 ++
packages/taler-util/src/operation.ts | 67 ++++++++++++++++------
packages/taler-util/src/types-taler-common.ts | 17 +-----
packages/taler-wallet-core/src/pay-merchant.ts | 12 ++--
packages/taler-wallet-core/src/withdraw.ts | 6 +-
.../src/wallet/AddExchange/index.ts | 18 +++---
.../src/wallet/AddExchange/state.ts | 14 ++---
.../src/wallet/AddExchange/views.tsx | 3 +-
.../src/wallet/History.tsx | 2 -
packages/web-util/src/context/bank-api.ts | 6 +-
packages/web-util/src/context/challenger-api.ts | 6 +-
packages/web-util/src/context/exchange-api.ts | 6 +-
packages/web-util/src/context/merchant-api.ts | 6 +-
packages/web-util/src/hooks/useNotifications.ts | 2 +-
61 files changed, 301 insertions(+), 253 deletions(-)
diff --git a/packages/bank-ui/src/Routing.tsx b/packages/bank-ui/src/Routing.tsx
index 2b3e4e6ae..0e4a264a8 100644
--- a/packages/bank-ui/src/Routing.tsx
+++ b/packages/bank-ui/src/Routing.tsx
@@ -128,7 +128,7 @@ function PublicRounting({
return notify({
type: "error",
title: i18n.str`Wrong credentials for "${username}"`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -136,7 +136,7 @@ function PublicRounting({
return notify({
type: "error",
title: i18n.str`Account not found`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/hooks/regional.ts
b/packages/bank-ui/src/hooks/regional.ts
index e0c861a0f..417874cf8 100644
--- a/packages/bank-ui/src/hooks/regional.ts
+++ b/packages/bank-ui/src/hooks/regional.ts
@@ -42,10 +42,10 @@ const useSWR = _useSWR as unknown as SWRHook;
export type TransferCalculation =
| {
- debit: AmountJson;
- credit: AmountJson;
- beforeFee: AmountJson;
- }
+ debit: AmountJson;
+ credit: AmountJson;
+ beforeFee: AmountJson;
+ }
| "amount-is-too-small";
type EstimatorFunction = (
amount: AmountJson,
@@ -109,7 +109,11 @@ export function useCashinEstimator(): ConversionEstimators
{
// this below can't happen
case HttpStatusCode.NotImplemented: //it should not be able to call
this function
case HttpStatusCode.BadRequest: //we are using just one parameter
- throw TalerError.fromDetail(resp.detail.code, {},
resp.detail.hint);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get
conversion cashin rate"))
+ }
}
}
const credit = Amounts.parseOrThrow(resp.body.amount_credit);
@@ -134,7 +138,11 @@ export function useCashinEstimator(): ConversionEstimators
{
// this below can't happen
case HttpStatusCode.NotImplemented: //it should not be able to call
this function
case HttpStatusCode.BadRequest: //we are using just one parameter
- throw TalerError.fromDetail(resp.detail.code, {},
resp.detail.hint);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get
conversion cashin rate"))
+ }
}
}
const credit = Amounts.parseOrThrow(resp.body.amount_credit);
@@ -167,7 +175,11 @@ export function useCashoutEstimator():
ConversionEstimators {
// this below can't happen
case HttpStatusCode.NotImplemented: //it should not be able to call
this function
case HttpStatusCode.BadRequest: //we are using just one parameter
- throw TalerError.fromDetail(resp.detail.code, {},
resp.detail.hint);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get
conversion cashout rate"))
+ }
}
}
const credit = Amounts.parseOrThrow(resp.body.amount_credit);
@@ -192,7 +204,11 @@ export function useCashoutEstimator():
ConversionEstimators {
// this below can't happen
case HttpStatusCode.NotImplemented: //it should not be able to call
this function
case HttpStatusCode.BadRequest: //we are using just one parameter
- throw TalerError.fromDetail(resp.detail.code, {},
resp.detail.hint);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get
conversion cashout rate"))
+ }
}
}
const credit = Amounts.parseOrThrow(resp.body.amount_credit);
diff --git a/packages/bank-ui/src/pages/OperationState/views.tsx
b/packages/bank-ui/src/pages/OperationState/views.tsx
index a0c920910..2586ec01b 100644
--- a/packages/bank-ui/src/pages/OperationState/views.tsx
+++ b/packages/bank-ui/src/pages/OperationState/views.tsx
@@ -80,7 +80,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The reserve operation has been confirmed
previously and can't be aborted`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -88,7 +88,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The operation id is invalid.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -96,7 +96,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The operation was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -121,7 +121,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The withdrawal has been aborted previously and
can't be confirmed`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -129,7 +129,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The withdrawal operation can't be confirmed before
a wallet accepted the transaction.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -137,7 +137,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The operation id is invalid.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -145,7 +145,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`The operation was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -153,7 +153,7 @@ export function NeedConfirmationView({
return notify({
type: "error",
title: i18n.str`Your balance is not enough.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -388,7 +388,9 @@ export function FailedView({ error }: State.Failed) {
type="danger"
title={i18n.str`Unauthorized to make the operation, maybe the
session has expired or the password changed.`}
>
- <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ {!error.detail ? undefined :
+ <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ }
</Attention>
);
case HttpStatusCode.Conflict:
@@ -397,7 +399,10 @@ export function FailedView({ error }: State.Failed) {
type="danger"
title={i18n.str`The operation was rejected due to insufficient
funds.`}
>
- <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ {!error.detail ? undefined :
+
+ <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ }
</Attention>
);
case HttpStatusCode.NotFound:
@@ -406,7 +411,9 @@ export function FailedView({ error }: State.Failed) {
type="danger"
title={i18n.str`The operation was rejected due to insufficient
funds.`}
>
- <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ {!error.detail ? undefined :
+ <div class="mt-2 text-sm text-red-700">{error.detail.hint}</div>
+ }
</Attention>
);
default:
@@ -528,7 +535,7 @@ export function ReadyView({
return notify({
type: "error",
title: i18n.str`The reserve operation has been confirmed
previously and can't be aborted`,
- description: hasError.detail.hint as TranslatedString,
+ description: hasError.detail?.hint as TranslatedString,
debug: hasError.detail,
when: AbsoluteTime.now(),
});
@@ -536,7 +543,7 @@ export function ReadyView({
return notify({
type: "error",
title: i18n.str`The operation id is invalid.`,
- description: hasError.detail.hint as TranslatedString,
+ description: hasError.detail?.hint as TranslatedString,
debug: hasError.detail,
when: AbsoluteTime.now(),
});
@@ -544,7 +551,7 @@ export function ReadyView({
return notify({
type: "error",
title: i18n.str`The operation was not found.`,
- description: hasError.detail.hint as TranslatedString,
+ description: hasError.detail?.hint as TranslatedString,
debug: hasError.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
index 743a1092b..d52961204 100644
--- a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
+++ b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
@@ -209,7 +209,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`The request was invalid or the payto://-URI used
unacceptable features.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -217,7 +217,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`Not enough permission to complete the
operation.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -225,7 +225,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`Bank administrator can't be the transfer
creditor.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -235,7 +235,7 @@ export function PaytoWireTransferForm({
title: i18n.str`The destination account "${
acName ?? puri
}" was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -243,7 +243,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`The origin and the destination of the transfer
can't be the same.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -251,7 +251,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`Your balance is not enough.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -259,7 +259,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`The origin account "${puri}" was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -267,7 +267,7 @@ export function PaytoWireTransferForm({
return notify({
type: "error",
title: i18n.str`Tried to create the transaction
${check.maxTries} times with different UID but failed.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/SolveChallengePage.tsx
b/packages/bank-ui/src/pages/SolveChallengePage.tsx
index 93defae0a..186038cad 100644
--- a/packages/bank-ui/src/pages/SolveChallengePage.tsx
+++ b/packages/bank-ui/src/pages/SolveChallengePage.tsx
@@ -112,7 +112,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`Cashout not found. It may be also mean that it
was already aborted.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -120,7 +120,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`Cashout not found. It may be also mean that it
was already aborted.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -128,7 +128,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`Cashout not found. It may be also mean that it
was already aborted.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -154,7 +154,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`Challenge not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -162,7 +162,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`This user is not authorized to complete this
challenge.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -170,7 +170,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`Too many attempts, try another code.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -178,7 +178,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`The confirmation code is wrong, try again.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -186,7 +186,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`The operation expired.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -225,7 +225,7 @@ export function SolveChallengePage({
return notify({
type: "error",
title: i18n.str`The operation failed.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/WalletWithdrawForm.tsx
b/packages/bank-ui/src/pages/WalletWithdrawForm.tsx
index 908412f2b..ec1ee1ff9 100644
--- a/packages/bank-ui/src/pages/WalletWithdrawForm.tsx
+++ b/packages/bank-ui/src/pages/WalletWithdrawForm.tsx
@@ -229,7 +229,7 @@ function OldWithdrawalForm({
notify({
type: "error",
title: i18n.str`The operation was rejected due to insufficient
funds`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -239,7 +239,7 @@ function OldWithdrawalForm({
notify({
type: "error",
title: i18n.str`The operation was rejected due to insufficient
funds`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -249,7 +249,7 @@ function OldWithdrawalForm({
notify({
type: "error",
title: i18n.str`Account not found`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
b/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
index 25fa36d55..efbc1bc83 100644
--- a/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
+++ b/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -103,7 +103,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The withdrawal has been aborted previously and
can't be confirmed`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -111,7 +111,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The withdrawal operation can't be confirmed
before a wallet accepted the transaction.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -119,7 +119,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The operation id is invalid.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -127,7 +127,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The operation was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -135,7 +135,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`Your balance is not enough for the operation.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -173,7 +173,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The reserve operation has been confirmed
previously and can't be aborted`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -181,7 +181,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The operation id is invalid.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -189,7 +189,7 @@ export function WithdrawalConfirmationQuestion({
return notify({
type: "error",
title: i18n.str`The operation was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx
b/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx
index d06373c39..b785f582b 100644
--- a/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx
+++ b/packages/bank-ui/src/pages/account/ShowAccountDetails.tsx
@@ -129,7 +129,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`The rights to change the account are not
sufficient`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -137,7 +137,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`The username was not found`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -145,7 +145,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`You can't change the legal name, please contact
the your account administrator.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -153,7 +153,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`You can't change the debt limit, please contact
the your account administrator.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -161,7 +161,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`You can't change the cashout address, please
contact the your account administrator.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -169,7 +169,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`No information for the selected authentication
channel.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -187,7 +187,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`Authentication channel is not supported.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -196,7 +196,7 @@ export function ShowAccountDetails({
return notify({
type: "error",
title: i18n.str`Only the administrator can change the minimum
cashout limit.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/account/UpdateAccountPassword.tsx
b/packages/bank-ui/src/pages/account/UpdateAccountPassword.tsx
index 2724fba11..2ffe7ad81 100644
--- a/packages/bank-ui/src/pages/account/UpdateAccountPassword.tsx
+++ b/packages/bank-ui/src/pages/account/UpdateAccountPassword.tsx
@@ -115,7 +115,7 @@ export function UpdateAccountPassword({
return notify({
type: "error",
title: i18n.str`Not authorized to change the password, maybe the
session is invalid.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -123,7 +123,7 @@ export function UpdateAccountPassword({
return notify({
type: "error",
title: i18n.str`Account not found`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -131,7 +131,7 @@ export function UpdateAccountPassword({
return notify({
type: "error",
title: i18n.str`You need to provide the old password. If you
don't have it contact your account administrator.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -139,7 +139,7 @@ export function UpdateAccountPassword({
return notify({
type: "error",
title: i18n.str`Your current password doesn't match, can't
change to a new password.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx
b/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx
index 68f39fb9f..ba08f03cc 100644
--- a/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx
+++ b/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx
@@ -70,7 +70,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Server replied that phone or email is invalid`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -78,7 +78,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`The rights to perform the operation are not
sufficient`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -86,7 +86,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Account username is already taken`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -94,7 +94,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Account id is already taken`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -102,7 +102,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Bank ran out of bonus credit.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -110,7 +110,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Account username can't be used because is
reserved`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -118,7 +118,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Only admin is allow to set debt limit.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -126,7 +126,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`No information for the selected authentication
channel.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -134,7 +134,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Authentication channel is not supported.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -142,7 +142,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Only admin can create accounts with second
factor authentication.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -150,7 +150,7 @@ export function CreateNewAccount({
return notify({
type: "error",
title: i18n.str`Only the administrator can change the minimum
cashout limit.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/admin/DownloadStats.tsx
b/packages/bank-ui/src/pages/admin/DownloadStats.tsx
index 8f6bb7c23..40e5ed884 100644
--- a/packages/bank-ui/src/pages/admin/DownloadStats.tsx
+++ b/packages/bank-ui/src/pages/admin/DownloadStats.tsx
@@ -468,7 +468,7 @@ async function fetchAllStatus(
: undefined;
if (previous && previous.type === "fail" && options.endOnFirstFail) {
- throw TalerError.fromUncheckedDetail(previous.detail);
+ return accumulatedMap; //skip
}
const current = await api.getMonitor(token, {
@@ -477,7 +477,7 @@ async function fetchAllStatus(
});
if (current.type === "fail" && options.endOnFirstFail) {
- throw TalerError.fromUncheckedDetail(current.detail);
+ return accumulatedMap; //skip
}
const metricName =
diff --git a/packages/bank-ui/src/pages/admin/RemoveAccount.tsx
b/packages/bank-ui/src/pages/admin/RemoveAccount.tsx
index 74e39112d..bd715bcc9 100644
--- a/packages/bank-ui/src/pages/admin/RemoveAccount.tsx
+++ b/packages/bank-ui/src/pages/admin/RemoveAccount.tsx
@@ -132,7 +132,7 @@ export function RemoveAccount({
return notify({
type: "error",
title: i18n.str`No enough permission to delete the account.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -140,7 +140,7 @@ export function RemoveAccount({
return notify({
type: "error",
title: i18n.str`The username was not found.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -148,7 +148,7 @@ export function RemoveAccount({
return notify({
type: "error",
title: i18n.str`Can't delete a reserved username.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -156,7 +156,7 @@ export function RemoveAccount({
return notify({
type: "error",
title: i18n.str`Can't delete an account with balance different
than zero.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/regional/ConversionConfig.tsx
b/packages/bank-ui/src/pages/regional/ConversionConfig.tsx
index 3bde7a30a..ea2619cea 100644
--- a/packages/bank-ui/src/pages/regional/ConversionConfig.tsx
+++ b/packages/bank-ui/src/pages/regional/ConversionConfig.tsx
@@ -205,7 +205,7 @@ function useComponentState({
return notify({
type: "error",
title: i18n.str`Wrong credentials`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -214,7 +214,7 @@ function useComponentState({
return notify({
type: "error",
title: i18n.str`Conversion is disabled`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/bank-ui/src/pages/regional/CreateCashout.tsx
b/packages/bank-ui/src/pages/regional/CreateCashout.tsx
index 20c6da23d..da3a03287 100644
--- a/packages/bank-ui/src/pages/regional/CreateCashout.tsx
+++ b/packages/bank-ui/src/pages/regional/CreateCashout.tsx
@@ -299,7 +299,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`Account not found`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -307,7 +307,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`Duplicated request detected, check if the
operation succeeded or try again.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -315,7 +315,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`The conversion rate was incorrectly applied`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -323,7 +323,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`The account does not have sufficient funds`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -331,7 +331,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`Cashout are disabled`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -339,7 +339,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`Missing cashout URI in the profile`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -347,7 +347,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`The amount is less than the minimum allowed.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
@@ -356,7 +356,7 @@ export function CreateCashout({
return notify({
type: "error",
title: i18n.str`Sending the confirmation message failed, retry
later or contact the administrator.`,
- description: resp.detail.hint as TranslatedString,
+ description: resp.detail?.hint as TranslatedString ,
debug: resp.detail,
when: AbsoluteTime.now(),
});
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
index c7b97e670..abf635662 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/create/index.tsx
@@ -53,7 +53,7 @@ export default function Create({ onBack, onConfirm, forceId
}: Props): VNode {
setNotif({
message: i18n.str`Failed to create instance`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
diff --git a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
index 2b0aa4de2..f6c2f9e8f 100644
--- a/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/admin/list/index.tsx
@@ -104,7 +104,7 @@ export default function Instances({ onCreate, onUpdate }:
Props): VNode {
setNotif({
message: i18n.str`Failed to delete instance`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
@@ -144,7 +144,7 @@ export default function Instances({ onCreate, onUpdate }:
Props): VNode {
setNotif({
message: i18n.str`Failed to purge instance`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
index ac48e65ea..9e3b1b4bc 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
@@ -61,12 +61,12 @@ export default function CreateValidator({ onConfirm, onBack
}: Props): VNode {
onCreate={async (request: Entity) => {
return lib.instance
.addBankAccount(state.token, request)
- .then((created) => {
- if (created.type === "fail") {
+ .then((resp) => {
+ if (resp.type === "fail") {
setNotif({
message: i18n.str`Could not create account`,
type: "ERROR",
- description: created.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
index 2bb1144f5..f68562ad6 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/index.tsx
@@ -102,7 +102,7 @@ export default function ListOtpDevices({ onCreate, onSelect
}: Props): VNode {
setNotif({
message: i18n.str`Could not delete the bank account`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
index aca8aeb8e..fc031625a 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx
@@ -84,12 +84,12 @@ export default function UpdateValidator({
onUpdate={async (request) => {
return lib.instance
.updateBankAccount(state.token, bid, request)
- .then((updated) => {
- if (updated.type === "fail") {
+ .then((resp) => {
+ if (resp.type === "fail") {
setNotif({
message: i18n.str`Could not update account`,
type: "ERROR",
- description: updated.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
@@ -105,15 +105,15 @@ export default function UpdateValidator({
}}
onReplace={async (prev, next) => {
try {
- const created = await lib.instance.addBankAccount(
+ const resp = await lib.instance.addBankAccount(
state.token,
next,
);
- if (created.type === "fail") {
+ if (resp.type === "fail") {
setNotif({
message: i18n.str`Could not create account`,
type: "ERROR",
- description: created.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
@@ -126,15 +126,15 @@ export default function UpdateValidator({
return;
}
try {
- const deleted = await lib.instance.deleteBankAccount(
+ const resp = await lib.instance.deleteBankAccount(
state.token,
prev.h_wire,
);
- if (deleted.type === "fail") {
+ if (resp.type === "fail") {
setNotif({
message: i18n.str`Could not delete account`,
type: "ERROR",
- description: deleted.detail.hint,
+ description: resp.detail?.hint,
});
return;
}
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
index 0eb8055da..0a8c264f1 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/categories/create/index.tsx
@@ -58,7 +58,7 @@ export default function CreateCategory({ onConfirm, onBack }:
Props): VNode {
setNotif({
message: i18n.str`Could not add category`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
index 732ab5201..378fa38d4 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/categories/list/index.tsx
@@ -94,7 +94,7 @@ export default function ListCategories({ onCreate, onSelect
}: Props): VNode {
setNotif({
message: i18n.str`Could not delete the category`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
index 37cb4ffdc..0ce2c331d 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/index.tsx
@@ -99,17 +99,17 @@ export default function OrderCreate({ onConfirm, onBack }:
Props): VNode {
onCreate={(request: TalerMerchantApi.PostOrderRequest) => {
lib.instance
.createOrder(state.token, request)
- .then((r) => {
- if (r.type === "ok") {
- return onConfirm(r.body.order_id);
+ .then((resp) => {
+ if (resp.type === "ok") {
+ return onConfirm(resp.body.order_id);
} else {
setNotif({
message: i18n.str`Could not create order`,
type: "ERROR",
description:
- r.case === HttpStatusCode.Gone
- ? i18n.str`No more stock for product with id
"${r.body.product_id}".`
- : r.detail.hint,
+ resp.case === HttpStatusCode.Gone
+ ? i18n.str`No more stock for product with id
"${resp.body.product_id}".`
+ : resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
index 7d5acd07f..5da500dc0 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/orders/details/index.tsx
@@ -92,7 +92,7 @@ export default function Update({ oid, onBack }: Props): VNode
{
setNotif({
message: i18n.str`Could not create the refund`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
index 3d1892b47..450585a9f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/list/index.tsx
@@ -167,7 +167,7 @@ export default function OrderList({ onCreate, onSelect }:
Props): VNode {
setNotif({
message: i18n.str`Could not create the refund`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
index adb417a09..476cd3ba9 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/create/index.tsx
@@ -65,7 +65,7 @@ export default function CreateValidator({ onConfirm, onBack
}: Props): VNode {
setNotif({
message: i18n.str`Could not add device`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
index d6f2bfe4d..f566ee2c2 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/otp_devices/list/index.tsx
@@ -94,7 +94,7 @@ export default function ListOtpDevices({ onCreate, onSelect
}: Props): VNode {
setNotif({
message: i18n.str`Could not delete the device`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
index 5352fd792..f7c462647 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/products/create/index.tsx
@@ -57,7 +57,7 @@ export default function CreateProduct({ onConfirm, onBack }:
Props): VNode {
setNotif({
message: i18n.str`Could not create product`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
index 3b0fb7ed6..8755e7338 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/products/list/index.tsx
@@ -108,7 +108,7 @@ export default function ProductList({ onCreate, onSelect }:
Props): VNode {
setNotif({
message: i18n.str`Could not update the product`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
@@ -148,7 +148,7 @@ export default function ProductList({ onCreate, onSelect }:
Props): VNode {
setNotif({
message: i18n.str`Could not delete the product`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
index 33db7021f..56626cfa8 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/products/update/index.tsx
@@ -90,7 +90,7 @@ export default function UpdateProduct({
setNotif({
message: i18n.str`Could not update product`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
index cc40591d4..bc615c8b8 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/templates/create/index.tsx
@@ -57,7 +57,7 @@ export default function CreateTemplate({ onConfirm, onBack }:
Props): VNode {
setNotif({
message: i18n.str`Could not create template`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
index ad4ed9363..6c79c47ff 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/templates/list/index.tsx
@@ -136,7 +136,7 @@ export default function ListTemplates({
setNotif({
message: i18n.str`Failed to delete template`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
index a42a40c63..5e3608334 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/templates/update/index.tsx
@@ -95,7 +95,7 @@ export default function UpdateTemplate({
setNotif({
message: i18n.str`Could not update template`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
index ebdb1a6fa..e8a0c3eba 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/templates/use/index.tsx
@@ -83,17 +83,17 @@ export default function TemplateUsePage({
request: TalerMerchantApi.UsingTemplateDetails,
) => {
return lib.instance.useTemplateCreateOrder(tid, request)
- .then((res) => {
- if (res.type === "ok") {
- onOrderCreated(res.body.order_id)
+ .then((resp) => {
+ if (resp.type === "ok") {
+ onOrderCreated(resp.body.order_id)
} else {
setNotif({
message: i18n.str`Could not create order from template`,
type: "ERROR",
description:
- res.case === HttpStatusCode.Gone
- ? i18n.str`No more stock for product with id
"${res.body.product_id}".`
- : res.detail.hint,
+ resp.case === HttpStatusCode.Gone
+ ? i18n.str`No more stock for product with id
"${resp.body.product_id}".`
+ : resp.detail?.hint,
});
}
})
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
index def8ec821..b9659951c 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/token/index.tsx
@@ -82,7 +82,7 @@ export default function Token({ onChange, onCancel }: Props):
VNode {
return setNotif({
message: i18n.str`Failed to clear token`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
@@ -108,7 +108,7 @@ export default function Token({ onChange, onCancel }:
Props): VNode {
return setNotif({
message: i18n.str`Failed to set new token`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
}
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
index 34361fd56..1850d4638 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/create/index.tsx
@@ -56,7 +56,7 @@ export default function CreateTokenFamily({ onConfirm, onBack
}: Props): VNode {
setNotif({
message: i18n.str`Could not create token family`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
index f01d0b0d7..75da1496c 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/list/index.tsx
@@ -95,7 +95,7 @@ export default function TokenFamilyList({ onCreate, onSelect
}: Props): VNode {
setNotif({
message: i18n.str`Could not update the token family`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
@@ -133,7 +133,7 @@ export default function TokenFamilyList({ onCreate,
onSelect }: Props): VNode {
setNotif({
message: i18n.str`Failed to delete token family`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
index 287cc7a51..92b015d13 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/tokenfamilies/update/index.tsx
@@ -105,7 +105,7 @@ export default function UpdateTokenFamily({
setNotif({
message: i18n.str`Could not update token family`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
index 2f295fcc8..2ee03ead3 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/create/index.tsx
@@ -67,7 +67,7 @@ export default function CreateTransfer({ onConfirm, onBack }:
Props): VNode {
setNotif({
message: i18n.str`Could not inform transfer`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
index 6a16446d8..cae1a7fe3 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
@@ -122,7 +122,7 @@ export default function ListTransfer({ onCreate }: Props):
VNode {
setNotif({
message: i18n.str`Failed to delete transfer`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
} catch (error) {
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
index 6595879fb..128124dc8 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/index.tsx
@@ -57,7 +57,7 @@ export default function CreateWebhook({ onConfirm, onBack }:
Props): VNode {
setNotif({
message: i18n.str`Could not create the webhook`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
index 0e1c57839..fe374496f 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/list/index.tsx
@@ -92,7 +92,7 @@ export default function ListWebhooks({ onCreate, onSelect }:
Props): VNode {
setNotif({
message: i18n.str`Could not delete the webhook`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
})
diff --git
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
index 83dea45eb..82f1463f9 100644
---
a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
+++
b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/update/index.tsx
@@ -93,7 +93,7 @@ export default function UpdateWebhook({
setNotif({
message: i18n.str`Could not update webhook`,
type: "ERROR",
- description: resp.detail.hint,
+ description: resp.detail?.hint,
});
}
diff --git a/packages/taler-harness/src/index.ts
b/packages/taler-harness/src/index.ts
index 6b71ce94b..04825e9de 100644
--- a/packages/taler-harness/src/index.ts
+++ b/packages/taler-harness/src/index.ts
@@ -728,7 +728,7 @@ deploymentCli
const bc = await bank.getConfig();
if (bc.type === "fail") {
- logger.error(`couldn't get bank config. ${bc.detail.hint}`);
+ logger.error(`couldn't get bank config. ${bc.detail?.hint}`);
return;
}
if (!bank.isCompatible(bc.body.version)) {
@@ -739,7 +739,7 @@ deploymentCli
}
const mc = await merchantManager.getConfig();
if (mc.type === "fail") {
- logger.error(`couldn't get merchant config. ${mc.detail.hint}`);
+ logger.error(`couldn't get merchant config. ${mc.detail?.hint}`);
return;
}
if (!merchantManager.isCompatible(mc.body.version)) {
diff --git a/packages/taler-util/src/http-client/challenger.ts
b/packages/taler-util/src/http-client/challenger.ts
index 1b0fda300..1c6f54be2 100644
--- a/packages/taler-util/src/http-client/challenger.ts
+++ b/packages/taler-util/src/http-client/challenger.ts
@@ -63,7 +63,7 @@ export enum ChallengerCacheEviction {
export class ChallengerHttpClient {
httpLib: HttpRequestLibrary;
cacheEvictor: CacheEvictor<ChallengerCacheEviction>;
- public readonly PROTOCOL_VERSION = "1:0:0";
+ public readonly PROTOCOL_VERSION = "2:0:0";
constructor(
readonly baseUrl: string,
diff --git a/packages/taler-util/src/http-client/exchange.ts
b/packages/taler-util/src/http-client/exchange.ts
index 532221a05..ec66e5fca 100644
--- a/packages/taler-util/src/http-client/exchange.ts
+++ b/packages/taler-util/src/http-client/exchange.ts
@@ -656,15 +656,17 @@ export class TalerExchangeHttpClient {
switch (resp.status) {
case HttpStatusCode.Ok:
- return opSuccessFromHttp(resp, codecForAccountKycStatus());
+ return opSuccessFromHttp(
+ resp,
+ codecForAccountKycStatus(),
+ );
case HttpStatusCode.Accepted:
- return opKnownAlternativeFailure(
+ return opSuccessFromHttp(
resp,
- resp.status,
codecForAccountKycStatus(),
);
case HttpStatusCode.NoContent:
- return opEmptySuccess(resp);
+ return opFixedSuccess(undefined);
case HttpStatusCode.Forbidden:
return opKnownHttpFailure(resp.status, resp);
case HttpStatusCode.NotFound:
@@ -779,7 +781,24 @@ export class TalerExchangeHttpClient {
*
https://docs.taler.net/core/api-exchange.html#get--kyc-proof-$PROVIDER_NAME?state=$H_PAYTO
*
*/
- async completeExternalKycProcess(provider: string, state: string) {}
+ async completeExternalKycProcess(provider: string, state: string,
code:string) {
+ const url = new URL(`kyc-proof/${provider}?state=${state}&code=${code}`,
this.baseUrl);
+
+ const resp = await this.httpLib.fetch(url.href, {
+ method: "GET",
+ redirect: "manual"
+ });
+
+ switch (resp.status) {
+ case HttpStatusCode.SeeOther:
+ return opEmptySuccess(resp);
+ case HttpStatusCode.NotFound:
+ return opKnownHttpFailure(resp.status, resp);
+ default:
+ return opUnknownFailure(resp, await readTalerErrorResponse(resp));
+ }
+
+ }
//
// AML operations
@@ -1009,7 +1028,7 @@ export class TalerExchangeHttpClient {
}
function buildKYCQuerySignature(key: SigningKey): string {
- const sigBlob = buildSigPS(TalerSignaturePurpose.AML_QUERY).build();
+ const sigBlob = buildSigPS(TalerSignaturePurpose.KYC_AUTH).build();
return encodeCrock(eddsaSign(sigBlob, key));
}
diff --git a/packages/taler-util/src/http-client/officer-account.ts
b/packages/taler-util/src/http-client/officer-account.ts
index 612fd815e..f5f55ea1b 100644
--- a/packages/taler-util/src/http-client/officer-account.ts
+++ b/packages/taler-util/src/http-client/officer-account.ts
@@ -17,11 +17,8 @@
import {
EncryptionNonce,
LockedAccount,
- LockedReserve,
OfficerAccount,
OfficerId,
- ReserveAccount,
- ReserveId,
SigningKey,
createEddsaKeyPair,
decodeCrock,
@@ -31,7 +28,7 @@ import {
encryptWithDerivedKey,
getRandomBytesF,
kdf,
- stringToBytes,
+ stringToBytes
} from "@gnu-taler/taler-util";
/**
@@ -99,36 +96,6 @@ export async function createNewOfficerAccount(
return { id: accountId, signingKey, safe };
}
-/**
- * Restore previous session and unlock account with password
- *
- * @param salt string from which crypto params will be derived
- * @param key secured private key
- * @param password password for the private key
- * @returns
- */
-export async function unlockWalletKycAccount(
- account: LockedReserve,
- password: string,
-): Promise<ReserveAccount> {
- const rawKey = decodeCrock(account);
- const rawPassword = stringToBytes(password);
-
- const signingKey = (await decryptWithDerivedKey(
- rawKey,
- rawPassword,
- password,
- ).catch((e) => {
- throw new UnwrapKeyError(e instanceof Error ? e.message : String(e));
- })) as SigningKey;
-
- const publicKey = eddsaGetPublic(signingKey);
-
- const accountId = encodeCrock(publicKey) as ReserveId;
-
- return { id: accountId, signingKey };
-}
-
/**
* Create new account (secured private key)
* secured with the given password
diff --git a/packages/taler-util/src/http-common.ts
b/packages/taler-util/src/http-common.ts
index 446876b38..e42892f9d 100644
--- a/packages/taler-util/src/http-common.ts
+++ b/packages/taler-util/src/http-common.ts
@@ -502,8 +502,8 @@ export function encodeBody(body: unknown): ArrayBuffer {
return body.buffer;
} else if (body instanceof ArrayBuffer) {
return body;
- } else if (body instanceof URLSearchParams) {
- return body as unknown as ArrayBuffer;
+ } else if (body instanceof URLSearchParams) {
+ return textEncoder.encode(body.toString()).buffer
} else if (typeof body === "object" && body.constructor.name === "FormData")
{
return body as ArrayBuffer;
} else if (typeof body === "object") {
diff --git a/packages/taler-util/src/http-impl.node.ts
b/packages/taler-util/src/http-impl.node.ts
index fc5fe5e98..9cc78f848 100644
--- a/packages/taler-util/src/http-impl.node.ts
+++ b/packages/taler-util/src/http-impl.node.ts
@@ -138,6 +138,10 @@ export class HttpLibImpl implements HttpRequestLibrary {
reqBody = encodeBody(opt.body);
}
+ if (opt?.body instanceof URLSearchParams) {
+ requestHeadersMap["Content-Type"] = "application/x-www-form-urlencoded"
+ }
+
let path = parsedUrl.pathname;
if (parsedUrl.search != null) {
path += parsedUrl.search;
diff --git a/packages/taler-util/src/operation.ts
b/packages/taler-util/src/operation.ts
index 6b5eb61a6..d757fd529 100644
--- a/packages/taler-util/src/operation.ts
+++ b/packages/taler-util/src/operation.ts
@@ -31,14 +31,14 @@ import {
TalerErrorDetail,
} from "./index.js";
-type OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =
- ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> : never;
+// type OperationFailWithBodyOrNever<ErrorEnum, ErrorMap> =
+// ErrorEnum extends keyof ErrorMap ? OperationFailWithBody<ErrorMap> :
never;
export type OperationResult<Body, ErrorEnum, K = never> =
| OperationOk<Body>
| OperationAlternative<ErrorEnum, any>
| OperationFail<ErrorEnum>
- | OperationFailWithBodyOrNever<ErrorEnum, K>;
+// | OperationFailWithBodyOrNever<ErrorEnum, K>;
export function isOperationOk<T, E>(
c: OperationResult<T, E>,
@@ -75,7 +75,7 @@ export interface OperationFail<T> {
*/
case: T;
- detail: TalerErrorDetail;
+ detail?: TalerErrorDetail;
}
/**
@@ -88,12 +88,12 @@ export interface OperationAlternative<T, B> {
body: B;
}
-export interface OperationFailWithBody<B> {
- type: "fail";
+// export interface OperationFailWithBody<B> {
+// type: "fail";
- case: keyof B;
- body: B[OperationFailWithBody<B>["case"]];
-}
+// case: keyof B;
+// body: B[OperationFailWithBody<B>["case"]];
+// }
export async function opSuccessFromHttp<T>(
resp: HttpResponse,
@@ -115,10 +115,15 @@ export function opEmptySuccess(resp: HttpResponse):
OperationOk<void> {
return { type: "ok" as const, body: void 0 };
}
-export async function opKnownFailureWithBody<B>(
- case_: keyof B,
- body: B[typeof case_],
-): Promise<OperationFailWithBody<B>> {
+export async function opKnownFailure<T>(
+ case_: T): Promise<OperationFail<T>> {
+ return { type: "fail", case: case_ };
+}
+
+export async function opKnownFailureWithBody<T,B>(
+ case_: T,
+ body: B,
+): Promise<OperationAlternative<T, B>> {
return { type: "fail", case: case_, body };
}
@@ -182,8 +187,8 @@ export function narrowOpSuccessOrThrow<Body, ErrorEnum>(
}
}
-export async function succeedOrThrow<R, E>(
- promise: Promise<OperationResult<R, E>>,
+export async function succeedOrThrow<R>(
+ promise: Promise<OperationResult<R, unknown>>,
): Promise<R> {
const resp = await promise;
if (isOperationOk(resp)) {
@@ -196,6 +201,30 @@ export async function succeedOrThrow<R, E>(
throw TalerError.fromException(resp);
}
+export async function alternativeOrThrow<Error,Body, Alt>(
+ s: Error,
+ promise: Promise<OperationOk<Body>
+ | OperationAlternative<Error, Alt>
+ | OperationFail<Error>>,
+): Promise<Alt> {
+ const resp = await promise;
+ if (isOperationOk(resp)) {
+ throw TalerError.fromException(
+ new Error(`request succeed but failure "${s}" was expected`),
+ );
+ }
+ if (isOperationFail(resp) && resp.case !== s) {
+ throw TalerError.fromException(
+ new Error(
+ `request failed with "${JSON.stringify(
+ resp,
+ )}" but case "${s}" was expected`,
+ ),
+ );
+ }
+ return (resp as any).body;
+}
+
export async function failOrThrow<E>(
s: E,
promise: Promise<OperationResult<unknown, E>>,
@@ -223,10 +252,10 @@ export type ResultByMethod<
p extends keyof TT,
> = TT[p] extends (...args: any[]) => infer Ret
? Ret extends Promise<infer Result>
- ? Result extends OperationResult<any, any>
- ? Result
- : never
- : never //api always use Promises
+ ? Result extends OperationResult<any, any>
+ ? Result
+ : never
+ : never //api always use Promises
: never; //error cases just for functions
export type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<
diff --git a/packages/taler-util/src/types-taler-common.ts
b/packages/taler-util/src/types-taler-common.ts
index 6fc314f25..1db365ea7 100644
--- a/packages/taler-util/src/types-taler-common.ts
+++ b/packages/taler-util/src/types-taler-common.ts
@@ -40,7 +40,7 @@ import {
codecForString,
codecOptional,
} from "./codec.js";
-import { codecForEither } from "./index.js";
+import { codecForEither, ReservePub } from "./index.js";
import {
TalerProtocolDuration,
TalerProtocolTimestamp,
@@ -540,21 +540,8 @@ export interface OfficerAccount {
signingKey: SigningKey;
}
-
-declare const opaque_ReserveAccount: unique symbol;
-/**
- * Sealed private key for AML officer
- */
-export type LockedReserve = string & { [opaque_ReserveAccount]: true };
-
-declare const opaque_ReserveId: unique symbol;
-/**
- * Public key for AML officer
- */
-export type ReserveId = string & { [opaque_ReserveId]: true };
-
export interface ReserveAccount {
- id: ReserveId;
+ id: ReservePub;
signingKey: SigningKey;
}
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts
b/packages/taler-wallet-core/src/pay-merchant.ts
index e0b1fad98..5be153367 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -891,8 +891,7 @@ async function processDownloadProposal(
if (proposal.purchaseStatus != PurchaseStatus.PendingDownloadingProposal) {
logger.error(
- `unexpected state ${proposal.purchaseStatus}/${
- PurchaseStatus[proposal.purchaseStatus]
+ `unexpected state
${proposal.purchaseStatus}/${PurchaseStatus[proposal.purchaseStatus]
} for ${ctx.transactionId} in processDownloadProposal`,
);
return TaskRunResult.finished();
@@ -1152,8 +1151,7 @@ async function createOrReusePurchase(
oldProposal.claimToken === claimToken
) {
logger.info(
- `Found old proposal (status=${
- PurchaseStatus[oldProposal.purchaseStatus]
+ `Found old proposal (status=${PurchaseStatus[oldProposal.purchaseStatus]
}) for order ${orderId} at ${merchantBaseUrl}`,
);
if (oldProposal.purchaseStatus === PurchaseStatus.DialogShared) {
@@ -1896,7 +1894,11 @@ export async function checkPayForTemplate(
const cfg = await merchantApi.getConfig();
if (cfg.type === "fail") {
- throw TalerError.fromUncheckedDetail(cfg.detail);
+ if (cfg.detail) {
+ throw TalerError.fromUncheckedDetail(cfg.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get merchant remote
config"))
+ }
}
// FIXME: Put body.currencies *and* body.currency in the set of
diff --git a/packages/taler-wallet-core/src/withdraw.ts
b/packages/taler-wallet-core/src/withdraw.ts
index b764087c2..b0c27bd8a 100644
--- a/packages/taler-wallet-core/src/withdraw.ts
+++ b/packages/taler-wallet-core/src/withdraw.ts
@@ -1149,7 +1149,11 @@ export async function getBankWithdrawalInfo(
);
if (resp.type === "fail") {
- throw TalerError.fromUncheckedDetail(resp.detail);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get bank remote
config"))
+ }
}
const { body: status } = resp;
diff --git a/packages/taler-wallet-webextension/src/wallet/AddExchange/index.ts
b/packages/taler-wallet-webextension/src/wallet/AddExchange/index.ts
index 94b32c157..43898ecc1 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddExchange/index.ts
+++ b/packages/taler-wallet-webextension/src/wallet/AddExchange/index.ts
@@ -14,7 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { OperationFailWithBody, OperationOk, TalerExchangeApi } from
"@gnu-taler/taler-util";
+import { OperationAlternative, OperationFail, OperationOk, TalerExchangeApi }
from "@gnu-taler/taler-util";
import { ErrorAlertView } from "../../components/CurrentAlerts.js";
import { Loading } from "../../components/Loading.js";
import { ErrorAlert } from "../../context/alert.js";
@@ -34,13 +34,6 @@ export type State = State.Loading
| State.Confirm
| State.Verify;
-export type CheckExchangeErrors = {
- "invalid-version": string;
- "invalid-currency": string;
- "not-found": void;
- "already-active": void;
- "invalid-protocol": void;
-}
export namespace State {
export interface Loading {
@@ -73,11 +66,16 @@ export namespace State {
url: TextFieldHandler,
loading: boolean;
knownExchanges: URL[],
- result: OperationOk<TalerExchangeApi.ExchangeKeysResponse> |
OperationFailWithBody<CheckExchangeErrors> | undefined,
+ result: OperationOk<TalerExchangeApi.ExchangeKeysResponse>
+ | OperationAlternative<"invalid-version", string>
+ | OperationAlternative<"invalid-currency", string>
+ | OperationFail<"not-found">
+ | OperationFail<"already-active">
+ | OperationFail<"invalid-protocol">
+ | undefined,
expectedCurrency: string | undefined,
}
}
-
const viewMapping: StateViewMap<State> = {
loading: Loading,
error: ErrorAlertView,
diff --git a/packages/taler-wallet-webextension/src/wallet/AddExchange/state.ts
b/packages/taler-wallet-webextension/src/wallet/AddExchange/state.ts
index 94a0d3fec..c0756d1e2 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddExchange/state.ts
+++ b/packages/taler-wallet-webextension/src/wallet/AddExchange/state.ts
@@ -14,7 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { ExchangeEntryStatus, TalerExchangeHttpClient, canonicalizeBaseUrl,
opKnownFailureWithBody } from "@gnu-taler/taler-util";
+import { ExchangeEntryStatus, TalerExchangeHttpClient, canonicalizeBaseUrl,
opKnownFailure, opKnownFailureWithBody } from "@gnu-taler/taler-util";
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
import { BrowserFetchHttpLib } from "@gnu-taler/web-util/browser";
import { useCallback, useEffect, useState } from "preact/hooks";
@@ -22,7 +22,7 @@ import { useBackendContext } from "../../context/backend.js";
import { useAsyncAsHook } from "../../hooks/useAsyncAsHook.js";
import { withSafe } from "../../mui/handlers.js";
import { RecursiveState } from "../../utils/index.js";
-import { CheckExchangeErrors, Props, State } from "./index.js";
+import { Props, State } from "./index.js";
function urlFromInput(str: string): URL {
let result: URL;
@@ -59,11 +59,11 @@ export function useComponentState({ onBack, currency,
noDebounce }: Props): Recu
const checkExchangeBaseUrl_memo = useCallback(async function
checkExchangeBaseUrl(str: string) {
const baseUrl = urlFromInput(str)
if (baseUrl.protocol !== "http:" && baseUrl.protocol !== "https:") {
- return
opKnownFailureWithBody<CheckExchangeErrors>("invalid-protocol", undefined)
+ return opKnownFailure("invalid-protocol"as const)
}
const found = used.findIndex((e) => e.exchangeBaseUrl ===
baseUrl.href);
if (found !== -1) {
- return opKnownFailureWithBody<CheckExchangeErrors>("already-active",
undefined);
+ return opKnownFailure("already-active"as const);
}
/**
@@ -84,13 +84,13 @@ export function useComponentState({ onBack, currency,
noDebounce }: Props): Recu
const api = new TalerExchangeHttpClient(baseUrl.href, new
BrowserFetchHttpLib() as any);
const config = await api.getConfig()
if (config.type === "fail") {
- return opKnownFailureWithBody<CheckExchangeErrors>("not-found",
undefined)
+ return opKnownFailure("not-found" as const)
}
if (!api.isCompatible(config.body.version)) {
- return
opKnownFailureWithBody<CheckExchangeErrors>("invalid-version",
config.body.version)
+ return opKnownFailureWithBody("invalid-version"as const,
config.body.version)
}
if (currency !== undefined && currency !== config.body.currency) {
- return
opKnownFailureWithBody<CheckExchangeErrors>("invalid-currency",
config.body.currency)
+ return opKnownFailureWithBody("invalid-currency"as const,
config.body.currency)
}
const keys = await api.getKeys()
return keys
diff --git
a/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
b/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
index f6537bc68..882d95670 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/AddExchange/views.tsx
@@ -120,8 +120,9 @@ export function VerifyView({
</WarningBox>
);
}
+
default: {
- assertUnreachable(result.case);
+ assertUnreachable(result);
}
}
})()}
diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx
b/packages/taler-wallet-webextension/src/wallet/History.tsx
index aa0180a0e..d67293920 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.tsx
@@ -71,8 +71,6 @@ export function HistoryPage({
const state = useAsyncAsHook(async () => {
const b = await api.wallet.call(WalletApiOperation.GetBalances, {});
const balances = b.balances;
- // const balance =
- // b.balances.length > 0 ? b.balances[balanceIndex] : undefined;
const tx = await api.wallet.call(WalletApiOperation.GetTransactions, {
scopeInfo: showSearch ? undefined : selectedScope,
sort: "descending",
diff --git a/packages/web-util/src/context/bank-api.ts
b/packages/web-util/src/context/bank-api.ts
index 978eba171..e610b49e0 100644
--- a/packages/web-util/src/context/bank-api.ts
+++ b/packages/web-util/src/context/bank-api.ts
@@ -192,7 +192,11 @@ function buildBankApiClient(
async function getRemoteConfig(): Promise<TalerCorebankConfigResponse> {
const resp = await bank.getConfig();
if (resp.type === "fail") {
- throw TalerError.fromUncheckedDetail(resp.detail);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get bank remote
config"))
+ }
}
return resp.body;
}
diff --git a/packages/web-util/src/context/challenger-api.ts
b/packages/web-util/src/context/challenger-api.ts
index 8748f5f69..e2a6e05c3 100644
--- a/packages/web-util/src/context/challenger-api.ts
+++ b/packages/web-util/src/context/challenger-api.ts
@@ -183,7 +183,11 @@ function buildChallengerApiClient(
async function getRemoteConfig():
Promise<ChallengerApi.ChallengerTermsOfServiceResponse> {
const resp = await challenger.getConfig();
if (resp.type === "fail") {
- throw TalerError.fromUncheckedDetail(resp.detail);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get challenger
remote config"))
+ }
}
return resp.body;
}
diff --git a/packages/web-util/src/context/exchange-api.ts
b/packages/web-util/src/context/exchange-api.ts
index 39f889ba9..967b042f9 100644
--- a/packages/web-util/src/context/exchange-api.ts
+++ b/packages/web-util/src/context/exchange-api.ts
@@ -187,7 +187,11 @@ function buildExchangeApiClient(
async function getRemoteConfig():
Promise<TalerExchangeApi.ExchangeVersionResponse> {
const resp = await ex.getConfig();
if (resp.type === "fail") {
- throw TalerError.fromUncheckedDetail(resp.detail);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get exchange
remote config"))
+ }
}
return resp.body;
}
diff --git a/packages/web-util/src/context/merchant-api.ts
b/packages/web-util/src/context/merchant-api.ts
index 09d1d6adc..8d929ae12 100644
--- a/packages/web-util/src/context/merchant-api.ts
+++ b/packages/web-util/src/context/merchant-api.ts
@@ -198,7 +198,11 @@ function buildMerchantApiClient(
async function getRemoteConfig():
Promise<TalerMerchantApi.TalerMerchantConfigResponse> {
const resp = await instance.getConfig();
if (resp.type === "fail") {
- throw TalerError.fromUncheckedDetail(resp.detail);
+ if (resp.detail) {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ } else {
+ throw TalerError.fromException(new Error("failed to get merchant
remote config"))
+ }
}
return resp.body;
}
diff --git a/packages/web-util/src/hooks/useNotifications.ts
b/packages/web-util/src/hooks/useNotifications.ts
index 103b88c86..929c54a58 100644
--- a/packages/web-util/src/hooks/useNotifications.ts
+++ b/packages/web-util/src/hooks/useNotifications.ts
@@ -155,7 +155,7 @@ function errorMap<T extends OperationFail<unknown>>(
notify({
type: "error",
title: map(resp.case),
- description: resp.detail.hint as TranslatedString,
+ description: (resp.detail?.hint as TranslatedString) ?? "",
debug: resp.detail,
when: AbsoluteTime.now(),
});
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: when error happen there is no garantee that taler error details is present, so undefined should be set,
gnunet <=