commit ca7de594e0aae9e7af944fbeede3852614ec5469 parent 5ad8afc229a748d1428633035ce63b47354519ce Author: Martin Schanzenbach <schanzen@gnunet.org> Date: Wed, 21 Oct 2026 08:31:58 +0200 taldir/mailbox: some API hygiene Diffstat:
9 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/packages/taler-harness/src/index.ts b/packages/taler-harness/src/index.ts @@ -695,7 +695,7 @@ async function generateSideRecords( alias: "dbgen@example.com", aliasType: "email", petname: "Dbgen Mail", - mailboxBaseUri: "https://mailbox.example.com", + mailboxBaseUrl: "https://mailbox.example.com", mailboxAddress: "DBGENPKEY", source: "dbgen", }, @@ -703,7 +703,7 @@ async function generateSideRecords( alias: "@dbgen", aliasType: "social", petname: "", - mailboxBaseUri: "https://mailbox.example.com", + mailboxBaseUrl: "https://mailbox.example.com", mailboxAddress: "DBGENSOCIALPKEY", source: "dbgen", }, diff --git a/packages/taler-harness/src/integrationtests/test-wallet-contacts-basic.ts b/packages/taler-harness/src/integrationtests/test-wallet-contacts-basic.ts @@ -34,7 +34,7 @@ export async function runWalletContactsBasicTest(t: GlobalTestState) { alias: "bobexample.com", aliasType: "email", petname: "", - mailboxBaseUri: "https://mailbox.example.com", + mailboxBaseUrl: "https://mailbox.example.com", mailboxAddress: "BOBPKEY", source: "test", }; @@ -42,7 +42,7 @@ export async function runWalletContactsBasicTest(t: GlobalTestState) { alias: "@alice", aliasType: "social", petname: "", - mailboxBaseUri: "https://mailbox.example.com", + mailboxBaseUrl: "https://mailbox.example.com", mailboxAddress: "ALICEPKEY", source: "test", }; diff --git a/packages/taler-util/src/types-taler-wallet.ts b/packages/taler-util/src/types-taler-wallet.ts @@ -1644,14 +1644,16 @@ export interface TaldirRegistrationCompletionRequest { aliasType: string; challenge: string; taldirBaseUrl: string; - targetUri: string; + mailboxBaseUrl: MailboxBaseUrl; + mailboxAddress: string; progressToken?: string; } export const codecForTaldirRegistrationCompletionRequest = (): Codec<TaldirRegistrationCompletionRequest> => buildCodecForObject<TaldirRegistrationCompletionRequest>() - .property("targetUri", codecForString()) + .property("mailboxBaseUrl", codecForMailboxBaseUrl()) + .property("mailboxAddress", codecForString()) .property("taldirBaseUrl", codecForString()) .property("alias", codecForString()) .property("aliasType", codecForString()) @@ -1662,8 +1664,9 @@ export const codecForTaldirRegistrationCompletionRequest = export interface TaldirRegistrationRequest { alias: string; aliasType: string; - targetUri: string; taldirBaseUrl: string; + mailboxBaseUrl: MailboxBaseUrl; + mailboxAddress: string; duration: RelativeTime; progressToken?: string; } @@ -1671,7 +1674,8 @@ export interface TaldirRegistrationRequest { export const codecForTaldirRegistrationRequest = (): Codec<TaldirRegistrationRequest> => buildCodecForObject<TaldirRegistrationRequest>() - .property("targetUri", codecForString()) + .property("mailboxBaseUrl", codecForMailboxBaseUrl()) + .property("mailboxAddress", codecForString()) .property("taldirBaseUrl", codecForString()) .property("alias", codecForString()) .property("aliasType", codecForString()) @@ -1807,7 +1811,7 @@ export const codecForContactEntry = (): Codec<ContactEntry> => buildCodecForObject<ContactEntry>() .property("alias", codecForString()) .property("aliasType", codecForString()) - .property("mailboxBaseUri", codecForString()) + .property("mailboxBaseUrl", codecForString()) .property("mailboxAddress", codecForString()) .property("source", codecForString()) .property("petname", codecForString()) @@ -2237,7 +2241,7 @@ export interface ContactEntry { /** * mailbox URI */ - mailboxBaseUri: string; + mailboxBaseUrl: string; /** * mailbox identity diff --git a/packages/taler-wallet-core/src/contacts.ts b/packages/taler-wallet-core/src/contacts.ts @@ -41,7 +41,7 @@ async function makeContactListItem( const listItem: ContactEntry = { alias: r.alias, aliasType: r.aliasType, - mailboxBaseUri: r.mailboxBaseUri, + mailboxBaseUrl: r.mailboxBaseUrl, mailboxAddress: r.mailboxAddress, source: r.source, petname: r.petname, diff --git a/packages/taler-wallet-core/src/db/indexeddb/database.test.ts b/packages/taler-wallet-core/src/db/indexeddb/database.test.ts @@ -46,7 +46,7 @@ test("indexeddb import clears stores absent from an older dump", async () => { tx.addContact({ alias: "alice", aliasType: "email", - mailboxBaseUri: "https://mailbox.example/", + mailboxBaseUrl: "https://mailbox.example/", mailboxAddress: "mailbox-address" as any, source: "test", petname: "Alice", diff --git a/packages/taler-wallet-core/src/db/indexeddb/transaction.ts b/packages/taler-wallet-core/src/db/indexeddb/transaction.ts @@ -272,7 +272,7 @@ export class IdbWalletTransaction implements WalletDbTransaction { await tx.contacts.put({ alias: contact.alias, aliasType: contact.aliasType, - mailboxBaseUri: contact.mailboxBaseUri, + mailboxBaseUri: contact.mailboxBaseUrl, mailboxAddress: contact.mailboxAddress, source: contact.source, petname: contact.petname, @@ -290,7 +290,7 @@ export class IdbWalletTransaction implements WalletDbTransaction { return records.map((r) => ({ alias: r.alias, aliasType: r.aliasType, - mailboxBaseUri: r.mailboxBaseUri, + mailboxBaseUrl: r.mailboxBaseUri, mailboxAddress: r.mailboxAddress, source: r.source, petname: r.petname, diff --git a/packages/taler-wallet-core/src/db/sqlite/transaction.ts b/packages/taler-wallet-core/src/db/sqlite/transaction.ts @@ -4712,7 +4712,7 @@ export class SqliteWalletTransaction implements WalletDbTransaction { { alias: contact.alias, type: contact.aliasType, - uri: contact.mailboxBaseUri, + uri: contact.mailboxBaseUrl, addr: contact.mailboxAddress, src: contact.source, pet: contact.petname, @@ -4732,7 +4732,7 @@ export class SqliteWalletTransaction implements WalletDbTransaction { return rows.map((row) => ({ alias: str(row.alias), aliasType: str(row.alias_type), - mailboxBaseUri: str(row.mailbox_base_uri), + mailboxBaseUrl: str(row.mailbox_base_uri), mailboxAddress: str(row.mailbox_address), source: str(row.source), petname: str(row.petname), diff --git a/packages/taler-wallet-core/src/mailbox.ts b/packages/taler-wallet-core/src/mailbox.ts @@ -514,7 +514,7 @@ async function internalSendTalerUriMessage( req: SendTalerUriMailboxMessageRequest, ): Promise<EmptyObject> { const mailboxClient = new TalerMailboxInstanceHttpClient( - req.contact.mailboxBaseUri, + req.contact.mailboxBaseUrl, wex.http, ); // Get message size @@ -527,7 +527,7 @@ async function internalSendTalerUriMessage( default: throw TalerError.fromDetail( TalerErrorCode.WALLET_MAILBOX_UNAVAILABLE, - { mailboxBaseUrl: req.contact.mailboxBaseUri }, + { mailboxBaseUrl: req.contact.mailboxBaseUrl }, "could not read the configuration of the mailbox service", ); } @@ -542,14 +542,14 @@ async function internalSendTalerUriMessage( default: throw TalerError.fromDetail( TalerErrorCode.WALLET_MAILBOX_UNAVAILABLE, - { mailboxBaseUrl: req.contact.mailboxBaseUri }, + { mailboxBaseUrl: req.contact.mailboxBaseUrl }, "could not read the keys of the recipient's mailbox", ); } if (!mailboxMetadataMatchesAddress(req.contact.mailboxAddress, keys)) { throw TalerError.fromDetail( TalerErrorCode.WALLET_MAILBOX_UNAVAILABLE, - { mailboxBaseUrl: req.contact.mailboxBaseUri }, + { mailboxBaseUrl: req.contact.mailboxBaseUrl }, "the mailbox service returned keys for a different mailbox address", ); } @@ -568,7 +568,7 @@ async function internalSendTalerUriMessage( default: throw TalerError.fromDetail( TalerErrorCode.WALLET_MAILBOX_UNAVAILABLE, - { mailboxBaseUrl: req.contact.mailboxBaseUri }, + { mailboxBaseUrl: req.contact.mailboxBaseUrl }, "the mailbox service did not accept the message", ); } diff --git a/packages/taler-wallet-core/src/taldir.ts b/packages/taler-wallet-core/src/taldir.ts @@ -190,10 +190,11 @@ async function internalRegisterAlias( registerRequest.taldirBaseUrl, wex.http, ); + const targetUri = registerRequest.mailboxBaseUrl + "/" + registerRequest.mailboxAddress; const res = await taldirClient.postRegistrationRequest({ alias: registerRequest.alias, aliasType: registerRequest.aliasType, - targetUri: registerRequest.targetUri, + targetUri: targetUri, duration: registerRequest.duration, }); switch (res.case) { @@ -237,9 +238,10 @@ async function internalCompleteAliasRegistration( completionRequest.taldirBaseUrl, wex.http, ); + const targetUri = completionRequest.mailboxBaseUrl + "/" + completionRequest.mailboxAddress; const encoder = new TextEncoder(); const bytes1 = encoder.encode(completionRequest.challenge); - const bytes2 = encoder.encode(completionRequest.targetUri); + const bytes2 = encoder.encode(targetUri); const combined = new Uint8Array(bytes1.length + bytes2.length); combined.set(bytes1, 0); combined.set(bytes2, bytes1.length);