aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/ln
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-01-24 09:53:40 -0800
committerAdam Soltys <[email protected]>2023-01-24 09:53:40 -0800
commitc8b250bc216b190e913fab27d599b40518d7e748 (patch)
tree191e56d4d6671c9e24f7db9a7c268461a76bb11d /src/routes/(app)/ln
parent29ed3a4366eb9719d32dac390764bf119c40afff (diff)
downloadcoinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.tar.gz
coinos-ui-c8b250bc216b190e913fab27d599b40518d7e748.zip
lnurl pay
Diffstat (limited to 'src/routes/(app)/ln')
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.server.js27
-rw-r--r--src/routes/(app)/ln/[lnurl]/+page.svelte15
2 files changed, 30 insertions, 12 deletions
diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js
index bb731e84..ded2e58c 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.server.js
+++ b/src/routes/(app)/ln/[lnurl]/+page.server.js
@@ -1,23 +1,30 @@
import { auth, get, post } from '$lib/utils';
-import { error, redirect } from '@sveltejs/kit';
+import { error, invalid, redirect } from '@sveltejs/kit';
export async function load({ params }) {
try {
let { lnurl } = params;
- lnurl = await get(`/decode?text=${lnurl}`);
- if (lnurl.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests');
-
- return lnurl;
+ let data = await get(`/decode?text=${lnurl}`);
+ if (data.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests');
+ return data;
} catch (e) {
throw error(500, e.message);
}
}
export const actions = {
- default: async ({ cookies, request }) => {
- let { callback, ...form } = Object.fromEntries(await request.formData());
- form.params = { callback };
- await post('/pay', form, auth(cookies));
- throw redirect(307, '/sent');
+ default: async ({ cookies, fetch, request }) => {
+ let error;
+
+ let { callback, amount, minSendable, maxSendable } = Object.fromEntries(
+ await request.formData()
+ );
+
+ 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 invalid(400, { error });
+
+ let { pr } = await fetch(`${callback}?amount=${amount}`).then((r) => r.json());
+ throw redirect(307, `/send/lightning/${pr}`);
}
};
diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte
index 15edeaef..297ac35a 100644
--- a/src/routes/(app)/ln/[lnurl]/+page.svelte
+++ b/src/routes/(app)/ln/[lnurl]/+page.svelte
@@ -4,10 +4,12 @@
import { Numpad, Spinner } from '$comp';
import { pin } from '$lib/store';
- export let data;
+ export let data, form;
let { currency } = data.user;
let { minSendable, maxSendable, callback, metadata } = data;
- let amount, loading;
+
+ let amount = minSendable,
+ loading;
let submit = () => (loading = true);
</script>
@@ -24,10 +26,19 @@
</div>
{/each}
</div>
+
+ {#if form?.error}
+ <div class="text-red-600 text-center mb-5">
+ {form.error}
+ </div>
+ {/if}
+
<Numpad bind:amount {currency} />
<form method="POST" use:enhance on:submit={submit}>
<input name="amount" value={amount} type="hidden" />
+ <input name="minSendable" value={minSendable} type="hidden" />
+ <input name="maxSendable" value={maxSendable} type="hidden" />
<input name="callback" value={callback} type="hidden" />
<input name="pin" value={$pin} type="hidden" />