From 2dbd712039e4268c6cf8e6240033caf464ebcd50 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 27 Jan 2023 20:58:08 -0800 Subject: lnurlw --- src/components/Lnurlp.svelte | 58 ++++++++++++++++++++++ src/components/Lnurlw.svelte | 55 +++++++++++++++++++++ src/components/index.js | 2 + src/routes/(app)/ln/[lnurl]/+page.server.js | 27 ++++++++++- src/routes/(app)/ln/[lnurl]/+page.svelte | 62 +++--------------------- src/routes/(app)/ln/withdrawal/sent/+page.svelte | 23 +++++++++ src/routes/(app)/send/lnurl/+page.svelte | 0 7 files changed, 170 insertions(+), 57 deletions(-) create mode 100644 src/components/Lnurlp.svelte create mode 100644 src/components/Lnurlw.svelte create mode 100644 src/routes/(app)/ln/withdrawal/sent/+page.svelte delete mode 100644 src/routes/(app)/send/lnurl/+page.svelte (limited to 'src') diff --git a/src/components/Lnurlp.svelte b/src/components/Lnurlp.svelte new file mode 100644 index 00000000..22364fcf --- /dev/null +++ b/src/components/Lnurlp.svelte @@ -0,0 +1,58 @@ + + +
+
+ {#each JSON.parse(metadata) as m} +
+ {#if m[0] === 'text/plain'} +

{m[1]}

+ {/if} + {#if m[0].includes('image')} + Recipient + {/if} +
+ {/each} +
+ + {#if form?.error} +
+ {form.error} +
+ {/if} + + + +
+ + + + + + +
+ +
+
+
diff --git a/src/components/Lnurlw.svelte b/src/components/Lnurlw.svelte new file mode 100644 index 00000000..dab360aa --- /dev/null +++ b/src/components/Lnurlw.svelte @@ -0,0 +1,55 @@ + + +
+
+
+

{defaultDescription}

+
+
+ + {#if form?.error} +
+ {form.error} +
+ {/if} + + + +
+ + + + + + + + +
+ +
+
+
diff --git a/src/components/index.js b/src/components/index.js index 3b21f96d..ea44c7d9 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,3 +1,5 @@ +export { default as Lnurlp } from './Lnurlp.svelte'; +export { default as Lnurlw } from './Lnurlw.svelte'; export { default as Event } from './Event.svelte'; export { default as Password } from './Password.svelte'; export { default as Feed } from './Feed.svelte'; diff --git a/src/routes/(app)/ln/[lnurl]/+page.server.js b/src/routes/(app)/ln/[lnurl]/+page.server.js index 6f61143f..a947dbb4 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.server.js +++ b/src/routes/(app)/ln/[lnurl]/+page.server.js @@ -5,7 +5,8 @@ export async function load({ params }) { try { let { lnurl } = params; let data = await get(`/decode?text=${lnurl}`); - if (data.tag !== 'payRequest') throw error(500, 'We can only handle lnurl pay requests'); + if (data.tag === 'payRequest') throw redirect('/lnurlp'); + throw error(500, 'We can only handle lnurl pay requests'); return data; } catch (e) { throw error(500, e.message); @@ -13,7 +14,7 @@ export async function load({ params }) { } export const actions = { - default: async ({ cookies, fetch, request }) => { + pay: async ({ cookies, fetch, request }) => { let error; let { callback, amount, minSendable, maxSendable } = Object.fromEntries( @@ -26,5 +27,27 @@ export const actions = { let { pr } = await fetch(`${callback}?amount=${amount}`).then((r) => r.json()); throw redirect(307, `/send/lightning/${pr}`); + }, + + withdraw: async ({ cookies, fetch, request }) => { + let error; + + let { callback, amount, minWithdrawable, maxWithdrawable, k1 } = Object.fromEntries( + await request.formData() + ); + + if (amount < minWithdrawable) error = `Amount must be at least ${minWithdrawable} sats`; + if (amount > maxWithdrawable) error = `Amount must be at most ${maxWithdrawable} sats`; + if (error) return fail(400, { error }); + + let invoice = { amount, type: 'lightning' }; + let user = { username: form.get('username'), currency: form.get('currency') }; + + let { text: pr } = await post('/invoice', { invoice, user }, auth(cookies)); + + let c = callback.includes('?') ? '&' : '?'; + await fetch(`${callback}${c}k1=${k1}&pr=${pr}`).then((r) => r.json()); + + throw redirect(307, `/ln/withdrawal/sent`); } }; diff --git a/src/routes/(app)/ln/[lnurl]/+page.svelte b/src/routes/(app)/ln/[lnurl]/+page.svelte index 297ac35a..f9423153 100644 --- a/src/routes/(app)/ln/[lnurl]/+page.svelte +++ b/src/routes/(app)/ln/[lnurl]/+page.svelte @@ -1,58 +1,10 @@ -
-
- {#each JSON.parse(metadata) as m} -
- {#if m[0] === 'text/plain'} -

{m[1]}

- {/if} - {#if m[0].includes('image')} - Recipient - {/if} -
- {/each} -
- - {#if form?.error} -
- {form.error} -
- {/if} - - - -
- - - - - - -
- -
-
-
+{#if tag === 'payRequest'} + +{:else if tag === 'withdrawRequest'} + +{/if} diff --git a/src/routes/(app)/ln/withdrawal/sent/+page.svelte b/src/routes/(app)/ln/withdrawal/sent/+page.svelte new file mode 100644 index 00000000..84e6a7e0 --- /dev/null +++ b/src/routes/(app)/ln/withdrawal/sent/+page.svelte @@ -0,0 +1,23 @@ + + +
+
+ +
+

Request Sent!

+
+ + +
+ + +
{$t('payments.tapAnywhere')}
diff --git a/src/routes/(app)/send/lnurl/+page.svelte b/src/routes/(app)/send/lnurl/+page.svelte deleted file mode 100644 index e69de29b..00000000 -- cgit v1.2.3