aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-10-13 23:32:21 -0700
committerAdam Soltys <[email protected]>2022-10-13 23:33:36 -0700
commit87fc33dfa162554b540dfb640ba1c1f66f9132d2 (patch)
treedf2174a4e119113d57b04447c4f05ce8b7a64a01
parent775cfb5859d676af0c0cae8e144b6dfb06ba1caf (diff)
downloadcoinos-ui-87fc33dfa162554b540dfb640ba1c1f66f9132d2.tar.gz
coinos-ui-87fc33dfa162554b540dfb640ba1c1f66f9132d2.zip
card payments
-rw-r--r--package.json1
-rw-r--r--pnpm-lock.yaml131
-rw-r--r--src/routes/+layout.server.js1
-rw-r--r--src/routes/[username]/+page.server.js1
-rw-r--r--src/routes/launch/+page.svelte1
-rw-r--r--src/routes/pay/+page.server.js37
-rw-r--r--src/routes/pay/+page.svelte102
-rw-r--r--src/routes/user/+server.js1
8 files changed, 223 insertions, 52 deletions
diff --git a/package.json b/package.json
index 808e5761..783edda5 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,6 @@
"bip21": "^2.0.3",
"bitcoin-address-validation": "^2.2.1",
"bolt11": "^1.4.0",
- "cookie": "^0.5.0",
"date-fns": "^2.29.3",
"leaflet": "^1.9.1",
"leaflet.markercluster": "^1.5.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 644cca0e..7e9ce090 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,6 +1,7 @@
lockfileVersion: 5.4
specifiers:
+ '@stripe/stripe-js': ^1.41.0
'@sveltejs/adapter-node': next
'@sveltejs/kit': 1.0.0-next.505
'@zerodevx/svelte-toast': ^0.7.2
@@ -18,16 +19,19 @@ specifiers:
qr-code-styling: 1.6.0-rc.1
qr-scanner: ^1.4.1
screenfull: ^6.0.2
+ stripe: ^10.14.0
svelte: ^3.50.1
svelte-outclick: ^3.1.0
svelte-pincode: ^2.1.2
svelte-preprocess: ^4.10.7
+ svelte-stripe: ^0.0.19
sveltekit-i18n: ^2.2.2
tailwindcss: ^3.1.8
vite: ^3.1.4
devDependencies:
- '@sveltejs/adapter-node': 1.0.0-next.96
+ '@stripe/stripe-js': 1.41.0
+ '@sveltejs/adapter-node': 1.0.0-next.98
'@zerodevx/svelte-toast': 0.7.2
autoprefixer: [email protected]
@@ -44,10 +48,12 @@ devDependencies:
qr-code-styling: 1.6.0-rc.1
qr-scanner: 1.4.1
screenfull: 6.0.2
+ stripe: 10.14.0
svelte: 3.50.1
svelte-outclick: 3.1.0
svelte-pincode: 2.1.2
svelte-preprocess: 4.10.7_r763xggw3my2ousygwguxmp6ru
+ svelte-stripe: 0.0.19
sveltekit-i18n: [email protected]
tailwindcss: [email protected]
vite: 3.1.4
@@ -97,39 +103,48 @@ packages:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
dev: true
- /@rollup/plugin-commonjs/[email protected]:
- resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==}
- engines: {node: '>= 12.0.0'}
+ /@rollup/plugin-commonjs/[email protected]:
+ resolution: {integrity: sha512-JbrTRyDNtLQj/rhl7RFUuYXwQ2fac+33oLDAu2k++WD95zweyo28UAomLVA0JMGx4vmCa7Nw4T6k/1F6lelExg==}
+ engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^2.68.0
+ rollup: ^2.68.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
dependencies:
- '@rollup/pluginutils': [email protected]
+ '@rollup/pluginutils': 4.2.1
commondir: 1.0.1
estree-walker: 2.0.2
- glob: 7.2.3
+ glob: 8.0.3
is-reference: 1.2.1
- magic-string: 0.25.9
- resolve: 1.22.1
+ magic-string: 0.26.5
rollup: 2.79.1
dev: true
- /@rollup/plugin-json/[email protected]:
- resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==}
+ /@rollup/plugin-json/[email protected]:
+ resolution: {integrity: sha512-LsWDA5wJs/ggzakVuKQhZo7HPRcQZgBa3jWIVxQSFxaRToUGNi8ZBh3+k/gQ+1eInVYJgn4WBRCUkmoDrmmGzw==}
+ engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^1.20.0 || ^2.0.0
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
dependencies:
- '@rollup/pluginutils': [email protected]
+ '@rollup/pluginutils': 4.2.1
rollup: 2.79.1
dev: true
- /@rollup/plugin-node-resolve/[email protected]:
- resolution: {integrity: sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==}
- engines: {node: '>= 10.0.0'}
+ /@rollup/plugin-node-resolve/[email protected]:
+ resolution: {integrity: sha512-iwJbzfTzlzDDQcGmkS7EkCKwe2kSkdBrjX87Fy/KrNjr6UNnLpod0t6X66e502LRe5JJCA4FFqrEscWPnZAkig==}
+ engines: {node: '>=14.0.0'}
peerDependencies:
- rollup: ^2.78.0
+ rollup: ^2.78.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
dependencies:
- '@rollup/pluginutils': [email protected]
- '@types/resolve': 1.17.1
+ '@rollup/pluginutils': 4.2.1
+ '@types/resolve': 1.20.2
deepmerge: 4.2.2
is-builtin-module: 3.2.0
is-module: 1.0.0
@@ -137,18 +152,6 @@ packages:
rollup: 2.79.1
dev: true
- /@rollup/pluginutils/[email protected]:
- resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
- engines: {node: '>= 8.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- '@types/estree': 0.0.39
- estree-walker: 1.0.1
- picomatch: 2.3.1
- rollup: 2.79.1
- dev: true
-
/@rollup/pluginutils/4.2.1:
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
@@ -157,12 +160,16 @@ packages:
picomatch: 2.3.1
dev: true
- /@sveltejs/adapter-node/1.0.0-next.96:
- resolution: {integrity: sha512-tIHaRolUYy2PiHl4RUWaOsYxEjK5lN9501qzCzFbYr/uoLnZcnPGSXNJICwX0AX9AUkV6cvkZey6bLbUQcwH0Q==}
+ /@stripe/stripe-js/1.41.0:
+ resolution: {integrity: sha512-9cbv1CO/fF37qDiHFCxkRgSJjlIZLV0bl+m6zu4dUObRnfYq5bpczCByOvhiSWtbrKqNhYL1j+otPSogRfSqGw==}
+ dev: true
+
+ /@sveltejs/adapter-node/1.0.0-next.98:
+ resolution: {integrity: sha512-eo89sswzm3ntZJgaQzz2MneqMqBfQWQj6b8VtImlHeq2AB+RSodippmKY0RyPcIJ0hJqdDc4DubU7XMDKkoTew==}
dependencies:
- '@rollup/plugin-commonjs': [email protected]
- '@rollup/plugin-json': [email protected]
- '@rollup/plugin-node-resolve': [email protected]
+ '@rollup/plugin-commonjs': [email protected]
+ '@rollup/plugin-json': [email protected]
+ '@rollup/plugin-node-resolve': [email protected]
rollup: 2.79.1
dev: true
@@ -242,10 +249,6 @@ packages:
resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
dev: true
- /@types/estree/0.0.39:
- resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
- dev: true
-
/@types/estree/1.0.0:
resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
dev: true
@@ -262,10 +265,8 @@ packages:
resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
dev: true
- /@types/resolve/1.17.1:
- resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
- dependencies:
- '@types/node': 18.8.0
+ /@types/resolve/1.20.2:
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
dev: true
/@types/sass/1.43.1:
@@ -410,6 +411,12 @@ packages:
concat-map: 0.0.1
dev: true
+ /brace-expansion/2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
/braces/3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
@@ -826,10 +833,6 @@ packages:
engines: {node: '>=6'}
dev: true
- /estree-walker/1.0.1:
- resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
- dev: true
-
/estree-walker/2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
@@ -926,6 +929,17 @@ packages:
path-is-absolute: 1.0.1
dev: true
+ /glob/8.0.3:
+ resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.0
+ once: 1.4.0
+ dev: true
+
/globalyzer/0.1.0:
resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
dev: true
@@ -1117,6 +1131,13 @@ packages:
brace-expansion: 1.1.11
dev: true
+ /minimatch/5.1.0:
+ resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
/minimist/1.2.6:
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
dev: true
@@ -1518,6 +1539,14 @@ packages:
min-indent: 1.0.1
dev: true
+ /stripe/10.14.0:
+ resolution: {integrity: sha512-cXqUdZvrU20KElhLjzw/kW5t2SLLUENqeEftaiQXLogkUdNHyz/L12S4WHmQ8h0KHHFhxO39I7Q9GkJO1MMzzw==}
+ engines: {node: ^8.1 || >=10.*}
+ dependencies:
+ '@types/node': 18.8.0
+ qs: 6.11.0
+ dev: true
+
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -1591,6 +1620,12 @@ packages:
svelte: 3.50.1
dev: true
+ /svelte-stripe/0.0.19:
+ resolution: {integrity: sha512-Q0C/MxthhSV7TFdBTz3qsYxvbYVFsoeP42mMVrYUpizhASR7HwmF+N1YBNOCWM8Ttk/RAegY/4AqJVNHb4fDkQ==}
+ dependencies:
+ '@stripe/stripe-js': 1.41.0
+ dev: true
+
/svelte/3.50.1:
resolution: {integrity: sha512-bS4odcsdj5D5jEg6riZuMg5NKelzPtmsCbD9RG+8umU03TeNkdWnP6pqbCm0s8UQNBkqk29w/Bdubn3C+HWSwA==}
engines: {node: '>= 8'}
diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js
index 84e5ce5c..7f6e8801 100644
--- a/src/routes/+layout.server.js
+++ b/src/routes/+layout.server.js
@@ -1,5 +1,4 @@
import { error, redirect } from '@sveltejs/kit';
-import cookie from 'cookie';
import { protectedRoutes } from '$lib/utils';
import { get, post, auth } from '$lib/utils';
import { env } from '$env/dynamic/public';
diff --git a/src/routes/[username]/+page.server.js b/src/routes/[username]/+page.server.js
index d6f2978c..0840161a 100644
--- a/src/routes/[username]/+page.server.js
+++ b/src/routes/[username]/+page.server.js
@@ -1,4 +1,3 @@
-import cookie from 'cookie';
import { get, post } from '$lib/utils';
export async function load({ params }) {
diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte
index 6bd7067e..5e519eff 100644
--- a/src/routes/launch/+page.svelte
+++ b/src/routes/launch/+page.svelte
@@ -28,6 +28,7 @@
<h1 class="mb-4 text-4xl font-bold leading-none tracking-tight text-gray-800">
Coinos Launch Party!
</h1>
+
<p class="leading-normal mb-2">
Come join us at our launch party celebrating 10 years in business!
</p>
diff --git a/src/routes/pay/+page.server.js b/src/routes/pay/+page.server.js
new file mode 100644
index 00000000..1393eecc
--- /dev/null
+++ b/src/routes/pay/+page.server.js
@@ -0,0 +1,37 @@
+let stripe = 'https://api.stripe.com/v1';
+
+export const actions = {
+ default: async ({ request }) => {
+ let form = await request.formData();
+
+ let headers = new Headers();
+ headers.set(
+ 'Authorization',
+ 'Basic ' + new Buffer('sk_test_mBv5bAeAhiYSDYFZJNsDwjht:').toString('base64')
+ );
+
+ let body = new URLSearchParams({
+ 'card[number]': form.get('number'),
+ 'card[exp_month]': form.get('expiry').slice(0, 2),
+ 'card[exp_year]': form.get('expiry').slice(-2),
+ 'card[cvc]': form.get('cvc')
+ });
+
+ let method = 'POST';
+
+ let { id: source } = await fetch(`${stripe}/tokens`, { body, headers, method }).then((r) =>
+ r.json()
+ );
+
+ body = new URLSearchParams({
+ amount: 600,
+ currency: 'cad',
+ source,
+ description: 'launch ticket'
+ });
+
+ let r = await fetch(`${stripe}/charges`, { body, headers, method }).then((r) => r.json());
+
+ console.log(r);
+ }
+};
diff --git a/src/routes/pay/+page.svelte b/src/routes/pay/+page.svelte
new file mode 100644
index 00000000..3b428511
--- /dev/null
+++ b/src/routes/pay/+page.svelte
@@ -0,0 +1,102 @@
+<script>
+ let number;
+</script>
+
+<form method="POST" class="flex flex-wrap gap-3 w-full p-5">
+ <label class="relative w-full flex flex-col">
+ <span class="font-bold mb-3">Card number</span>
+ <input
+ class="rounded-md peer pl-12 pr-2 py-2 border-2 border-gray-200 placeholder-gray-300"
+ type="text"
+ name="number"
+ placeholder="0000 0000 0000"
+ />
+ <svg
+ xmlns="http://www.w3.org/2000/svg"
+ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6"
+ fill="none"
+ viewBox="0 0 24 24"
+ stroke="currentColor"
+ >
+ <path
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2"
+ d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z"
+ />
+ </svg>
+ </label>
+
+ <label class="relative flex-1 flex flex-col">
+ <span class="font-bold mb-3">Expire date</span>
+ <input
+ class="rounded-md peer pl-12 pr-2 py-2 border-2 border-gray-200 placeholder-gray-300"
+ type="text"
+ name="expiry"
+ placeholder="MM/YY"
+ />
+ <svg
+ xmlns="http://www.w3.org/2000/svg"
+ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6"
+ fill="none"
+ viewBox="0 0 24 24"
+ stroke="currentColor"
+ >
+ <path
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2"
+ d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
+ />
+ </svg>
+ </label>
+
+ <label class="relative flex-1 flex flex-col">
+ <span class="font-bold flex items-center gap-3 mb-3">
+ CVC/CVV
+ <span class="relative group">
+ <span
+ class="hidden group-hover:flex justify-center items-center px-2 py-1 text-xs absolute -right-2 transform translate-x-full -translate-y-1/2 w-max top-1/2 bg-black text-white"
+ >
+ 3-digit number on the back of your card</span
+ >
+ <svg
+ xmlns="http://www.w3.org/2000/svg"
+ class="h-4 w-4"
+ fill="none"
+ viewBox="0 0 24 24"
+ stroke="currentColor"
+ >
+ <path
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2"
+ d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
+ />
+ </svg>
+ </span>
+ </span>
+ <input
+ class="rounded-md peer pl-12 pr-2 py-2 border-2 border-gray-200 placeholder-gray-300"
+ type="text"
+ name="cvc"
+ placeholder="&bull;&bull;&bull;"
+ />
+ <svg
+ xmlns="http://www.w3.org/2000/svg"
+ class="absolute bottom-0 left-0 -mb-0.5 transform translate-x-1/2 -translate-y-1/2 text-black peer-placeholder-shown:text-gray-300 h-6 w-6"
+ fill="none"
+ viewBox="0 0 24 24"
+ stroke="currentColor"
+ >
+ <path
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2"
+ d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
+ />
+ </svg>
+ </label>
+
+ <button type="submit">Submit</button>
+</form>
diff --git a/src/routes/user/+server.js b/src/routes/user/+server.js
index c9490984..b9c37e6e 100644
--- a/src/routes/user/+server.js
+++ b/src/routes/user/+server.js
@@ -1,5 +1,4 @@
import { auth, post } from '$lib/utils';
-import cookie from 'cookie';
export async function PUT({ cookies, request }) {
let user = await request.json();