aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/Lnurlp.svelte14
-rw-r--r--src/components/Numpad.svelte1
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.server.js44
3 files changed, 55 insertions, 4 deletions
diff --git a/src/components/Lnurlp.svelte b/src/components/Lnurlp.svelte
index 6785061a..c8427fac 100644
--- a/src/components/Lnurlp.svelte
+++ b/src/components/Lnurlp.svelte
@@ -7,7 +7,9 @@
export let data, form, send;
let { currency } = data.user;
- let { minSendable, maxSendable, callback, metadata, rates } = data;
+ let { currencies, minSendable, maxSendable, callback, metadata, rates } =
+ data;
+
$: rate = rates[currency];
@@ -36,7 +38,15 @@
</div>
{/if}
- <Numpad bind:amount bind:rate {currency} bind:submit={send} />
+ {JSON.stringify(currencies[currency])}
+ <select bind:value={currency}>
+ {#each currencies as c}
+ <option value={c.code}>{c.symbol}</option>
+ {/each}
+ </select>
+
+ {amount} {rate} {currency}
+ <Numpad bind:amount bind:rate bind:currency bind:submit={send} />
<form action="?/pay" method="POST" use:enhance on:submit={submit}>
<input name="amount" value={amount} type="hidden" />
diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte
index 9119999f..b7551a73 100644
--- a/src/components/Numpad.svelte
+++ b/src/components/Numpad.svelte
@@ -183,6 +183,7 @@
e.key === "Enter" && (e.preventDefault() || submit.click());
</script>
+{symbol}
<div class="flex justify-center items-center mb-3 px-3">
<div class="space-y-5">
<div class="text-center">
diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js
index 910ce5a5..6acfcfce 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.server.js
+++ b/src/routes/(app)/ln/[lnurl]/+page.server.js
@@ -2,7 +2,7 @@ import { fd, auth, get, post } from "$lib/utils";
import { error, fail, redirect } from "@sveltejs/kit";
export async function load({ params, parent }) {
- let { user } = await parent();
+ let { rates, user } = await parent();
if (!user) redirect(307, "/register");
let data;
@@ -14,12 +14,46 @@ export async function load({ params, parent }) {
error(500, e.message);
}
+ let currencies = [
+ {
+ code: "BRL",
+ name: "Reais",
+ symbol: "R$",
+ decimals: 2,
+ multiplier: 2932.290939091977,
+ convertible: { max: 100000, min: 100 },
+ },
+ {
+ code: "USDT",
+ name: "Tether",
+ symbol: "$",
+ decimals: 6,
+ multiplier: 1.4602808876678048,
+ convertible: { max: 200000000, min: 200000 },
+ },
+ ];
+
+ if (data.currencies) {
+ data.currencies.map(
+ (c) => (rates[c.code] = c.multiplier * 10 ** (c.decimals - 3) * 1000)
+ );
+ }
+
+ data.rates = rates;
+
if (!["payRequest", "withdrawRequest"].includes(data.tag))
error(500, "We only support LNURLp and LNURLw at this time");
return data;
}
+const convertAmount = (amount, multiplier, decimals) => {
+ const conversionFactor = multiplier * 10 ** (decimals - 3);
+ const convertedAmount = amount / conversionFactor;
+
+ return convertedAmount.toFixed(decimals);
+};
+
export const actions = {
pay: async ({ cookies, fetch, request }) => {
let error;
@@ -28,13 +62,19 @@ export const actions = {
minSendable = Math.round(minSendable / 1000);
maxSendable = Math.round(maxSendable / 1000);
+
+
if (amount < minSendable)
error = `Amount must be at least ${minSendable} sats`;
if (amount > maxSendable)
error = `Amount must be at most ${maxSendable} sats`;
if (error) return fail(400, { error });
- let { pr } = await fetch(`${callback}?amount=${amount * 1000}`).then((r) =>
+ const a = currency
+ ? `${Math.trunc(+amount * 10 ** currency.decimals)}.${currency.code}`
+ : (+amount * 1000).toString();
+
+ let { pr } = await fetch(`${callback}?amount=${a}`).then((r) =>
r.json()
);
redirect(307, `/send/lightning/${pr}`);