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/components/Calendar.svelte | 15 +++ src/components/Card.svelte | 14 ++ src/components/Lock.svelte | 14 ++ src/components/index.js | 3 + src/lib/ticket.js | 31 +++++ src/routes/invoice/[id]/+page.svelte | 1 - 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 - 11 files changed, 181 insertions(+), 176 deletions(-) create mode 100644 src/components/Calendar.svelte create mode 100644 src/components/Card.svelte create mode 100644 src/components/Lock.svelte create mode 100644 src/lib/ticket.js (limited to 'src') diff --git a/src/components/Calendar.svelte b/src/components/Calendar.svelte new file mode 100644 index 00000000..ce1841f3 --- /dev/null +++ b/src/components/Calendar.svelte @@ -0,0 +1,15 @@ + + + + diff --git a/src/components/Card.svelte b/src/components/Card.svelte new file mode 100644 index 00000000..44ab635f --- /dev/null +++ b/src/components/Card.svelte @@ -0,0 +1,14 @@ + + + diff --git a/src/components/Lock.svelte b/src/components/Lock.svelte new file mode 100644 index 00000000..11475acf --- /dev/null +++ b/src/components/Lock.svelte @@ -0,0 +1,14 @@ + + + diff --git a/src/components/index.js b/src/components/index.js index 08ec217a..d0af4c38 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,3 +1,6 @@ +export { default as Card } from './Card.svelte'; +export { default as Lock } from './Lock.svelte'; +export { default as Calendar } from './Calendar.svelte'; export { default as Avatar } from './Avatar.svelte'; export { default as Left } from './Left.svelte'; export { default as Numpad } from './Numpad.svelte'; diff --git a/src/lib/ticket.js b/src/lib/ticket.js new file mode 100644 index 00000000..4d342d28 --- /dev/null +++ b/src/lib/ticket.js @@ -0,0 +1,31 @@ +import { auth, get, post } from '$lib/utils'; +import { env } from '$env/dynamic/private'; +import tickets from '$lib/tickets'; + +export const createTicket = async (cookies, username) => { + let { ticket } = await get('/ticket'); + + let { address } = await post( + '/invoice', + { invoice: { network: 'liquid' }, user: { username } }, + auth(cookies) + ); + + 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('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` }); + return asset; +}; diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index cfff251e..84b03593 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -55,7 +55,6 @@ $: invoiceAmountFiatFormatted = f(amountFiat, currency); -{$invoices[id]?.memo}
- - -
- -
+
+
+ + + +
- - - + + + +
{/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