aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-17 23:29:32 -0700
committerAdam Soltys <[email protected]>2022-10-17 23:29:32 -0700
commit02af363d2f0d552a72dc1c90bf8d785e04465d3a (patch)
tree03fe0719e4c623cf6d6b649c0867b910b6db5199 /src/routes
parent5e3d4133760962db28c4f3a595f0566bd59391ff (diff)
downloadcoinos-ui-02af363d2f0d552a72dc1c90bf8d785e04465d3a.tar.gz
coinos-ui-02af363d2f0d552a72dc1c90bf8d785e04465d3a.zip
invoice redirect
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/+layout.server.js9
-rw-r--r--src/routes/+layout.svelte3
-rw-r--r--src/routes/[username]/dashboard/+page.server.js1
-rw-r--r--src/routes/invoice/[id]/+page.svelte6
-rw-r--r--src/routes/launch/+page.server.js6
-rw-r--r--src/routes/launch/+page.svelte22
-rw-r--r--src/routes/launch/purchase/+page.server.js37
-rw-r--r--src/routes/launch/purchase/+page.svelte16
-rw-r--r--src/routes/launch/purchase/card/+page.server.js7
-rw-r--r--src/routes/launch/purchase/card/+page.svelte18
-rw-r--r--src/routes/launch/thanks/[asset]/+page.server.js1
-rw-r--r--src/routes/launch/thanks/[asset]/+page.svelte4
-rw-r--r--src/routes/launch/ticket/+page.svelte9
-rw-r--r--src/routes/login/+page.server.js4
-rw-r--r--src/routes/register/+page.server.js4
-rw-r--r--src/routes/register/+page.svelte2
16 files changed, 91 insertions, 58 deletions
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 @@
<script>
import { copy, f, get, reverseFormat, s, sats } from '$lib/utils';
import { browser } from '$app/environment';
- import { invoices } from '$lib/store';
+ import { invoices, invoiceRedirect } from '$lib/store';
import { Icon, Heart, Image, Qr, Tip } from '$comp';
import { goto } from '$app/navigation';
import { t } from '$lib/translations';
@@ -44,7 +44,9 @@
$: tip = Math.round((amount / 100) * tipPercent);
$invoices[id] = { amount, id, rate, received, text, tip, username };
- $: browser && $invoices[id]?.received >= $invoices[id]?.amount && goto(`/invoice/${id}/paid`);
+ $: browser &&
+ $invoices[id]?.received >= $invoices[id]?.amount &&
+ goto($invoiceRedirect || `/invoice/${id}/paid`);
$: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2));
diff --git a/src/routes/launch/+page.server.js b/src/routes/launch/+page.server.js
new file mode 100644
index 00000000..2b44dfae
--- /dev/null
+++ b/src/routes/launch/+page.server.js
@@ -0,0 +1,6 @@
+import { auth, get } from '$lib/utils';
+
+export const load = async ({ parent }) => {
+ let tickets = await get('/tickets');
+ return { ...(await parent()), tickets };
+};
diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte
index 74638257..843c7705 100644
--- a/src/routes/launch/+page.svelte
+++ b/src/routes/launch/+page.svelte
@@ -1,15 +1,18 @@
<script>
- import { redirect } from '$lib/store';
+ import { loginRedirect } from '$lib/store';
import { beforeNavigate } from '$app/navigation';
import { info } from '$lib/utils';
export let data;
- let { user } = data;
- $: link = user ? '/launch/purchase' : '/register';
- $redirect = '/launch/purchase';
+ let { user, tickets } = data;
+ $loginRedirect = '/launch/purchase';
+
+ let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset));
+ $: link = user ? $loginRedirect : '/register';
+ $: text = (hasTicket ? 'View' : 'Purchase') + ' Ticket';
beforeNavigate(({ to }) => {
- if (to.routeId === 'register') info('Please sign in so we can get you a ticket');
+ if (to?.routeId === 'register') info('Please sign in so we can get you a ticket');
});
</script>
@@ -29,7 +32,12 @@
</h1>
<p class="leading-normal mb-2">
- Come join us at our launch party celebrating our new design and 10 years since our <a href="https://github.com/coinos/coinos-server/commit/b25d11b" class="underline" target="_blank">first commit</a>!
+ Come join us at our launch party celebrating our new design and 10 years since our <a
+ href="https://github.com/coinos/coinos-server/commit/b25d11b"
+ class="underline"
+ target="_blank"
+ rel="noreferrer">first commit</a
+ >!
</p>
<div class="ml-8">
<p><b>When</b></p>
@@ -58,7 +66,7 @@
<button
class="bg-white text-black border rounded-full px-8 py-4 font-bold hover:opacity-80 text-2xl"
>
- Purchase Ticket
+ {text}
</button>
</a>
</div>
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 @@
<script>
import { enhance } from '$app/forms';
- import { selectedRate } from '$lib/store';
+ import { invoiceRedirect, selectedRate } from '$lib/store';
import { post } from '$lib/utils';
import { goto } from '$app/navigation';
export let data;
- export let form;
let amount = 25000;
let {
address,
- currency,
+ currency,
account: { balance },
username
} = data.user;
- let { ticket } = data;
+ let { tickets } = data;
+ let ticket = tickets.length;
let invoice;
let get = async (network) => {
@@ -26,6 +26,7 @@
username
});
+ $invoiceRedirect = '/launch/purchase';
goto(`/invoice/${uuid}`);
};
@@ -38,12 +39,13 @@
<div class="mx-auto h-screen flex items-center justify-center px-4">
<div class="font-normal text-gray-800 mx-auto mb-8 space-y-8">
<h1 class="mb-4 text-4xl font-bold leading-none tracking-tight text-gray-800 text-center">
- Confirm Purchase
+ Confirm Purchase
</h1>
<img
src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
class="w-full max-w-[800px]"
+ alt="Ticket"
/>
{#if balance > amount}
@@ -63,8 +65,8 @@
</h1>
<form action="?/lightning" method="POST">
- <input type="hidden" name="currency" value={currency} />
- <input type="hidden" name="username" value={username} />
+ <input type="hidden" name="currency" value={currency} />
+ <input type="hidden" name="username" value={username} />
<button
class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
>
diff --git a/src/routes/launch/purchase/card/+page.server.js b/src/routes/launch/purchase/card/+page.server.js
index 1393eecc..eaa8d5f3 100644
--- a/src/routes/launch/purchase/card/+page.server.js
+++ b/src/routes/launch/purchase/card/+page.server.js
@@ -1,3 +1,5 @@
+import { env } from '$env/dynamic/private';
+
let stripe = 'https://api.stripe.com/v1';
export const actions = {
@@ -5,10 +7,7 @@ export const actions = {
let form = await request.formData();
let headers = new Headers();
- headers.set(
- 'Authorization',
- 'Basic ' + new Buffer('sk_test_mBv5bAeAhiYSDYFZJNsDwjht:').toString('base64')
- );
+ headers.set('Authorization', 'Basic ' + new Buffer(env.STRIPE + ':').toString('base64'));
let body = new URLSearchParams({
'card[number]': form.get('number'),
diff --git a/src/routes/launch/purchase/card/+page.svelte b/src/routes/launch/purchase/card/+page.svelte
index 73f2d880..79240078 100644
--- a/src/routes/launch/purchase/card/+page.svelte
+++ b/src/routes/launch/purchase/card/+page.svelte
@@ -9,7 +9,7 @@
type="text"
name="number"
placeholder="0000 0000 0000"
- value="4242424242424242"
+ value="4242424242424242"
/>
<svg
xmlns="http://www.w3.org/2000/svg"
@@ -34,7 +34,7 @@
type="text"
name="expiry"
placeholder="MM/YY"
- value="0123"
+ value="0123"
/>
<svg
xmlns="http://www.w3.org/2000/svg"
@@ -82,7 +82,7 @@
type="text"
name="cvc"
placeholder="&bull;&bull;&bull;"
- value="123"
+ value="123"
/>
<svg
xmlns="http://www.w3.org/2000/svg"
@@ -100,10 +100,10 @@
</svg>
</label>
- <div class="w-full flex">
- <button
-
- class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
- type="submit">Submit</button>
- </div>
+ <div class="w-full flex">
+ <button
+ class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl"
+ type="submit">Submit</button
+ >
+ </div>
</form>
diff --git a/src/routes/launch/thanks/[asset]/+page.server.js b/src/routes/launch/thanks/[asset]/+page.server.js
new file mode 100644
index 00000000..e9e01376
--- /dev/null
+++ b/src/routes/launch/thanks/[asset]/+page.server.js
@@ -0,0 +1 @@
+// export const load = ({ parent }) => parent();
diff --git a/src/routes/launch/thanks/[asset]/+page.svelte b/src/routes/launch/thanks/[asset]/+page.svelte
index 6cf0915f..4f0ec3bb 100644
--- a/src/routes/launch/thanks/[asset]/+page.svelte
+++ b/src/routes/launch/thanks/[asset]/+page.svelte
@@ -2,7 +2,9 @@
import { page } from '$app/stores';
export let data;
+
let { user } = data;
+
let { asset } = $page.params;
</script>
@@ -18,7 +20,7 @@
We've minted your ticket as an <a
href={`https://blockstream.info/liquid/asset/${asset}`}
class="underline">NFT on the Liquid Blockchain</a
- > 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.
</p>
</div>
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 @@
-
- <img
- src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
- class="w-full max-w-[800px]"
- />
+<img
+ src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`}
+ class="w-full max-w-[800px]"
+/>
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);
}