diff options
| author | Adam Soltys <[email protected]> | 2024-03-08 23:01:49 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-03-08 23:01:49 -0800 |
| commit | 6b8c43f3577513427bddc57503cbb5c2f1cbf462 (patch) | |
| tree | 80bbac096126aee555bb8d566e5164aec57674b0 /src | |
| parent | 59e2f69f0b0ab31e18bdc36e1d605ba2c82bed1d (diff) | |
| download | coinos-ui-lnurl-fiat.tar.gz coinos-ui-lnurl-fiat.zip | |
wiplnurl-fiat
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/Lnurlp.svelte | 14 | ||||
| -rw-r--r-- | src/components/Numpad.svelte | 1 | ||||
| -rw-r--r-- | 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 @@ </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}`); |
