payto URI builder
This commit is contained in:
parent
3cde52effc
commit
5be2d128ed
@ -55,6 +55,66 @@ export interface PaytoUriBitcoin extends PaytoUriGeneric {
|
|||||||
|
|
||||||
const paytoPfx = "payto://";
|
const paytoPfx = "payto://";
|
||||||
|
|
||||||
|
export function buildPayto(
|
||||||
|
type: "iban",
|
||||||
|
iban: string,
|
||||||
|
bic: string | undefined,
|
||||||
|
): PaytoUriIBAN;
|
||||||
|
export function buildPayto(
|
||||||
|
type: "bitcoin",
|
||||||
|
address: string,
|
||||||
|
reserve: string | undefined,
|
||||||
|
): PaytoUriBitcoin;
|
||||||
|
export function buildPayto(
|
||||||
|
type: "x-taler-bank",
|
||||||
|
host: string,
|
||||||
|
account: string,
|
||||||
|
): PaytoUriTalerBank;
|
||||||
|
export function buildPayto(
|
||||||
|
type: "iban" | "bitcoin" | "x-taler-bank",
|
||||||
|
first: string,
|
||||||
|
second?: string,
|
||||||
|
): PaytoUriGeneric {
|
||||||
|
switch (type) {
|
||||||
|
case "bitcoin": {
|
||||||
|
const result: PaytoUriBitcoin = {
|
||||||
|
isKnown: true,
|
||||||
|
targetType: "bitcoin",
|
||||||
|
targetPath: first,
|
||||||
|
params: {},
|
||||||
|
segwitAddrs: !second ? [] : generateFakeSegwitAddress(second, first),
|
||||||
|
};
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
case "iban": {
|
||||||
|
const result: PaytoUriIBAN = {
|
||||||
|
isKnown: true,
|
||||||
|
targetType: "iban",
|
||||||
|
iban: first,
|
||||||
|
params: {},
|
||||||
|
targetPath: !second ? first : `${second}/${first}`,
|
||||||
|
};
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
case "x-taler-bank": {
|
||||||
|
if (!second) throw Error("missing account for payto://x-taler-bank");
|
||||||
|
const result: PaytoUriTalerBank = {
|
||||||
|
isKnown: true,
|
||||||
|
targetType: "x-taler-bank",
|
||||||
|
host: first,
|
||||||
|
account: second,
|
||||||
|
params: {},
|
||||||
|
targetPath: `${first}/${second}`,
|
||||||
|
};
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
const unknownType: never = type;
|
||||||
|
throw Error(`unknown payto:// type ${unknownType}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add query parameters to a payto URI
|
* Add query parameters to a payto URI
|
||||||
*/
|
*/
|
||||||
@ -84,8 +144,8 @@ export function stringifyPaytoUri(p: PaytoUri): string {
|
|||||||
const url = new URL(`${paytoPfx}${p.targetType}/${p.targetPath}`);
|
const url = new URL(`${paytoPfx}${p.targetType}/${p.targetPath}`);
|
||||||
const paramList = !p.params ? [] : Object.entries(p.params);
|
const paramList = !p.params ? [] : Object.entries(p.params);
|
||||||
paramList.forEach(([key, value]) => {
|
paramList.forEach(([key, value]) => {
|
||||||
url.searchParams.set(key, value)
|
url.searchParams.set(key, value);
|
||||||
})
|
});
|
||||||
return url.href;
|
return url.href;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user