aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-util')
-rw-r--r--packages/taler-util/src/payto.ts86
1 files changed, 45 insertions, 41 deletions
diff --git a/packages/taler-util/src/payto.ts b/packages/taler-util/src/payto.ts
index c9889160a..09d6856ca 100644
--- a/packages/taler-util/src/payto.ts
+++ b/packages/taler-util/src/payto.ts
@@ -14,10 +14,14 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { generateFakeSegwitAddress } from "./index.js";
+import { generateFakeSegwitAddress } from "./bitcoin.js";
import { URLSearchParams } from "./url.js";
-export type PaytoUri = PaytoUriUnknown | PaytoUriIBAN | PaytoUriTalerBank | PaytoUriBitcoin;
+export type PaytoUri =
+ | PaytoUriUnknown
+ | PaytoUriIBAN
+ | PaytoUriTalerBank
+ | PaytoUriBitcoin;
interface PaytoUriGeneric {
targetType: string;
@@ -31,38 +35,41 @@ interface PaytoUriUnknown extends PaytoUriGeneric {
interface PaytoUriIBAN extends PaytoUriGeneric {
isKnown: true;
- targetType: 'iban',
+ targetType: "iban";
iban: string;
}
interface PaytoUriTalerBank extends PaytoUriGeneric {
isKnown: true;
- targetType: 'x-taler-bank',
+ targetType: "x-taler-bank";
host: string;
account: string;
}
interface PaytoUriBitcoin extends PaytoUriGeneric {
isKnown: true;
- targetType: 'bitcoin',
- generateSegwitAddress: (r: string) => { addr1: string, addr2: string };
- addr1?: string, addr2?: string,
+ targetType: "bitcoin";
+ generateSegwitAddress: (r: string) => { addr1: string; addr2: string };
+ addr1?: string;
+ addr2?: string;
}
const paytoPfx = "payto://";
-
-
function buildSegwitGenerator(result: PaytoUriBitcoin, targetPath: string) {
//generate segwit address just once, save addr in payto object
//and use it as cache
- return function generateSegwitAddress(reserve: string): { addr1: string, addr2: string } {
- if (result.addr1 && result.addr2) return { addr1: result.addr1, addr2: result.addr2 };
- const { addr1, addr2 } = generateFakeSegwitAddress(reserve, targetPath)
- result.addr1 = addr1
- result.addr2 = addr2
- return { addr1, addr2 }
- }
+ return function generateSegwitAddress(reserve: string): {
+ addr1: string;
+ addr2: string;
+ } {
+ if (result.addr1 && result.addr2)
+ return { addr1: result.addr1, addr2: result.addr2 };
+ const { addr1, addr2 } = generateFakeSegwitAddress(reserve, targetPath);
+ result.addr1 = addr1;
+ result.addr2 = addr2;
+ return { addr1, addr2 };
+ };
}
/**
* Add query parameters to a payto URI
@@ -81,27 +88,27 @@ export function addPaytoQueryParams(
/**
* Serialize a PaytoURI into a valid payto:// string
- *
- * @param p
- * @returns
+ *
+ * @param p
+ * @returns
*/
export function stringifyPaytoUri(p: PaytoUri): string {
- const url = `${paytoPfx}${p.targetType}//${p.targetPath}`
+ const url = `${paytoPfx}${p.targetType}//${p.targetPath}`;
if (p.params) {
const search = Object.entries(p.params)
.map(([key, value]) => `${key}=${value}`)
.join("&");
- return `${url}?${search}`
+ return `${url}?${search}`;
}
- return url
+ return url;
}
/**
* Parse a valid payto:// uri into a PaytoUri object
* RFC 8905
- *
- * @param s
- * @returns
+ *
+ * @param s
+ * @returns
*/
export function parsePaytoUri(s: string): PaytoUri | undefined {
if (!s.startsWith(paytoPfx)) {
@@ -127,47 +134,44 @@ export function parsePaytoUri(s: string): PaytoUri | undefined {
params[v] = k;
});
- if (targetType === 'x-taler-bank') {
- const parts = targetPath.split('/')
- const host = parts[0]
- const account = parts[1]
+ if (targetType === "x-taler-bank") {
+ const parts = targetPath.split("/");
+ const host = parts[0];
+ const account = parts[1];
return {
targetPath,
targetType,
params,
isKnown: true,
- host, account,
+ host,
+ account,
};
-
}
- if (targetType === 'iban') {
+ if (targetType === "iban") {
return {
isKnown: true,
targetPath,
targetType,
params,
- iban: targetPath
+ iban: targetPath,
};
-
}
- if (targetType === 'bitcoin') {
-
+ if (targetType === "bitcoin") {
const result: PaytoUriBitcoin = {
isKnown: true,
targetPath,
targetType,
params,
- generateSegwitAddress: (): any => null
- }
+ generateSegwitAddress: (): any => null,
+ };
- result.generateSegwitAddress = buildSegwitGenerator(result, targetPath)
+ result.generateSegwitAddress = buildSegwitGenerator(result, targetPath);
return result;
-
}
return {
targetPath,
targetType,
params,
- isKnown: false
+ isKnown: false,
};
}