diff options
author | Florian Dold <florian@dold.me> | 2024-07-10 12:54:10 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-07-10 12:54:10 +0200 |
commit | c767e62e28d16cbde275f450d442741309294f21 (patch) | |
tree | 6d943a037681a262fb5a156a0cca15536d7c3720 /packages/taler-util/src | |
parent | 12656a8d864e5f97b51153b83dfe748279c05077 (diff) | |
download | wallet-core-c767e62e28d16cbde275f450d442741309294f21.tar.xz |
util: fix payto URI construction
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r-- | packages/taler-util/src/payto.test.ts | 14 | ||||
-rw-r--r-- | packages/taler-util/src/payto.ts | 10 | ||||
-rw-r--r-- | packages/taler-util/src/whatwg-url.ts | 4 |
3 files changed, 25 insertions, 3 deletions
diff --git a/packages/taler-util/src/payto.test.ts b/packages/taler-util/src/payto.test.ts index 1b6907cbb..3b28c4714 100644 --- a/packages/taler-util/src/payto.test.ts +++ b/packages/taler-util/src/payto.test.ts @@ -16,7 +16,7 @@ import test from "ava"; -import { PaytoString, parsePaytoUri, stringifyPaytoUri } from "./payto.js"; +import { PaytoString, addPaytoQueryParams, parsePaytoUri, stringifyPaytoUri } from "./payto.js"; test("basic payto parsing", (t) => { const r1 = parsePaytoUri("https://example.com/"); @@ -42,3 +42,15 @@ test("parsing payto with % carh", (t) => { t.is(stringifyPaytoUri(parsePaytoUri(payto1)!), payto1); }); + +test("adding payto query params", (t) => { + const payto1 = + "payto://iban/DE1231231231?receiver-name=John%20Doe" as PaytoString; + const out1 = addPaytoQueryParams(payto1, {}); + t.deepEqual(payto1, out1); + + const out2 = addPaytoQueryParams(payto1, { + foo: "42", + }); + t.deepEqual(out2, "payto://iban/DE1231231231?receiver-name=John%20Doe&foo=42"); +}); diff --git a/packages/taler-util/src/payto.ts b/packages/taler-util/src/payto.ts index cd90de3a4..3a332b37e 100644 --- a/packages/taler-util/src/payto.ts +++ b/packages/taler-util/src/payto.ts @@ -160,14 +160,20 @@ export function buildPayto( } /** - * Add query parameters to a payto URI + * Add query parameters to a payto URI. + * + * Existing parameters are preserved. */ export function addPaytoQueryParams( s: string, params: { [name: string]: string }, ): string { const [acct, search] = s.slice(paytoPfx.length).split("?"); - const paramList = !params ? [] : Object.entries(params); + const searchParams = new URLSearchParams(search || ""); + for (const [paramKey, paramValue] of Object.entries(params)) { + searchParams.set(paramKey, paramValue); + } + const paramList = [...searchParams.entries()]; if (paramList.length === 0) { return paytoPfx + acct; } diff --git a/packages/taler-util/src/whatwg-url.ts b/packages/taler-util/src/whatwg-url.ts index 13abf5397..869b304ed 100644 --- a/packages/taler-util/src/whatwg-url.ts +++ b/packages/taler-util/src/whatwg-url.ts @@ -424,6 +424,10 @@ export class URLSearchParamsImpl { return output; } + entries() { + return [...this._list.map(x => [x[0], x[1]])]; + } + forEach( callbackfn: ( value: string, |