From 059613490db9be904791686c49851ec1cc095774 Mon Sep 17 00:00:00 2001
From: Adam Soltys
Date: Tue, 26 Jul 2022 21:06:01 -0700
Subject: register endpoint
---
src/lib/socket.js | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
(limited to 'src/lib/socket.js')
diff --git a/src/lib/socket.js b/src/lib/socket.js
index efc2651b..9d0c472e 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -1,8 +1,17 @@
-import { get } from "svelte/store";
-import { rate, user, token, ws } from '$lib/store';
+import { get } from 'svelte/store';
+import { rate, user, token } from '$lib/store';
let interval, socket;
+export const auth = () => {
+ let t = get(token);
+ if (t) send('login', t);
+};
+
+export const send = (type, data) => {
+ socket?.readyState === 1 && socket.send(JSON.stringify({ type, data }));
+};
+
export const messages = (data) => ({
rate() {
rate.set(data);
@@ -12,9 +21,7 @@ export const messages = (data) => ({
console.log(data);
},
- connected() {
- socket.send(JSON.stringify({ type: 'login', data: { token: get(token) } }));
- },
+ connected: auth,
login() {
user.set(data);
@@ -29,18 +36,14 @@ let currentReconnectDelay = initialReconnectDelay;
export function connect() {
clearInterval(interval);
- if (socket) socket.close();
+ if (socket) return auth();
+
socket = new WebSocket('ws://localhost:3119/ws');
socket.addEventListener('open', onWebsocketOpen);
socket.addEventListener('close', onWebsocketClose);
socket.addEventListener('message', onWebsocketMessage);
- interval = setInterval(
- () => socket.readyState === 1 && socket.send(JSON.stringify({ type: 'heartbeat' })),
- 5000
- );
-
- ws.set(socket);
+ interval = setInterval(() => send('heartbeat'), 5000);
}
function onWebsocketMessage(msg) {
@@ -53,7 +56,7 @@ function onWebsocketOpen() {
}
function onWebsocketClose() {
- ws.set(null);
+ socket = null;
setTimeout(() => {
reconnectToWebsocket();
}, currentReconnectDelay + Math.floor(Math.random() * 3000));
--
cgit v1.2.3
From cd9e850f9e15e890727026942d646d59f526fe4e Mon Sep 17 00:00:00 2001
From: Adam Soltys
Date: Tue, 26 Jul 2022 23:37:18 -0700
Subject: fix invoice endpoint
---
src/lib/socket.js | 1 +
src/lib/utils.js | 2 +-
src/routes/invoice.js | 15 +++------------
3 files changed, 5 insertions(+), 13 deletions(-)
(limited to 'src/lib/socket.js')
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 9d0c472e..90238c23 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -24,6 +24,7 @@ export const messages = (data) => ({
connected: auth,
login() {
+ console.log("OY", data)
user.set(data);
}
});
diff --git a/src/lib/utils.js b/src/lib/utils.js
index 5b1bba7f..c17b0a98 100644
--- a/src/lib/utils.js
+++ b/src/lib/utils.js
@@ -11,4 +11,4 @@ export const post = (url, body) =>
method: 'POST',
body: JSON.stringify(body),
headers: { accept: 'application/json', 'content-type': 'application/json' }
- }).then((r) => r.json);
+ }).then((r) => r.json());
diff --git a/src/routes/invoice.js b/src/routes/invoice.js
index 147da2b7..4b3327f6 100644
--- a/src/routes/invoice.js
+++ b/src/routes/invoice.js
@@ -1,21 +1,12 @@
-import got from 'got';
+import { post } from '$lib/utils';
import { invoiceAmount } from '$lib/store';
const username = 'bob',
network = 'lightning';
export async function GET({ params }) {
- let text = await got
- .post('http://localhost:3119/lightning/invoice', {
- json: { amount: invoiceAmount }
- })
- .text();
-
- await got
- .post('http://localhost:3119/invoice', {
- json: { invoice: { text, network }, user: { username } }
- })
- .json();
+ let { text } = await post('/lightning/invoice', { amount: invoiceAmount });
+ await post('/invoice', { invoice: { text, network }, user: { username } });
return { body: { text } };
}
--
cgit v1.2.3
From bcb252eb0b52f64449dad295595fdaa5e80cb5dc Mon Sep 17 00:00:00 2001
From: secondl1ght <85003930+secondl1ght@users.noreply.github.com>
Date: Thu, 28 Jul 2022 22:17:58 -0600
Subject: final adjustments for numpad
---
src/components/RegisterOrLogin.svelte | 4 +++-
src/lib/socket.js | 2 +-
src/routes/receive.svelte | 10 ++++++++--
3 files changed, 12 insertions(+), 4 deletions(-)
(limited to 'src/lib/socket.js')
diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte
index db577911..6cae8b5a 100644
--- a/src/components/RegisterOrLogin.svelte
+++ b/src/components/RegisterOrLogin.svelte
@@ -77,7 +77,9 @@
{:else}
{/if}
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 90238c23..087addf9 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -24,7 +24,7 @@ export const messages = (data) => ({
connected: auth,
login() {
- console.log("OY", data)
+ console.log('OY', data);
user.set(data);
}
});
diff --git a/src/routes/receive.svelte b/src/routes/receive.svelte
index a67b0787..338bc06c 100644
--- a/src/routes/receive.svelte
+++ b/src/routes/receive.svelte
@@ -32,6 +32,8 @@
if (useFiat) {
if (amountFiat === 0 && value !== '.' && value !== '<' && value !== '0') {
amountFiat = value;
+ } else if ((amountFiat === 0 || amountFiat === '0') && value === '0') {
+ return;
} else if (amountFiat === 0 && value === '.') {
amountFiat = '0.';
} else if (amountFiat !== 0 && amountFiat.includes('.') && value === '.') {
@@ -41,6 +43,7 @@
amountFiat = amountFiat.slice(0, amountFiat.length - 1);
if (amountFiat.length === 0) {
amountFiat = 0;
+ amountSats = 0;
}
}
} else if (value !== '.' && value !== '<' && parseInt(amountFiat + value) > $rate) {
@@ -92,7 +95,10 @@
if (useFiat) {
amountSats = (amountFiat / ($rate / 100000000)).toFixed(0).toString();
} else {
- amountFiat = (amountSats * ($rate / 100000000)).toFixed(2).toString();
+ amountFiat =
+ (amountSats * ($rate / 100000000)).toFixed(2) > 0.0
+ ? (amountSats * ($rate / 100000000)).toFixed(2).toString()
+ : 0;
}
useFiat = !useFiat;
}}>
{/if}
--
cgit v1.2.3
From 49e7185efd45add123e0dbfcab077772b5ff22f6 Mon Sep 17 00:00:00 2001
From: Adam Soltys
Date: Thu, 28 Jul 2022 21:22:25 -0700
Subject: save token in cookie
---
package.json | 1 +
pnpm-lock.yaml | 7 +++++++
src/components/RegisterOrLogin.svelte | 4 +++-
src/hooks/index.js | 16 ++++++++++++++++
src/lib/socket.js | 1 -
src/lib/store.js | 18 ++++++++++++++++--
src/routes/__layout.svelte | 4 ++++
src/routes/login.js | 21 ++++++++++++++++++++-
8 files changed, 67 insertions(+), 5 deletions(-)
create mode 100644 src/hooks/index.js
(limited to 'src/lib/socket.js')
diff --git a/package.json b/package.json
index 6d3ad58a..23bb6cb6 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@sveltejs/adapter-auto": "next",
"@sveltejs/kit": "next",
"autoprefixer": "^10.4.7",
+ "cookie": "^0.5.0",
"postcss": "^8.4.14",
"prettier": "^2.7.1",
"prettier-plugin-svelte": "^2.7.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72a53df0..9c34207f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,6 +4,7 @@ specifiers:
'@sveltejs/adapter-auto': next
'@sveltejs/kit': next
autoprefixer: ^10.4.7
+ cookie: ^0.5.0
postcss: ^8.4.14
prettier: ^2.7.1
prettier-plugin-svelte: ^2.7.0
@@ -16,6 +17,7 @@ devDependencies:
'@sveltejs/adapter-auto': 1.0.0-next.64
'@sveltejs/kit': 1.0.0-next.396_svelte@3.49.0+vite@3.0.3
autoprefixer: 10.4.7_postcss@8.4.14
+ cookie: 0.5.0
postcss: 8.4.14
prettier: 2.7.1
prettier-plugin-svelte: 2.7.0_o3ioganyptcsrh6x4hnxvjkpqi
@@ -371,6 +373,11 @@ packages:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
dev: true
+ /cookie/0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/cssesc/3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte
index 6cae8b5a..2334741d 100644
--- a/src/components/RegisterOrLogin.svelte
+++ b/src/components/RegisterOrLogin.svelte
@@ -7,7 +7,7 @@
export let page;
- let username, password;
+ let username = "bob", password = "pw";
let revealPassword = false;
@@ -20,6 +20,7 @@
let r = await post(url, { username, password });
if (!r.token) r = await post('/login', { username, password });
$token = r.token;
+ console.log("new token", r.token)
auth();
goto('/receive');
};
@@ -42,6 +43,7 @@
required
class="bg-primary p-4 rounded-2xl w-full"
bind:value={username}
+ autofocus
/>
diff --git a/src/hooks/index.js b/src/hooks/index.js
new file mode 100644
index 00000000..21e56052
--- /dev/null
+++ b/src/hooks/index.js
@@ -0,0 +1,16 @@
+import cookie from "cookie";
+export async function handle({ event, resolve }) {
+ let { request: { headers },
+ } = event;
+
+ const cookies = cookie.parse(headers.get("cookie") || "");
+ let { token } = cookies;
+ event.locals = { token };
+
+ return resolve(event);
+}
+
+
+export const getSession = ({ locals: { token } }) => {
+ return { token };
+};
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 087addf9..9d0c472e 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -24,7 +24,6 @@ export const messages = (data) => ({
connected: auth,
login() {
- console.log('OY', data);
user.set(data);
}
});
diff --git a/src/lib/store.js b/src/lib/store.js
index 7b510748..62232f9d 100644
--- a/src/lib/store.js
+++ b/src/lib/store.js
@@ -1,6 +1,20 @@
-import { writable } from 'svelte/store';
+import { get, writable } from 'svelte/store';
+import { browser } from '$app/env';
+
+const persisted = (k, i) => {
+ let s = writable(
+ browser && sessionStorage.getItem(k) && sessionStorage.getItem(k) !== 'undefined'
+ ? JSON.parse(sessionStorage.getItem(k))
+ : i
+ );
+
+ s.subscribe((v) => browser && sessionStorage.setItem(k, JSON.stringify(v))
+ );
+
+ return s;
+};
export const rate = writable();
export const user = writable();
export const invoiceAmount = writable();
-export const token = writable();
+export const token = persisted('token');
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index f5576edd..1af9679a 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -2,7 +2,11 @@
import '../app.css';
import { onMount } from 'svelte';
import { connect } from '$lib/socket';
+ import { token } from "$lib/store";
+ import { session } from "$app/stores";
+ import { browser } from "$app/env";
+ browser && ($token ||= $session.token);
onMount(connect);
diff --git a/src/routes/login.js b/src/routes/login.js
index 771de9e1..db1fbb6c 100644
--- a/src/routes/login.js
+++ b/src/routes/login.js
@@ -1,5 +1,24 @@
import { post } from '$lib/utils';
+import cookie from 'cookie';
+
+let maxAge = 30 * 24 * 60 * 60;
export async function POST({ request }) {
- return { body: await post('/login', await request.json()) };
+ let body = await post('/login', await request.json());
+
+ let expires = new Date();
+ expires.setSeconds(expires.getSeconds() + maxAge);
+
+ return {
+ body,
+ headers: {
+ 'set-cookie': cookie.serialize('token', body.token, {
+ httpOnly: true,
+ maxAge,
+ sameSite: 'lax',
+ path: '/',
+ expires
+ })
+ }
+ };
}
--
cgit v1.2.3
From 8acc59a86b6ec049dfe07f92fd19eeda726136f3 Mon Sep 17 00:00:00 2001
From: Adam Soltys
Date: Sat, 30 Jul 2022 09:47:08 -0700
Subject: logout function
---
src/components/AppHeader.svelte | 4 +++-
src/components/RegisterOrLogin.svelte | 4 ++--
src/lib/socket.js | 4 ++++
src/routes/[...path].svelte | 16 ----------------
src/routes/[username].js | 3 +++
src/routes/[username].svelte | 27 +++++++++++++++++++++++++++
src/routes/__layout.svelte | 23 +++++++++++++++++++----
src/routes/logout/done.svelte | 13 +++++++++++++
src/routes/logout/index.js | 26 ++++++++++++++++++++++++++
src/routes/logout/index.svelte | 10 ++++++++++
src/routes/receive.svelte | 4 ----
static/icons/logout.svg | 3 +++
12 files changed, 110 insertions(+), 27 deletions(-)
delete mode 100644 src/routes/[...path].svelte
create mode 100644 src/routes/[username].js
create mode 100644 src/routes/[username].svelte
create mode 100644 src/routes/logout/done.svelte
create mode 100644 src/routes/logout/index.js
create mode 100644 src/routes/logout/index.svelte
create mode 100644 static/icons/logout.svg
(limited to 'src/lib/socket.js')
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte
index 6376e27f..b096f01e 100644
--- a/src/components/AppHeader.svelte
+++ b/src/components/AppHeader.svelte
@@ -14,9 +14,11 @@
-
+
+
+
+
-
+ >
+
-
+
+
(showMenu = !showMenu)}
+ >
+
+
+
+ {#each menuButtons as button}
+ -
+ handleMenuItemClick(button.goto)}
+ > {button.title}
+
+
+ {/each}
+
+
+
+
+
diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte
index 4da9a17e..927c8749 100644
--- a/src/components/LandingHeader.svelte
+++ b/src/components/LandingHeader.svelte
@@ -2,6 +2,7 @@
import { goto } from '$app/navigation';
import { scroll } from '$lib/utils';
import { Icon } from '$comp';
+ import { user } from '$lib/store';
export let howItWorks;
export let faq;
@@ -17,15 +18,24 @@
scroll(howItWorks)}>How It Works
scroll(faq)}>FAQ
About
- goto('/register')}
- >Start in Seconds
- goto('/login')}
- >
- Sign in
-
+ {#if !$user}
+ goto('/register')}
+ >Start in Seconds
+ goto('/login')}
+ >
+ Sign in
+
+ {:else}
+ goto('/logout')}
+ >
+ Sign out
+
+ {/if}
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 36d41ea8..c7c541e1 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -18,7 +18,7 @@ export const messages = (data) => ({
},
payment() {
- console.log(data);
+ console.log(data, 'payment');
},
connected: auth,
diff --git a/src/routes/[username]/customers.svelte b/src/routes/[username]/customers.svelte
new file mode 100644
index 00000000..1935b156
--- /dev/null
+++ b/src/routes/[username]/customers.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/routes/[username]/dashboard.svelte b/src/routes/[username]/dashboard.svelte
new file mode 100644
index 00000000..1935b156
--- /dev/null
+++ b/src/routes/[username]/dashboard.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/routes/[username]/settings.svelte b/src/routes/[username]/settings.svelte
new file mode 100644
index 00000000..1935b156
--- /dev/null
+++ b/src/routes/[username]/settings.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/routes/[username]/support.svelte b/src/routes/[username]/support.svelte
new file mode 100644
index 00000000..1935b156
--- /dev/null
+++ b/src/routes/[username]/support.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/routes/[username]/transactions.svelte b/src/routes/[username]/transactions.svelte
new file mode 100644
index 00000000..1935b156
--- /dev/null
+++ b/src/routes/[username]/transactions.svelte
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index d26ccfed..736f38e8 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -18,7 +18,7 @@
if (protectedRoutes.find((p) => $page.url.pathname.match(p))) {
if (!$token) {
goto('/login');
- toast.push('Please login to continue.');
+ toast.push('Please sign in to continue.');
}
user.subscribe((u) => (ready = true));
} else {
diff --git a/static/icons/customers.svg b/static/icons/customers.svg
new file mode 100644
index 00000000..0b6081ba
--- /dev/null
+++ b/static/icons/customers.svg
@@ -0,0 +1,3 @@
+
diff --git a/static/icons/dash.svg b/static/icons/dash.svg
new file mode 100644
index 00000000..acb39ab9
--- /dev/null
+++ b/static/icons/dash.svg
@@ -0,0 +1,3 @@
+
diff --git a/static/icons/logout.svg b/static/icons/logout.svg
index 495d6574..a614cfc0 100644
--- a/static/icons/logout.svg
+++ b/static/icons/logout.svg
@@ -1,3 +1,3 @@
-