diff options
Diffstat (limited to 'packages/taler-util')
-rw-r--r-- | packages/taler-util/src/payto.ts | 86 |
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, }; } |