aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/launch
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/launch')
-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
9 files changed, 77 insertions, 43 deletions
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]"
+/>