From 5e3d4133760962db28c4f3a595f0566bd59391ff Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Oct 2022 15:31:08 -0700 Subject: thanks page --- src/lib/socket.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/lib/socket.js') diff --git a/src/lib/socket.js b/src/lib/socket.js index 02d73a48..7cce0071 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -4,6 +4,7 @@ import { success } from '$lib/utils'; import { env } from '$env/dynamic/public'; const socketUrl = env.PUBLIC_SOCKET; +const btc = env.PUBLIC_BTC; let interval, socket, token; @@ -20,7 +21,8 @@ export const messages = (data) => ({ payment() { let { amount, invoice } = data; - console.log('INVOICE', invoice); + if (get(user).account_id !== data.account_id ) return; + if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); } -- cgit v1.2.3 From 02af363d2f0d552a72dc1c90bf8d785e04465d3a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Oct 2022 23:29:32 -0700 Subject: invoice redirect --- .env | 3 -- .env.sample | 3 ++ .gitignore | 1 + src/components/RegisterOrLogin.svelte | 6 ++-- src/hooks.server.js | 4 +-- src/lib/socket.js | 4 +-- src/lib/store.js | 3 +- src/lib/upload.js | 2 +- src/lib/utils.js | 11 +++++++ src/routes/+layout.server.js | 9 ++---- src/routes/+layout.svelte | 3 +- src/routes/[username]/dashboard/+page.server.js | 1 + src/routes/invoice/[id]/+page.svelte | 6 ++-- src/routes/launch/+page.server.js | 6 ++++ src/routes/launch/+page.svelte | 22 +++++++++----- src/routes/launch/purchase/+page.server.js | 37 +++++++++++++++++------- src/routes/launch/purchase/+page.svelte | 16 +++++----- src/routes/launch/purchase/card/+page.server.js | 7 ++--- src/routes/launch/purchase/card/+page.svelte | 18 ++++++------ src/routes/launch/thanks/[asset]/+page.server.js | 1 + src/routes/launch/thanks/[asset]/+page.svelte | 4 ++- src/routes/launch/ticket/+page.svelte | 9 +++--- src/routes/login/+page.server.js | 4 +-- src/routes/register/+page.server.js | 4 +-- src/routes/register/+page.svelte | 2 -- 25 files changed, 115 insertions(+), 71 deletions(-) delete mode 100644 .env create mode 100644 .env.sample create mode 100644 src/routes/[username]/dashboard/+page.server.js create mode 100644 src/routes/launch/+page.server.js create mode 100644 src/routes/launch/thanks/[asset]/+page.server.js (limited to 'src/lib/socket.js') diff --git a/.env b/.env deleted file mode 100644 index 468bbf9c..00000000 --- a/.env +++ /dev/null @@ -1,3 +0,0 @@ -PUBLIC_COINOS_URL=http://localhost:3119 -PUBLIC_BTC=5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225 -PUBLIC_SOCKET=ws://localhost:3119/ws diff --git a/.env.sample b/.env.sample new file mode 100644 index 00000000..468bbf9c --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +PUBLIC_COINOS_URL=http://localhost:3119 +PUBLIC_BTC=5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225 +PUBLIC_SOCKET=ws://localhost:3119/ws diff --git a/.gitignore b/.gitignore index dad6f805..75631d29 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules /build /.svelte-kit /package +.env diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index 0b954387..7f254400 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -3,7 +3,7 @@ import { enhance } from '$app/forms'; import { Icon } from '$comp'; import { focus } from '$lib/utils'; - import { redirect } from '$lib/store'; + import { loginRedirect } from '$lib/store'; import { t } from '$lib/translations'; export let form; @@ -40,8 +40,8 @@ {/if}
- {#if $redirect} - + {#if $loginRedirect} + {/if}
diff --git a/src/hooks.server.js b/src/hooks.server.js index 58882771..a5b1eef3 100644 --- a/src/hooks.server.js +++ b/src/hooks.server.js @@ -2,9 +2,8 @@ import { auth, get } from '$lib/utils'; export async function handle({ event, resolve }) { let token = event.cookies.get('token'); - if (token) { - event.request.headers.set('authorization', `Bearer ${token}`); + if (token) { try { event.locals.user = await get('/me', auth(event.cookies)); } catch (e) { @@ -13,7 +12,6 @@ export async function handle({ event, resolve }) { } const response = await resolve(event); - response.headers.set('x-custom-header', 'potato'); return response; } diff --git a/src/lib/socket.js b/src/lib/socket.js index 7cce0071..fb77333f 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -1,5 +1,5 @@ import { get } from 'svelte/store'; -import { invoices, newPayment, rate } from '$lib/store'; +import { invoices, newPayment, rate, user } from '$lib/store'; import { success } from '$lib/utils'; import { env } from '$env/dynamic/public'; @@ -21,7 +21,7 @@ export const messages = (data) => ({ payment() { let { amount, invoice } = data; - if (get(user).account_id !== data.account_id ) return; + if (get(user).account_id !== data.account_id) return; if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); diff --git a/src/lib/store.js b/src/lib/store.js index 765e14cf..ffafa70b 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -27,7 +27,8 @@ const persistLocal = (key, defaultValue) => { return s; }; -export const redirect = writable(); +export const invoiceRedirect = writable(); +export const loginRedirect = writable(); export const rate = writable(); export const user = writable(); export const selectedRate = writable(); diff --git a/src/lib/upload.js b/src/lib/upload.js index 6354b7f4..0e8a2908 100644 --- a/src/lib/upload.js +++ b/src/lib/upload.js @@ -1,5 +1,5 @@ export const upload = async (file, type, progress, token) => { - console.log("FILE", file) + console.log('FILE', file); let url = `/api/upload/${type}`; let formData = new FormData(); formData.append('file', file); diff --git a/src/lib/utils.js b/src/lib/utils.js index 54e965d9..76ce5077 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -9,6 +9,17 @@ export function scroll(section) { const base = browser ? '' : env.PUBLIC_COINOS_URL; +export const g = (url, fetch, headers) => + fetch(base + url, { headers }) + .then((r) => r.text()) + .then((body) => { + try { + return JSON.parse(body); + } catch (e) { + throw new Error(body); + } + }); + export const get = (url, headers = {}) => fetch(base + url, { headers }) .then((r) => r.text()) diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index 7f6e8801..6af13a06 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -5,7 +5,8 @@ import { env } from '$env/dynamic/public'; export const { PUBLIC_BTC: btc } = env; -export async function load({ cookies, request, url, params }) { +export async function load({ cookies, locals, request, url, params }) { + url.pathname; let token = cookies.get('token'); let user; let rates; @@ -16,11 +17,7 @@ export async function load({ cookies, request, url, params }) { } if (token && token !== 'undefined') { - try { - user = await get('/me', auth(cookies)); - } catch (e) { - throw redirect(307, '/logout'); - } + user = locals.user; if (protectedRoutes.find((p) => url.pathname.match(p))) { if (user.username !== params.username) throw error(404, 'user not found'); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0064cce0..5cc75b30 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -14,7 +14,8 @@ const localeLocalStorageKey = 'sveltekit-i18n-locale'; export let data; - let r, u, token, rates; + + let r, u, token, rates; $: update(data); let update = () => { diff --git a/src/routes/[username]/dashboard/+page.server.js b/src/routes/[username]/dashboard/+page.server.js new file mode 100644 index 00000000..b6206324 --- /dev/null +++ b/src/routes/[username]/dashboard/+page.server.js @@ -0,0 +1 @@ +export const load = ({ parent }) => parent(); diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index 04a31813..8e9e6ff4 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -1,7 +1,7 @@ @@ -29,7 +32,12 @@

- Come join us at our launch party celebrating our new design and 10 years since our first commit! + Come join us at our launch party celebrating our new design and 10 years since our first commit!

When

@@ -58,7 +66,7 @@
diff --git a/src/routes/launch/purchase/+page.server.js b/src/routes/launch/purchase/+page.server.js index b9b20f28..ff5efc84 100644 --- a/src/routes/launch/purchase/+page.server.js +++ b/src/routes/launch/purchase/+page.server.js @@ -1,16 +1,18 @@ import { auth, get, post } from '$lib/utils'; import tickets from '$lib/tickets'; -import { redirect } from "@sveltejs/kit"; +import { redirect } from '@sveltejs/kit'; +import { env } from '$env/dynamic/private'; +import { invalidateAll } from '$app/navigation'; +import { browser } from '$app/environment'; export const load = async ({ parent }) => { - let p = await parent(); - let t = await get('/ticket'); - return { ...p, ...t }; + let tickets = await get('/tickets'); + return { ...(await parent()), tickets }; }; export const actions = { - internal: async ({ cookies, request, parent }) => { - let { ticket } = Object.fromEntries(await request.formData()); + internal: async ({ cookies, request }) => { + let { ticket } = await get('/ticket'); let { asset } = await post( '/assets', @@ -26,7 +28,9 @@ export const actions = { auth(cookies) ); - throw redirect(307, `/launch/thanks/${asset}`); + await post('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` }); + + throw redirect(307, `/launch/thanks/${asset}`); }, lightning: async ({ cookies, request }) => { @@ -35,10 +39,9 @@ export const actions = { let rates = await get('/rates'); let invoice = { - amount: parseInt(form.get('amount')), - tip: parseInt(form.get('tip')), + amount: 25000, network: 'lightning', - prompt: form.get('prompt') === 'true', + prompt: false, rate: rates[form.get('currency')] }; @@ -50,3 +53,17 @@ export const actions = { }, bitcoin: () => console.log('YYEAH') }; + +export async function POST({ request }) { + let { address, amount, confirmed } = await request.json(); + if (!confirmed) return; + + if (request.headers.get('x-webhook') !== env.WEBHOOK) { + throw new Error('access denied'); + } + + let username = invoices[address]; + amount = Math.round(amount / 2100); + + await post('/send', { username, asset, amount }, { authorization: `Bearer ${token}` }); +} diff --git a/src/routes/launch/purchase/+page.svelte b/src/routes/launch/purchase/+page.svelte index a7a2b51c..d31d20f0 100644 --- a/src/routes/launch/purchase/+page.svelte +++ b/src/routes/launch/purchase/+page.svelte @@ -1,21 +1,21 @@ @@ -18,7 +20,7 @@ We've minted your ticket as an NFT on the Liquid Blockchain as a proof of purchase and commemorative token. It may confer some special benefits in the future. + > as a proof of purchase and commemorative token.

diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte index acf3b7a5..229c18f0 100644 --- a/src/routes/launch/ticket/+page.svelte +++ b/src/routes/launch/ticket/+page.svelte @@ -1,5 +1,4 @@ - - + diff --git a/src/routes/login/+page.server.js b/src/routes/login/+page.server.js index 94981ff7..aa8797f9 100644 --- a/src/routes/login/+page.server.js +++ b/src/routes/login/+page.server.js @@ -4,7 +4,7 @@ import { login } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); - let { username, password, redirect: r } = form; + let { username, password, loginRedirect } = form; let user = { username, password }; try { @@ -13,6 +13,6 @@ export const actions = { return invalid(400, { error: 'Login failed' }); } - throw redirect(303, r || `/${user.username}/dashboard`); + throw redirect(303, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/register/+page.server.js b/src/routes/register/+page.server.js index bfe1a9b7..c5751d4c 100644 --- a/src/routes/register/+page.server.js +++ b/src/routes/register/+page.server.js @@ -4,7 +4,7 @@ import { post, login } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); - let { username, password, redirect: r } = form; + let { username, password, loginRedirect } = form; let user = { username, password }; let error; @@ -23,6 +23,6 @@ export const actions = { } if (error) return invalid(400, { error }); - throw redirect(307, r || `/${user.username}/dashboard`); + throw redirect(307, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/register/+page.svelte b/src/routes/register/+page.svelte index aa0e66e0..fd9e4417 100644 --- a/src/routes/register/+page.svelte +++ b/src/routes/register/+page.svelte @@ -5,9 +5,7 @@ afterNavigate(async () => { try { - console.log('whoa'); await invalidateAll(); - console.log('no'); } catch (e) { console.log(e); } -- cgit v1.2.3 From ad24f34434368d3767fd147d80d45adc3c28f106 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 18 Oct 2022 21:03:27 -0700 Subject: tickets wip --- src/lib/socket.js | 3 +- src/lib/store.js | 1 - src/routes/invoice/[id]/+page.svelte | 5 ++- src/routes/invoice/[id]/paid/+page.svelte | 2 +- src/routes/launch/+page.svelte | 33 +++++++++------ src/routes/launch/purchase/+page.server.js | 19 ++++++++- src/routes/launch/purchase/+page.svelte | 28 +++---------- src/routes/launch/ticket/+page.server.js | 9 ++++ src/routes/launch/ticket/+page.svelte | 32 +++++++++++++-- static/icons/party.svg | 64 +++++++++++++++++++++++++++++ static/images/loft.jpg | Bin 0 -> 286853 bytes 11 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 src/routes/launch/ticket/+page.server.js create mode 100644 static/icons/party.svg create mode 100644 static/images/loft.jpg (limited to 'src/lib/socket.js') diff --git a/src/lib/socket.js b/src/lib/socket.js index fb77333f..b385db9d 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -19,13 +19,14 @@ export const messages = (data) => ({ rate.set(data); }, - payment() { + async payment() { let { amount, invoice } = data; if (get(user).account_id !== data.account_id) return; if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); } + newPayment.set(true); if (amount > 0) { success(`Received ${amount} sats!`); diff --git a/src/lib/store.js b/src/lib/store.js index ffafa70b..e317ed24 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -27,7 +27,6 @@ const persistLocal = (key, defaultValue) => { return s; }; -export const invoiceRedirect = writable(); export const loginRedirect = writable(); export const rate = writable(); export const user = writable(); diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index 8e9e6ff4..cfff251e 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -1,7 +1,7 @@ +{$invoices[id]?.memo}
diff --git a/src/routes/launch/ticket/+page.server.js b/src/routes/launch/ticket/+page.server.js new file mode 100644 index 00000000..59ea966e --- /dev/null +++ b/src/routes/launch/ticket/+page.server.js @@ -0,0 +1,9 @@ +import { get } from '$lib/utils'; + +export const load = async ({ cookies, parent }) => { + let { user } = await parent(); + let tickets = await get('/tickets'); + let ticket = tickets.findIndex((t) => user.accounts.find((a) => a.asset === t)); + console.log("TICK", ticket) + return { ticket }; +}; diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte index 229c18f0..2585c57c 100644 --- a/src/routes/launch/ticket/+page.svelte +++ b/src/routes/launch/ticket/+page.svelte @@ -1,4 +1,28 @@ - + + +
+
+

+ Your Ticket +

+ + Ticket + + +
+
diff --git a/static/icons/party.svg b/static/icons/party.svg new file mode 100644 index 00000000..f33b9fc1 --- /dev/null +++ b/static/icons/party.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/loft.jpg b/static/images/loft.jpg new file mode 100644 index 00000000..39ca49ab Binary files /dev/null and b/static/images/loft.jpg differ -- cgit v1.2.3