commit f0ce241e8f3db8af5067bdda5b5532d1bbdbd5c3
parent e0639bf7621f4f65e5b773ec15b651ba2eeb436f
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Mon, 19 Oct 2026 08:21:23 +0200
add get supported taldir aliases
Diffstat:
5 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/packages/taler-util/src/types-taler-directory.ts b/packages/taler-util/src/types-taler-directory.ts
@@ -37,7 +37,7 @@ export const codecForTalerDirectoryConfigResponse =
.property("alias_types", codecForList(codecForTaldirAliasType()))
.build("TalerDirectoryApi.VersionResponse");
-interface TaldirAliasType {
+export interface TaldirAliasType {
// Name of the alias type, e.g. "email" or "sms".
name: string;
diff --git a/packages/taler-util/src/types-taler-wallet.ts b/packages/taler-util/src/types-taler-wallet.ts
@@ -111,6 +111,10 @@ import {
TransactionState,
TransactionStateWildcard,
} from "./types-taler-wallet-transactions.js";
+import {
+ TaldirAliasType,
+} from "./types-taler-directory.js";
+
/**
* Identifier for a transaction in the wallet.
@@ -1688,6 +1692,19 @@ export interface TaldirLookupResponse {
targetUri?: string;
}
+export interface TaldirSupportedAliasesResponse {
+ supportedAliases: TaldirAliasType[];
+}
+
+export interface TaldirGetSupportedAliasesRequest {
+ taldirBaseUrl: string;
+}
+
+export const codecForTaldirGetSupportedAliasesRequest = (): Codec<TaldirGetSupportedAliasesRequest> =>
+ buildCodecForObject<TaldirGetSupportedAliasesRequest>()
+ .property("taldirBaseUrl", codecForString())
+ .build("TaldirGetSupportedAliasesRequest");
+
export interface GetMailboxResponse {
mailboxConfiguration?: MailboxConfiguration;
}
diff --git a/packages/taler-wallet-core/src/requests.ts b/packages/taler-wallet-core/src/requests.ts
@@ -255,6 +255,8 @@ import {
codecForStartExchangeWalletKycRequest,
codecForStartRefundQueryRequest,
codecForSuspendTransaction,
+ codecForTaldirGetSupportedAliasesRequest,
+ codecForTaldirAliasType,
codecForTaldirLookupRequest,
codecForTaldirRegistrationCompletionRequest,
codecForTaldirRegistrationRequest,
@@ -397,6 +399,7 @@ import {
completeAliasRegistration,
lookupAlias,
registerAlias,
+ getSupportedAliases,
} from "./taldir.js";
import {
WithdrawTestBalanceResult,
@@ -2582,6 +2585,10 @@ const handlers: { [T in WalletApiOperation]: HandlerWithValidator<T> } = {
codec: codecForTaldirLookupRequest(),
handler: lookupAlias,
},
+ [WalletApiOperation.GetSupportedAliases]: {
+ codec: codecForTaldirGetSupportedAliasesRequest(),
+ handler: getSupportedAliases,
+ },
[WalletApiOperation.InitializeMailbox]: {
codec: codecForMailboxBaseUrl(),
handler: createNewMailbox,
diff --git a/packages/taler-wallet-core/src/taldir.ts b/packages/taler-wallet-core/src/taldir.ts
@@ -27,6 +27,8 @@ import {
TaldirLookupResponse,
sha512,
HttpStatusCode,
+ TaldirGetSupportedAliasesRequest,
+ TaldirSupportedAliasesResponse,
TaldirRegistrationRequest,
TaldirRegistrationResponse,
TaldirRegistrationCompletionRequest,
@@ -52,6 +54,34 @@ function createHAliasBuffer(aliasType: string, alias: string): Uint8Array {
}
/**
+ * Get supported alias types
+ */
+export async function getSupportedAliases(
+ wex: WalletExecutionContext,
+ lookupRequest: TaldirGetSupportedAliasesRequest,
+): Promise<TaldirSupportedAliasesResponse> {
+ const taldirClient = new TalerDirectoryInstanceHttpClient(
+ lookupRequest.taldirBaseUrl,
+ wex.http,
+ );
+ // Refresh message size
+ const resConf = await taldirClient.getConfig();
+ switch (resConf.case) {
+ case "ok": {
+ return {
+ supportedAliases: resConf.body.alias_types,
+ }
+ }
+ default:
+ throw TalerError.fromDetail(
+ TalerErrorCode.WALLET_ALIAS_REGISTRATION_FAILED,
+ { directoryBaseUrl: lookupRequest.taldirBaseUrl },
+ "could not read the configuration of the directory service",
+ );
+ }
+}
+
+/**
* Lookup alias
*/
export async function lookupAlias(
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -192,6 +192,8 @@ import {
StartExchangeWalletKycRequest,
StartRefundQueryForUriResponse,
StartRefundQueryRequest,
+ TaldirGetSupportedAliasesRequest,
+ TaldirSupportedAliasesResponse,
TaldirLookupRequest,
TaldirLookupResponse,
TaldirRegistrationCompletionRequest,
@@ -382,6 +384,7 @@ export enum WalletApiOperation {
RegisterAlias = "registerAlias",
CompleteRegisterAlias = "completeRegisterAlias",
LookupAlias = "lookupAlias",
+ GetSupportedAliases = "getSupportedAliases",
// Wallet database management
@@ -628,6 +631,15 @@ export type LookupAliasOp = {
response: TaldirLookupResponse;
};
+/**
+ * Get supported aliases
+ */
+export type GetSupportedAliasesOp = {
+ op: WalletApiOperation.GetSupportedAliases;
+ request: TaldirGetSupportedAliasesRequest;
+ response: TaldirSupportedAliasesResponse;
+};
+
// group: Mailbox
/**
@@ -2094,6 +2106,9 @@ export const walletApiExpectedErrors = {
[WalletApiOperation.LookupAlias]: [
TalerErrorCode.WALLET_ALIAS_REGISTRATION_FAILED,
],
+ [WalletApiOperation.GetSupportedAliases]: [
+ TalerErrorCode.WALLET_ALIAS_REGISTRATION_FAILED,
+ ],
// --- Database maintenance -----------------------------------------------
@@ -2257,6 +2272,7 @@ export type WalletOperations = {
[WalletApiOperation.RegisterAlias]: RegisterAliasOp;
[WalletApiOperation.CompleteRegisterAlias]: CompleteRegisterAliasOp;
[WalletApiOperation.LookupAlias]: LookupAliasOp;
+ [WalletApiOperation.GetSupportedAliases]: GetSupportedAliasesOp;
[WalletApiOperation.GetMailbox]: GetMailboxOp;
[WalletApiOperation.InitializeMailbox]: InitializeMailboxOp;
[WalletApiOperation.RefreshMailbox]: RefreshMailboxOp;