From b7571e82c8c2e52ecf8565cfb2ab99a7620673ad Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 18 Oct 2022 21:58:17 -0700 Subject: handle card payment --- src/routes/launch/purchase/+page.server.js | 49 +------ src/routes/launch/purchase/+page.svelte | 44 +++--- src/routes/launch/purchase/card/+page.server.js | 16 ++- src/routes/launch/purchase/card/+page.svelte | 169 ++++++++++-------------- src/routes/launch/ticket/+page.server.js | 1 - 5 files changed, 104 insertions(+), 175 deletions(-) (limited to 'src/routes/launch') diff --git a/src/routes/launch/purchase/+page.server.js b/src/routes/launch/purchase/+page.server.js index 3317b420..8568c0e7 100644 --- a/src/routes/launch/purchase/+page.server.js +++ b/src/routes/launch/purchase/+page.server.js @@ -4,45 +4,21 @@ import { redirect } from '@sveltejs/kit'; import { env } from '$env/dynamic/private'; import { invalidateAll } from '$app/navigation'; import { browser } from '$app/environment'; +import { createTicket } from '$lib/ticket'; export const load = async ({ parent }) => { let tickets = await get('/tickets'); let { user } = await parent(); let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset)); - if (hasTicket) throw redirect(307, '/launch/ticket'); + if (hasTicket) throw redirect(307, '/launch/ticket'); return { tickets }; }; export const actions = { internal: async ({ cookies, request }) => { let form = await request.formData(); - let username = form.get('username'); - - let { address } = await post( - '/invoice', - { invoice: { network: 'liquid' }, user: { username } }, - auth(cookies) - ); - - let { ticket } = await get('/ticket'); - - let { asset } = await post( - '/assets', - { - address, - name: `Launch Party Ticket ${ticket}`, - ticker: 'LPT', - precision: 0, - asset_amount: '1', - token_amount: 0, - domain: 'coinos.io', - filename: tickets[ticket] - }, - { authorization: `Bearer ${env.LAUNCH}` } - ); - - await post('/send', { amount: 25000, username: 'launch' }, auth(cookies)); - await post('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` }); + await createTicket(cookies, form.get('username')); + await post('/send', { amount: 22000, username: 'launch' }, auth(cookies)); throw redirect(307, `/launch/thanks/${asset}`); }, @@ -53,7 +29,7 @@ export const actions = { let rates = await get('/rates'); let invoice = { - amount: 25000, + amount: 22000, memo: 'launch', network: 'lightning', prompt: false, @@ -66,19 +42,4 @@ export const actions = { throw redirect(307, `/invoice/${uuid}`); }, - 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 d78b95d2..3273752a 100644 --- a/src/routes/launch/purchase/+page.svelte +++ b/src/routes/launch/purchase/+page.svelte @@ -7,7 +7,7 @@ export let data; - let amount = 25000; + let amount = 22000; let { currency, account: { balance }, @@ -21,7 +21,7 @@

- Confirm Purchase + Purchase Ticket

{:else} -

+

Payment Options

-
- - - -
- -
- -
+
+
+ + + +
- - - + + + +
{/if}
diff --git a/src/routes/launch/purchase/card/+page.server.js b/src/routes/launch/purchase/card/+page.server.js index eaa8d5f3..34a2a8e1 100644 --- a/src/routes/launch/purchase/card/+page.server.js +++ b/src/routes/launch/purchase/card/+page.server.js @@ -1,16 +1,19 @@ import { env } from '$env/dynamic/private'; +import { error, redirect } from '@sveltejs/kit'; +import { post, auth } from '$lib/utils'; +import { createTicket } from "$lib/ticket"; let stripe = 'https://api.stripe.com/v1'; export const actions = { - default: async ({ request }) => { + default: async ({ cookies, request }) => { let form = await request.formData(); let headers = new Headers(); headers.set('Authorization', 'Basic ' + new Buffer(env.STRIPE + ':').toString('base64')); let body = new URLSearchParams({ - 'card[number]': form.get('number'), + 'card[number]': form.get('number').replace(/\s+/g, ''), 'card[exp_month]': form.get('expiry').slice(0, 2), 'card[exp_year]': form.get('expiry').slice(-2), 'card[cvc]': form.get('cvc') @@ -29,8 +32,13 @@ export const actions = { description: 'launch ticket' }); - let r = await fetch(`${stripe}/charges`, { body, headers, method }).then((r) => r.json()); + let { status } = await fetch(`${stripe}/charges`, { body, headers, method }).then((r) => + r.json() + ); + + if (status !== 'succeeded') throw error(500, { message: 'Card payment failed' }); + let asset = await createTicket(cookies, form.get('username')); - console.log(r); + throw redirect(307, `/launch/thanks/${asset}`); } }; diff --git a/src/routes/launch/purchase/card/+page.svelte b/src/routes/launch/purchase/card/+page.svelte index 79240078..2ab5fb86 100644 --- a/src/routes/launch/purchase/card/+page.svelte +++ b/src/routes/launch/purchase/card/+page.svelte @@ -1,109 +1,80 @@ -
- + + - + + - + + -
- -
- +
+ +
+ + diff --git a/src/routes/launch/ticket/+page.server.js b/src/routes/launch/ticket/+page.server.js index 59ea966e..054a88be 100644 --- a/src/routes/launch/ticket/+page.server.js +++ b/src/routes/launch/ticket/+page.server.js @@ -4,6 +4,5 @@ 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 }; }; -- cgit v1.2.3