commit a72a556539edb00e773e559d6283c5fc719375e2
parent d4ded9f3ca6ec266d1a5a4f13043112c3946b4b0
Author: Sebastian <sebasjm@gmail.com>
Date: Wed, 4 Jun 2025 15:21:39 -0300
fix #10065
Diffstat:
3 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/packages/aml-backoffice-ui/src/pages/decision/Rules.tsx b/packages/aml-backoffice-ui/src/pages/decision/Rules.tsx
@@ -126,6 +126,7 @@ export function Rules({
}): VNode {
const { i18n } = useTranslationContext();
const { config } = useExchangeApiContext();
+ const [request] = useCurrentDecisionRequest()
let newPaytoParsed: PaytoUri | undefined;
const isNewAccountAWallet =
@@ -137,20 +138,30 @@ export function Rules({
(newPaytoParsed.targetType === "taler-reserve" ||
newPaytoParsed.targetType === "taler-reserve-http");
+ // info may be undefined if this is a new account
+ // for which we use the payto:// parameter
+ const isWallet = request.original?.is_wallet ?? isNewAccountAWallet;
+
const measures = useServerMeasures();
const rootMeasures =
!measures || measures instanceof TalerError || measures.type === "fail"
? undefined
: measures.body.roots;
- const [request] = useCurrentDecisionRequest()
- // info may be undefined if this is a new account
- // for which we use the payto:// parameter
- const isWallet = request.original?.is_wallet ?? isNewAccountAWallet;
+ const defaultRules =
+ (!measures || measures instanceof TalerError || measures.type === "fail"
+ ? []
+ : measures.body.default_rules).filter((r) => {
+ return isWallet
+ ? WALLET_RULES.includes(r.operation_type)
+ : BANK_RULES.includes(r.operation_type);
+ });
+
return (
<div>
<UpdateRulesForm
rootMeasures={rootMeasures}
+ defaultRules={defaultRules}
config={config.config}
isWallet={isWallet ?? false}
limits={request.original?.limits ?? DEFAULT_LIMITS_WHEN_NEW_ACCOUNT}
@@ -240,12 +251,14 @@ function UpdateRulesForm({
config,
limits,
rootMeasures,
+ defaultRules,
isWallet,
}: {
config: ExchangeVersionResponse;
limits: LegitimizationRuleSet;
isWallet: boolean | undefined;
rootMeasures: AvailableMeasureSummary["roots"] | undefined;
+ defaultRules: KycRule[]
}): VNode {
const { i18n } = useTranslationContext();
const [request, updateRequest] =
@@ -402,7 +415,15 @@ function UpdateRulesForm({
}}
class="m-4 rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700 disabled:bg-gray-600"
>
- <i18n.Translate>Reset rules</i18n.Translate>
+ <i18n.Translate>Reset rules to current state</i18n.Translate>
+ </button>
+ <button
+ onClick={() => {
+ setRules(defaultRules);
+ }}
+ class="m-4 rounded-md w-fit border-0 px-3 py-2 text-center text-sm bg-indigo-700 text-white shadow-sm hover:bg-indigo-700 disabled:bg-gray-600"
+ >
+ <i18n.Translate>Set rules to default</i18n.Translate>
</button>
<button
onClick={() => {
diff --git a/packages/taler-util/src/http-client/exchange.ts b/packages/taler-util/src/http-client/exchange.ts
@@ -122,7 +122,7 @@ export type KycProcessClientInformationWithEtag =
* However, we should merge it with the other exchange client implementation.
*/
export class TalerExchangeHttpClient {
- public static readonly PROTOCOL_VERSION = "27:0:2";
+ public static readonly PROTOCOL_VERSION = "28:0:2";
private httpLib: HttpRequestLibrary;
private cacheEvictor: CacheEvictor<TalerExchangeCacheEviction>;
private preventCompression: boolean;
diff --git a/packages/taler-util/src/types-taler-exchange.ts b/packages/taler-util/src/types-taler-exchange.ts
@@ -1671,6 +1671,16 @@ export interface AvailableMeasureSummary {
// Available KYC checks.
checks: { [check_name: string]: KycCheckInformation };
+
+ // Default KYC rules. This is the set of KYC rules that
+ // applies by default to new "accounts". Note that some
+ // rules only apply to wallets, while others only apply to
+ // bank accounts. The returned array is the union of all
+ // possible rules, applications should consider the
+ // operation_type to filter for rules that actually
+ // apply to a specific situation.
+ // @since protocol **v28**.
+ default_rules: KycRule[];
}
export interface MeasureInformation {
@@ -2598,6 +2608,7 @@ export const codecForAvailableMeasureSummary =
.property("checks", codecForMap(codecForKycCheckInformation()))
.property("programs", codecForMap(codecForAmlProgramRequirement()))
.property("roots", codecForMap(codecForMeasureInformation()))
+ .property("default_rules", codecForList(codecForKycRules()))
.build("TalerExchangeApi.AvailableMeasureSummary");
export const codecForAmlProgramRequirement = (): Codec<AmlProgramRequirement> =>