taler-typescript-core

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

commit a72a556539edb00e773e559d6283c5fc719375e2
parent d4ded9f3ca6ec266d1a5a4f13043112c3946b4b0
Author: Sebastian <sebasjm@gmail.com>
Date:   Wed,  4 Jun 2025 15:21:39 -0300

fix #10065

Diffstat:
Mpackages/aml-backoffice-ui/src/pages/decision/Rules.tsx | 31++++++++++++++++++++++++++-----
Mpackages/taler-util/src/http-client/exchange.ts | 2+-
Mpackages/taler-util/src/types-taler-exchange.ts | 11+++++++++++
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> =>