From 6b8c43f3577513427bddc57503cbb5c2f1cbf462 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 8 Mar 2024 23:01:49 -0800 Subject: wip --- src/components/Lnurlp.svelte | 14 +++++++-- src/components/Numpad.svelte | 1 + src/routes/(app)/ln/[lnurl]/+page.server.js | 44 +++++++++++++++++++++++++++-- 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 @@ {/if} - + {JSON.stringify(currencies[currency])} + + + {amount} {rate} {currency} +
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()); +{symbol}
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}`); -- cgit v1.2.3