taler-typescript-core

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

commit 1225aa0deda9ea5a00e45fe129ff62d82674ae5a
parent f1daa2460300c3fe1c97ce32efb7b6410702482b
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Wed,  5 Nov 2025 14:20:40 +0100

fix more URI handling; start integration testing

Diffstat:
Mpackages/taler-util/src/http-client/mailbox.ts | 2+-
Mpackages/taler-util/src/taleruri.ts | 7++++++-
Mpackages/taler-wallet-core/src/mailbox.ts | 3+--
Mpackages/taler-wallet-webextension/src/wallet/Mailbox.tsx | 17+++++++----------
4 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/packages/taler-util/src/http-client/mailbox.ts b/packages/taler-util/src/http-client/mailbox.ts @@ -89,7 +89,7 @@ export class TalerMailboxInstanceHttpClient { | OperationOk<TalerMailboxApi.TalerMailboxConfigResponse> | OperationFail<HttpStatusCode.NotFound> >{ - const url = new URL(`config`, this.baseUrl); + const url = new URL(`/config`, this.baseUrl); const resp = await this.httpLib.fetch(url.href, { method: "GET", }); diff --git a/packages/taler-util/src/taleruri.ts b/packages/taler-util/src/taleruri.ts @@ -1064,11 +1064,16 @@ export function parseAddContactUriWithError(s: string) { const q = new URLSearchParams(lastPart ?? ""); const mailboxIdentity = lastPart.split("?")[0]; const sourceBaseUrl = q.get("sourceBaseUrl") ?? ""; + const mailboxHostPort = Paytos.parseHostPortPath2( + mailboxBaseUri, + pathSegments.join("/"), + pi.value.innerProto, + ); const result: AddContactUri = { type: TalerUriAction.AddContact, aliasType: parts[0], alias: parts[1], - mailboxBaseUri: [mailboxBaseUri, ...pathSegments].join("/"), + mailboxBaseUri: mailboxHostPort!, mailboxIdentity: mailboxIdentity, sourceBaseUrl: sourceBaseUrl, }; diff --git a/packages/taler-wallet-core/src/mailbox.ts b/packages/taler-wallet-core/src/mailbox.ts @@ -223,8 +223,7 @@ export async function refreshMailbox( export async function sendTalerUriMessage( wex: WalletExecutionContext, req: SendTalerUriMailboxMessageRequest) : Promise<EmptyObject> { - // FIXME we need to differentiate base URI and account in the contact!! - const mailboxClient = new TalerMailboxInstanceHttpClient(req.contact.mailboxBaseUri, wex.http); + const mailboxClient = new TalerMailboxInstanceHttpClient(req.contact.mailboxBaseUri, wex.http); // Get message size var message_size; const resConf = await mailboxClient.getConfig(); diff --git a/packages/taler-wallet-webextension/src/wallet/Mailbox.tsx b/packages/taler-wallet-webextension/src/wallet/Mailbox.tsx @@ -64,7 +64,6 @@ export function MailboxPage({ const mailboxBaseUrl = "http://localhost:11000"; var mailboxClient: TalerMailboxInstanceHttpClient; var activeMailbox: MailboxConfiguration | undefined; - var h_address: string | undefined; const httpClient = new BrowserFetchHttpLib(); mailboxClient = new TalerMailboxInstanceHttpClient(mailboxBaseUrl, httpClient); @@ -75,8 +74,7 @@ export function MailboxPage({ // FIXME put this into the mailbox config directly? const privKey = decodeCrock(activeMailbox.privateKey); const pubKey = eddsaGetPublic(privKey); - h_address = encodeCrock(sha512(pubKey)); - const mailboxUrl = activeMailbox.mailboxBaseUrl + '/' + encodeCrock(pubKey); + const mailboxUrl = activeMailbox.mailboxBaseUrl + '/' + encodeCrock(sha512(pubKey)); return { messages: b.messages, mailbox: activeMailbox, @@ -111,17 +109,16 @@ export function MailboxPage({ const onDeleteMessage = async (m: MailboxMessageRecord) => { api.wallet.call(WalletApiOperation.DeleteMailboxMessage, { message: m }).then(); }; - const onFetchMessages = async () => { - if (!h_address) { - return; - } + const onFetchMessages = async (url: string) => { + const urlParts = url.split("/"); + const h_address = urlParts[urlParts.length - 1]; const httpClient = new BrowserFetchHttpLib(); const mailboxClient = new TalerMailboxInstanceHttpClient(mailboxBaseUrl, httpClient); const messagesResp = await mailboxClient.getMessages({hMailbox: h_address}); + console.log (messagesResp.type); if (messagesResp.type != "ok") { return; } - messagesResp.body state?.retry(); }; return ( @@ -174,7 +171,7 @@ export function MessagesView({ search: TextFieldHandler; messages: MailboxMessageRecord[]; mailboxUrl: string; - onFetchMessages: () => Promise<void>; + onFetchMessages: (url: string) => Promise<void>; onDeleteMessage: (m: MailboxMessageRecord) => Promise<void>; }): VNode { const { i18n } = useTranslationContext(); @@ -195,7 +192,7 @@ export function MessagesView({ </Button> </SmallText> </p> - <Button variant="contained" color="error" onClick={onFetchMessages}> + <Button variant="contained" color="error" onClick={() => { return onFetchMessages(mailboxUrl) }}> <i18n.Translate>Fetch messages</i18n.Translate> </Button> </Centered>