taler-typescript-core

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

commit 5d698c7bb4f38131c76f751f643093bbc4de75d6
parent af22332b5edbc1de3b4bd123c67c16adbd37217b
Author: Florian Dold <florian@dold.me>
Date:   Thu,  4 Dec 2025 16:53:39 +0100

wallet-core: scaffolding for DD75/BBAN support

Diffstat:
Mpackages/taler-util/src/types-taler-wallet.ts | 29+++++++++++++++++++++++++++++
Mpackages/taler-wallet-core/src/wallet-api-types.ts | 51+++++++++++++++++++++++++++++++++------------------
Mpackages/taler-wallet-core/src/wallet.ts | 32++++++++++++++++++++++++++++++--
3 files changed, 92 insertions(+), 20 deletions(-)

diff --git a/packages/taler-util/src/types-taler-wallet.ts b/packages/taler-util/src/types-taler-wallet.ts @@ -4416,6 +4416,35 @@ export const codecForGetBankingChoicesForPaytoRequest = () => .property("paytoUri", codecForString()) .build("GetBankingChoicesForPaytoRequest"); +export interface ConvertIbanAccountFieldToPaytoRequest { + value: string; + currency: string; +} + +export const codecForConvertIbanAccountFieldToPaytoRequest = () => + buildCodecForObject<ConvertIbanAccountFieldToPaytoRequest>() + .property("value", codecForString()) + .property("currency", codecForString()) + .build("ConvertIbanAccountFieldToPaytoRequest"); + +export interface ConvertIbanPaytoToAccountFieldRequest { + paytoUri: string; +} + +export const codecForConvertIbanPaytoToAccountFieldRequest = () => + buildCodecForObject<ConvertIbanPaytoToAccountFieldRequest>() + .property("paytoUri", codecForString()) + .build("ConvertIbanPaytoToAccountFieldRequest"); + +export interface ConvertIbanPaytoToAccountFieldResponse { + type: "iban" | "bban"; + value: string; +} + +export type ConvertIbanAccountFieldToPaytoResponse = + | { ok: true; type: "iban" | "bban"; paytoUri: string } + | { ok: false }; + export interface BankingChoiceSpec { label: string; // FIXME: In the future, we might also have some way to return intents here? diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts @@ -34,10 +34,12 @@ import { AcceptWithdrawalResponse, AddBankAccountRequest, AddBankAccountResponse, + AddContactRequest, AddExchangeRequest, AddExchangeResponse, AddGlobalCurrencyAuditorRequest, AddGlobalCurrencyExchangeRequest, + AddMailboxMessageRequest, AmountResponse, ApplyDevExperimentRequest, BackupRecovery, @@ -61,13 +63,21 @@ import { ConfirmPeerPullDebitRequest, ConfirmPeerPushCreditRequest, ConfirmWithdrawalRequest, + ContactListResponse, ConvertAmountRequest, + ConvertIbanAccountFieldToPaytoRequest, + ConvertIbanAccountFieldToPaytoResponse, + ConvertIbanPaytoToAccountFieldRequest, + ConvertIbanPaytoToAccountFieldResponse, CreateDepositGroupRequest, CreateDepositGroupResponse, CreateStoredBackupResponse, + DeleteContactRequest, DeleteDiscountRequest, DeleteExchangeRequest, + DeleteMailboxMessageRequest, DeleteStoredBackupRequest, + DeleteSubscriptionRequest, DeleteTransactionRequest, EmptyObject, ExchangeDetailedResponse, @@ -94,10 +104,6 @@ import { GetDonauResponse, GetDonauStatementsRequest, GetDonauStatementsResponse, - ContactListResponse, - AddMailboxMessageRequest, - DeleteMailboxMessageRequest, - MailboxMessagesResponse, GetExchangeDetailedInfoRequest, GetExchangeEntryByUrlRequest, GetExchangeEntryByUrlResponse, @@ -134,6 +140,11 @@ import { ListExchangesRequest, ListGlobalCurrencyAuditorsResponse, ListGlobalCurrencyExchangesResponse, + ListSubscriptionsRequest, + ListSubscriptionsResponse, + MailboxConfiguration, + MailboxMessageRecord, + MailboxMessagesResponse, PrepareBankIntegratedWithdrawalRequest, PrepareBankIntegratedWithdrawalResponse, PreparePayRequest, @@ -152,6 +163,7 @@ import { RemoveGlobalCurrencyExchangeRequest, RetryTransactionRequest, RunFixupRequest, + SendTalerUriMailboxMessageRequest, SetCoinSuspendedRequest, SetDonauRequest, SetWalletDeviceIdRequest, @@ -187,15 +199,6 @@ import { WithdrawTestBalanceRequest, WithdrawUriInfoResponse, WithdrawalDetailsForAmount, - AddContactRequest, - DeleteContactRequest, - EddsaPrivateKey, - MailboxConfiguration, - SendTalerUriMailboxMessageRequest, - MailboxMessageRecord, - ListSubscriptionsRequest, - ListSubscriptionsResponse, - DeleteSubscriptionRequest, } from "@gnu-taler/taler-util"; import { AddBackupProviderRequest, @@ -314,6 +317,8 @@ export enum WalletApiOperation { GetQrCodesForPayto = "getQrCodesForPayto", StartExchangeWalletKyc = "startExchangeWalletKyc", GetBankingChoicesForPayto = "getBankingChoicesForPayto", + ConvertIbanAccountFieldToPayto = "convertIbanAccountFieldToPayto", + ConvertIbanPaytoToAccountField = "convertIbanPaytoToAccountField", // Tokens and token families ListDiscounts = "listDiscounts", @@ -500,7 +505,6 @@ export type RefreshMailboxOp = { response: MailboxMessageRecord[]; }; - /** * Initialize messages mailbox Op. */ @@ -519,7 +523,6 @@ export type GetMailboxOp = { response: MailboxConfiguration | undefined; }; - /** * Get Messages Op. */ @@ -556,8 +559,6 @@ export type SendTalerUriMailboxMessageOp = { response: EmptyObject; }; - - // group: Basic Wallet Information /** @@ -1323,7 +1324,7 @@ export type ConfirmPeerPullDebitOp = { response: AcceptPeerPullPaymentResponse; }; -// group: Data Validation +// group: Data Validation and Conversion export type ValidateIbanOp = { op: WalletApiOperation.ValidateIban; @@ -1343,6 +1344,18 @@ export type GetQrCodesForPaytoOp = { response: GetQrCodesForPaytoResponse; }; +export type ConvertIbanAccountFieldToPaytoOp = { + op: WalletApiOperation.ConvertIbanAccountFieldToPayto; + request: ConvertIbanAccountFieldToPaytoRequest; + response: ConvertIbanAccountFieldToPaytoResponse; +}; + +export type ConvertIbanPaytoToAccountFieldOp = { + op: WalletApiOperation.ConvertIbanPaytoToAccountField; + request: ConvertIbanPaytoToAccountFieldRequest; + response: ConvertIbanPaytoToAccountFieldResponse; +}; + export type GetBankingChoicesForPaytoOp = { op: WalletApiOperation.GetBankingChoicesForPayto; request: GetBankingChoicesForPaytoRequest; @@ -1761,6 +1774,8 @@ export type WalletOperations = { [WalletApiOperation.InitializeMailbox]: InitializeMailboxOp; [WalletApiOperation.RefreshMailbox]: RefreshMailboxOp; [WalletApiOperation.SendTalerUriMailboxMessage]: SendTalerUriMailboxMessageOp; + [WalletApiOperation.ConvertIbanAccountFieldToPayto]: ConvertIbanAccountFieldToPaytoOp; + [WalletApiOperation.ConvertIbanPaytoToAccountField]: ConvertIbanPaytoToAccountFieldOp; }; export type WalletCoreRequestType< diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -56,6 +56,10 @@ import { CompleteBaseUrlResult, ConfirmPayRequest, ConfirmPayResult, + ConvertIbanAccountFieldToPaytoRequest, + ConvertIbanAccountFieldToPaytoResponse, + ConvertIbanPaytoToAccountFieldRequest, + ConvertIbanPaytoToAccountFieldResponse, CoreApiResponse, CreateStoredBackupResponse, DeleteDiscountRequest, @@ -171,6 +175,8 @@ import { codecForConfirmPeerPushPaymentRequest, codecForConfirmWithdrawalRequestRequest, codecForConvertAmountRequest, + codecForConvertIbanAccountFieldToPaytoRequest, + codecForConvertIbanPaytoToAccountFieldRequest, codecForCreateDepositGroupRequest, codecForDeleteContactRequest, codecForDeleteDiscountRequest, @@ -262,7 +268,7 @@ import { setDangerousTimetravel, setGlobalLogLevelFromString, stringifyScopeInfo, - validateIban, + validateIban } from "@gnu-taler/taler-util"; import { readSuccessResponseJsonOrThrow, @@ -442,7 +448,7 @@ import { WalletApiOperation, WalletCoreApiClient, WalletCoreRequestType, - WalletCoreResponseType, + WalletCoreResponseType } from "./wallet-api-types.js"; import { acceptBankIntegratedWithdrawal, @@ -1930,6 +1936,20 @@ async function handleGetVersion( return result; } +export async function handleConvertIbanAccountFieldToPayto( + wex: WalletExecutionContext, + req: ConvertIbanAccountFieldToPaytoRequest, +): Promise<ConvertIbanAccountFieldToPaytoResponse> { + throw Error("not implemented"); +} + +export async function handleConvertIbanPaytoToAccountField( + wex: WalletExecutionContext, + req: ConvertIbanPaytoToAccountFieldRequest, +): Promise<ConvertIbanPaytoToAccountFieldResponse> { + throw Error("not implemented"); +} + interface HandlerWithValidator<Tag extends WalletApiOperation> { codec: Codec<WalletCoreRequestType<Tag>>; handler: ( @@ -1939,6 +1959,14 @@ interface HandlerWithValidator<Tag extends WalletApiOperation> { } const handlers: { [T in WalletApiOperation]: HandlerWithValidator<T> } = { + [WalletApiOperation.ConvertIbanAccountFieldToPayto]: { + codec: codecForConvertIbanAccountFieldToPaytoRequest(), + handler: handleConvertIbanAccountFieldToPayto + }, + [WalletApiOperation.ConvertIbanPaytoToAccountField]: { + codec: codecForConvertIbanPaytoToAccountFieldRequest(), + handler: handleConvertIbanPaytoToAccountField, + }, [WalletApiOperation.TestingWaitExchangeState]: { codec: codecForAny(), handler: handleTestingWaitExchangeState,