commit 2935e650d6b6ff5b2b0a025ef463c5b21dd5f478
parent 616f7b3beadd0a103b8cfc0b2bc755810ebea117
Author: Sebastian <sebasjm@taler-systems.com>
Date: Tue, 13 Jan 2026 09:28:06 -0300
fix #10848
Diffstat:
7 files changed, 116 insertions(+), 5 deletions(-)
diff --git a/packages/aml-backoffice-ui/src/pages/Search.tsx b/packages/aml-backoffice-ui/src/pages/Search.tsx
@@ -30,7 +30,7 @@ import {
PaytoType,
ReservePubParseError,
TalerError,
- TranslatedString
+ TranslatedString,
} from "@gnu-taler/taler-util";
import {
Attention,
@@ -624,6 +624,10 @@ function translatePaytoError(
return i18n.str`Exchange host and account is missing`;
case PaytoType.Ethereum:
return i18n.str`Ethereum address is missing`;
+ case PaytoType.Cyclos:
+ return i18n.str`Cyclos address is missing`;
+ default:
+ assertUnreachable(result.body);
}
}
case PaytoParseError.INVALID_TARGET_PATH: {
@@ -693,6 +697,16 @@ function translatePaytoError(
assertUnreachable(result.body);
}
}
+ case PaytoType.Cyclos: {
+ switch (result.body.pos) {
+ case 0:
+ return i18n.str`Invalid host`;
+ default:
+ assertUnreachable(result.body);
+ }
+ }
+ default:
+ assertUnreachable(result.body);
}
}
}
diff --git a/packages/bank-ui/src/pages/OperationState/views.tsx b/packages/bank-ui/src/pages/OperationState/views.tsx
@@ -301,6 +301,46 @@ export function NeedConfirmationView({
</Fragment>
);
}
+ case PaytoType.Cyclos: {
+ const name = details.account.params["receiver-name"];
+ return (
+ <Fragment>
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's account cyclos
+ hostname
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {details.account.url}
+ </dd>
+ </div>
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's account id
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {details.account.account}
+ </dd>
+ </div>
+ {name && (
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's name
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {name}
+ </dd>
+ </div>
+ )}
+ </Fragment>
+ );
+ }
default: {
assertUnreachable(details.account);
}
diff --git a/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/bank-ui/src/pages/PaytoWireTransferForm.tsx
@@ -276,6 +276,10 @@ export function PaytoWireTransferForm({
setAccount(parsed.body.account);
break;
}
+ case PaytoType.Cyclos: {
+ setAccount(parsed.body.account);
+ break;
+ }
default: {
assertUnreachable(parsed.body);
}
diff --git a/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -332,6 +332,47 @@ export function WithdrawalConfirmationQuestion({
</Fragment>
);
}
+ case PaytoType.Cyclos: {
+ const name =
+ details.account.params["receiver-name"];
+ return (
+ <Fragment>
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's account
+ cyclos hostname
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {details.account.url}
+ </dd>
+ </div>
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's account id
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {details.account.account}
+ </dd>
+ </div>
+ {name && (
+ <div class="px-4 py-2 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-0">
+ <dt class="text-sm font-medium leading-6 text-gray-900">
+ <i18n.Translate>
+ Payment Service Provider's name
+ </i18n.Translate>
+ </dt>
+ <dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
+ {name}
+ </dd>
+ </div>
+ )}
+ </Fragment>
+ );
+ }
default: {
assertUnreachable(details.account);
}
@@ -416,15 +457,16 @@ export function ShouldBeSameUser({
if (credentials.status === "loggedOut") {
return (
<Fragment>
- <Attention type="info" title={i18n.str`Authentication required`} ></Attention>
+ <Attention
+ type="info"
+ title={i18n.str`Authentication required`}
+ ></Attention>
<LoginForm currentUser={username} fixedUser />
</Fragment>
);
}
if (credentials.status === "expired") {
- return (
- <LoginForm currentUser={username} fixedUser />
- );
+ return <LoginForm currentUser={username} fixedUser />;
}
if (credentials.username !== username) {
return (
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/list/Table.tsx
@@ -183,6 +183,7 @@ function Table({ accounts, onDelete, onSelect }: TableProps): VNode {
"taler-reserve-http": [],
unknown: [],
ethereum: [],
+ cyclos: [],
};
const accountsByType = accounts.reduce((prev, acc) => {
diff --git a/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx b/packages/taler-wallet-webextension/src/components/BankDetailsByPaytoType.tsx
@@ -19,6 +19,7 @@ import {
Amounts,
AmountString,
parsePaytoUri,
+ PaytoUriCyclos,
PaytoUriIBAN,
PaytoUriTaler,
PaytoUriTalerBank,
@@ -196,6 +197,7 @@ function IBANAccountInfoTable({
| PaytoUriUnknown
| PaytoUriIBAN
| PaytoUriTalerBank
+ | PaytoUriCyclos
| PaytoUriTalerHttp
| PaytoUriTaler;
}) {
@@ -229,6 +231,11 @@ function IBANAccountInfoTable({
<Row name={i18n.str`Bank host`} value={payto.host} />
<Row name={i18n.str`Bank account`} value={payto.account} />
</Fragment>
+ ) : payto.targetType === "cyclos" ? (
+ <Fragment>
+ <Row name={i18n.str`Cyclos host`} value={payto.host} />
+ <Row name={i18n.str`Account id`} value={payto.account} />
+ </Fragment>
) : payto.targetType === "iban" ? (
<Fragment>
{payto.bic !== undefined ? (
diff --git a/packages/taler-wallet-webextension/src/wallet/DestinationSelection/views.tsx b/packages/taler-wallet-webextension/src/wallet/DestinationSelection/views.tsx
@@ -415,6 +415,9 @@ function describeAccount(paytoUri: string): string {
case "x-taler-bank": {
return `${p.account}@${p.host}`;
}
+ case "cyclos": {
+ return `${p.account}@${p.host}`;
+ }
case "bitcoin": {
return `${p.address}`;
}