summaryrefslogtreecommitdiff
path: root/packages/taler-util/src
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-03-07 19:36:25 +0100
committerFlorian Dold <florian@dold.me>2024-03-07 19:36:25 +0100
commit51d91b719b5213d2cb49482f980a4e08ff88893a (patch)
treed7d2e6d8838dc48310beeaeb0c42b1eadfc68577 /packages/taler-util/src
parent983d14761eb1c33f4a59211b132f8485b7998bda (diff)
downloadwallet-core-51d91b719b5213d2cb49482f980a4e08ff88893a.tar.gz
wallet-core-51d91b719b5213d2cb49482f980a4e08ff88893a.tar.bz2
wallet-core-51d91b719b5213d2cb49482f980a4e08ff88893a.zip
taler-util: make exchange pub optional in taler://withdraw-exchange URI
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r--packages/taler-util/src/taleruri.test.ts71
-rw-r--r--packages/taler-util/src/taleruri.ts10
2 files changed, 64 insertions, 17 deletions
diff --git a/packages/taler-util/src/taleruri.test.ts b/packages/taler-util/src/taleruri.test.ts
index ab7a27af6..dbd175fe5 100644
--- a/packages/taler-util/src/taleruri.test.ts
+++ b/packages/taler-util/src/taleruri.test.ts
@@ -421,19 +421,66 @@ test("taler dev exp URI (stringify)", (t) => {
*/
test("taler withdraw exchange URI (parse)", (t) => {
- const r1 = parseWithdrawExchangeUri(
- "taler://withdraw-exchange/exchange.demo.taler.net/someroot/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0?a=KUDOS%3A2",
- );
- if (!r1) {
- t.fail();
- return;
+ {
+ const r1 = parseWithdrawExchangeUri(
+ "taler://withdraw-exchange/exchange.demo.taler.net/someroot/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0?a=KUDOS%3A2",
+ );
+ if (!r1) {
+ t.fail();
+ return;
+ }
+ t.deepEqual(
+ r1.exchangePub,
+ "GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
+ );
+ t.deepEqual(
+ r1.exchangeBaseUrl,
+ "https://exchange.demo.taler.net/someroot/",
+ );
+ t.deepEqual(r1.amount, "KUDOS:2");
+ }
+ {
+ const r2 = parseWithdrawExchangeUri(
+ "taler://withdraw-exchange/exchange.demo.taler.net/someroot/",
+ );
+ if (!r2) {
+ t.fail();
+ return;
+ }
+ t.deepEqual(r2.exchangePub, undefined);
+ t.deepEqual(r2.amount, undefined);
+ t.deepEqual(
+ r2.exchangeBaseUrl,
+ "https://exchange.demo.taler.net/someroot/",
+ );
+ }
+
+ {
+ const r3 = parseWithdrawExchangeUri(
+ "taler://withdraw-exchange/exchange.demo.taler.net/",
+ );
+ if (!r3) {
+ t.fail();
+ return;
+ }
+ t.deepEqual(r3.exchangePub, undefined);
+ t.deepEqual(r3.amount, undefined);
+ t.deepEqual(r3.exchangeBaseUrl, "https://exchange.demo.taler.net/");
+ }
+
+ {
+ // No trailing slash, no path component
+ const r4 = parseWithdrawExchangeUri(
+ "taler://withdraw-exchange/exchange.demo.taler.net",
+ );
+ if (!r4) {
+ t.fail();
+ return;
+ }
+ t.deepEqual(r4.exchangePub, undefined);
+ t.deepEqual(r4.amount, undefined);
+ t.deepEqual(r4.exchangeBaseUrl, "https://exchange.demo.taler.net/");
}
- t.deepEqual(
- r1.exchangePub,
- "GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
- );
- t.deepEqual(r1.exchangeBaseUrl, "https://exchange.demo.taler.net/someroot/");
- t.deepEqual(r1.amount, "KUDOS:2");
});
test("taler withdraw exchange URI (stringify)", (t) => {
diff --git a/packages/taler-util/src/taleruri.ts b/packages/taler-util/src/taleruri.ts
index 9717a7d71..4a8647d21 100644
--- a/packages/taler-util/src/taleruri.ts
+++ b/packages/taler-util/src/taleruri.ts
@@ -122,7 +122,7 @@ export interface BackupRestoreUri {
export interface WithdrawExchangeUri {
type: TalerUriAction.WithdrawExchange;
exchangeBaseUrl: string;
- exchangePub: string;
+ exchangePub?: string;
amount?: AmountString;
}
@@ -401,11 +401,11 @@ export function parseWithdrawExchangeUri(
}
const c = pi?.rest.split("?");
const parts = c[0].split("/");
- if (parts.length < 2) {
+ if (parts.length < 1) {
return undefined;
}
const host = parts[0].toLowerCase();
- const exchangePub = parts[parts.length - 1];
+ const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;
const pathSegments = parts.slice(1, parts.length - 1);
const hostAndSegments = [host, ...pathSegments].join("/");
const exchangeBaseUrl = canonicalizeBaseUrl(
@@ -417,7 +417,7 @@ export function parseWithdrawExchangeUri(
return {
type: TalerUriAction.WithdrawExchange,
exchangeBaseUrl,
- exchangePub,
+ exchangePub: exchangePub != "" ? exchangePub : undefined,
amount,
};
}
@@ -545,7 +545,7 @@ export function stringifyWithdrawExchange({
const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {
a: amount,
});
- return `${proto}://withdraw-exchange/${path}${exchangePub}${query}`;
+ return `${proto}://withdraw-exchange/${path}${exchangePub ?? ""}${query}`;
}
export function stringifyDevExperimentUri({