From 1b7cc6d64fb2ee3340a18d0924c4b64afabbc1e1 Mon Sep 17 00:00:00 2001
From: Adam Soltys
Date: Fri, 6 Sep 2024 09:32:53 -0700
Subject: per account payment pages
---
src/routes/(app)/[username]/(profile)/+page.svelte | 4 +-
.../payments/[...page]/+page.server.ts | 26 ++
.../[...account]/payments/[...page]/+page.svelte | 315 +++++++++++++++++++++
.../[...account]/payments/[...page]/+server.ts | 18 ++
.../receive/[...param]/+page.server.ts | 22 ++
.../[...account]/receive/[...param]/+page.svelte | 116 ++++++++
.../(app)/[username]/account/setup/+page.svelte | 4 +-
.../[username]/account/setup/step2/+page.svelte | 15 +-
.../(app)/[username]/invoice/[id]/+page.svelte | 89 +++---
.../[username]/payments/[...page]/+page.server.ts | 26 --
.../[username]/payments/[...page]/+page.svelte | 315 ---------------------
.../(app)/[username]/payments/[...page]/+server.ts | 18 --
.../[username]/receive/[...param]/+page.server.ts | 20 --
.../[username]/receive/[...param]/+page.svelte | 116 --------
14 files changed, 546 insertions(+), 558 deletions(-)
create mode 100644 src/routes/(app)/[username]/[...account]/payments/[...page]/+page.server.ts
create mode 100644 src/routes/(app)/[username]/[...account]/payments/[...page]/+page.svelte
create mode 100644 src/routes/(app)/[username]/[...account]/payments/[...page]/+server.ts
create mode 100644 src/routes/(app)/[username]/[...account]/receive/[...param]/+page.server.ts
create mode 100644 src/routes/(app)/[username]/[...account]/receive/[...param]/+page.svelte
delete mode 100644 src/routes/(app)/[username]/payments/[...page]/+page.server.ts
delete mode 100644 src/routes/(app)/[username]/payments/[...page]/+page.svelte
delete mode 100644 src/routes/(app)/[username]/payments/[...page]/+server.ts
delete mode 100644 src/routes/(app)/[username]/receive/[...param]/+page.server.ts
delete mode 100644 src/routes/(app)/[username]/receive/[...param]/+page.svelte
(limited to 'src/routes/(app)')
diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte
index afb4e58c..7c0de9d8 100644
--- a/src/routes/(app)/[username]/(profile)/+page.svelte
+++ b/src/routes/(app)/[username]/(profile)/+page.svelte
@@ -23,11 +23,11 @@
$installPrompt = null;
};
- user.savings = 0;
+ if (user) user.savings = 0;
let accounts = [
{ balance: user.balance, setup: true, type: "Cash" },
- { balance: user.savings, setup: false, type: "Savings" },
+ { id: "pubtest", balance: user.savings, setup: !!user.seed, type: "Savings" },
];
diff --git a/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.server.ts b/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.server.ts
new file mode 100644
index 00000000..070349f8
--- /dev/null
+++ b/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.server.ts
@@ -0,0 +1,26 @@
+import { get, auth } from "$lib/utils";
+
+let limit = 25;
+
+export async function load({ cookies, depends, params }) {
+ depends("app:payments");
+
+ let parts = params.page.split("/");
+
+ let start, end, page;
+ if (parts.length === 1) [page] = parts;
+ if (parts.length === 2) [start, page] = parts;
+ if (parts.length === 3) [start, end, page] = parts;
+ if (!parseInt(page)) page = 1;
+
+ let offset = (page - 1) * limit;
+ if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
+
+ let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`;
+ if (end) url += `&end=${end * 1000}`;
+
+ let { count, payments, incoming, outgoing } = await get(url, auth(cookies));
+ let pages = new Array(Math.ceil(count / limit));
+
+ return { payments, page, pages, start, end, incoming, outgoing };
+}
diff --git a/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.svelte
new file mode 100644
index 00000000..1efdc2ec
--- /dev/null
+++ b/src/routes/(app)/[username]/[...account]/payments/[...page]/+page.svelte
@@ -0,0 +1,315 @@
+
+
+
+
+ {$t("payments.header")}
+
+
+
+
+
+ {#each presets as { start, end, title }, i}
+
+
+ {title}
+
+
+ {/each}
+
+
+
+
+ {#if pages.length > 1}
+ {#each pages as _, i}
+
+
+ {i + 1}
+
+
+ {/each}
+ {/if}
+
+
+
+
+
+ {#each Object.keys(incoming) as c}
+
+
+
+
+
+ {#if tipsIn || tipsOut}{$t("payments.tips")}{/if}
+
+ {$t("payments.total")}
+
+ {@const totalIn = incoming[c]?.fiat || 0}
+ {@const tipsIn = incoming[c]?.fiatTips || 0}
+ {@const subtotalIn = totalIn - tipsIn}
+
+ {@const totalOut = -outgoing[c]?.fiat || 0}
+ {@const tipsOut = outgoing[c]?.fiatTips || 0}
+ {@const subtotalOut = totalOut - tipsOut}
+
+ {$t("payments.income")}
+
+ {tipsIn ? f(tipsIn, c) : "-"}
+ {totalIn ? f(totalIn, c) : "-"}
+
+ {$t("payments.expenditure")}
+
+ {tipsOut ? f(tipsOut, c) : "-"}
+ {totalOut ? f(totalOut, c) : "-"}
+ {/each}
+
+
+
+
+ {$t("payments.export")}
+
+
+
+
+
diff --git a/src/routes/(app)/[username]/[...account]/payments/[...page]/+server.ts b/src/routes/(app)/[username]/[...account]/payments/[...page]/+server.ts
new file mode 100644
index 00000000..a81faaf3
--- /dev/null
+++ b/src/routes/(app)/[username]/[...account]/payments/[...page]/+server.ts
@@ -0,0 +1,18 @@
+import { get, auth } from "$lib/utils";
+import { json } from "@sveltejs/kit";
+
+export async function GET({ cookies, params }) {
+ let parts = params.page.split("/");
+
+ let start, end;
+ if (parts.length === 1) [start] = parts;
+ if (parts.length === 2) [start, end] = parts;
+
+ if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
+
+ let url = `/payments?start=${start * 1000}`;
+ if (end) url += `&end=${end * 1000}`;
+
+ let { payments } = await get(url, auth(cookies));
+ return json({ payments });
+}
diff --git a/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.server.ts b/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.server.ts
new file mode 100644
index 00000000..13eb1381
--- /dev/null
+++ b/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.server.ts
@@ -0,0 +1,22 @@
+import { redirect } from "@sveltejs/kit";
+import { auth, post } from "$lib/utils";
+import type { Invoice } from "$lib/types";
+
+export let load = async ({ cookies, params, parent }) => {
+ let { account } = params;
+ let {subject, user, rates } = await parent();
+
+ let invoice: Invoice = {
+ account,
+ type: account ? "bitcoin": "lightning",
+ rate: rates[user?.currency || subject?.currency],
+ };
+
+ if(!user) user = subject;
+ invoice = await post("/invoice", { invoice, account, user }, auth(cookies));
+ let { id } = invoice;
+
+ if (invoice.memoPrompt && !invoice.memo) {
+ redirect(307, `/${user.username}/invoice/${id}/memo`);
+ } else redirect(307, `/${user.username}/invoice/${id}`);
+};
diff --git a/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.svelte
new file mode 100644
index 00000000..f9267105
--- /dev/null
+++ b/src/routes/(app)/[username]/[...account]/receive/[...param]/+page.svelte
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+ {$t("payments.send")}
+
+
+
+
+ {#if contacts.length}
+
+
+ {$t("user.send.contacts")}
+
+
+ {#each contacts as c}
+
+
+
+ {/each}
+
+
+ {/if}
+
diff --git a/src/routes/(app)/[username]/account/setup/+page.svelte b/src/routes/(app)/[username]/account/setup/+page.svelte
index 5c2102c7..9636ff2a 100644
--- a/src/routes/(app)/[username]/account/setup/+page.svelte
+++ b/src/routes/(app)/[username]/account/setup/+page.svelte
@@ -32,8 +32,8 @@
- Whoever knows these words can withdraw funds from the account. We can't
- help you recover them if you lose them.
+ Whoever knows these words in the correct order can withdraw funds from the account. We can't
+ recover them if you lose them.
{#if reveal}
diff --git a/src/routes/(app)/[username]/account/setup/step2/+page.svelte b/src/routes/(app)/[username]/account/setup/step2/+page.svelte
index 3b403295..d8f44e16 100644
--- a/src/routes/(app)/[username]/account/setup/step2/+page.svelte
+++ b/src/routes/(app)/[username]/account/setup/step2/+page.svelte
@@ -5,6 +5,8 @@
import { encrypt, decrypt } from "nostr-tools/nip49";
import { mnemonicToEntropy, entropyToMnemonic } from "@scure/bip39";
import { wordlist } from "@scure/bip39/wordlists/english";
+ import { fail, post } from "$lib/utils";
+ import { goto } from "$app/navigation";
export let data;
let { user } = data;
@@ -12,11 +14,14 @@
let password;
let submit = async () => {
- console.log($mnemonic);
- let t = await encrypt(mnemonicToEntropy($mnemonic, wordlist), password);
-
- let m = await decrypt(t, password);
- console.log(entropyToMnemonic(m, wordlist));
+ user.seed = await encrypt(mnemonicToEntropy($mnemonic, wordlist), password);
+ try {
+ await post("/api/user", user);
+ goto(`/${user.username}`);
+ } catch (e) {
+ console.log(e);
+ fail("Something went wrong");
+ }
};
diff --git a/src/routes/(app)/[username]/invoice/[id]/+page.svelte b/src/routes/(app)/[username]/invoice/[id]/+page.svelte
index 28bfe27b..24e75fa5 100644
--- a/src/routes/(app)/[username]/invoice/[id]/+page.svelte
+++ b/src/routes/(app)/[username]/invoice/[id]/+page.svelte
@@ -28,7 +28,6 @@
export let data;
- let ndef;
let showOptions;
let reading = async ({ message, serialNumber }) => {
@@ -41,6 +40,7 @@
$: refresh(data);
let { invoice, id, subject, user, src } = data;
let {
+ account,
amount,
hash,
type,
@@ -56,6 +56,7 @@
let refresh = async (data) => {
({ invoice, id, user, src } = data);
({
+ account,
amount,
hash,
type,
@@ -66,21 +67,6 @@
} = invoice);
tipPercent = (tip / amount) * 100;
-
- // if (browser && window.NDEFReader) {
- // try {
- // ndef = new NDEFReader();
- // await ndef.scan();
- //
- // ndef.removeEventListener('readingerror', readingerror);
- // ndef.removeEventListener('reading', reading);
- //
- // ndef.addEventListener('readingerror', readingerror);
- // ndef.addEventListener('reading', reading);
- // } catch (e) {
- // console.log(e);
- // }
- // }
};
$: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2));
@@ -100,13 +86,6 @@
}
});
- onDestroy(() => {
- if (ndef) {
- ndef.removeEventListener("readingerror", readingerror);
- ndef.removeEventListener("reading", reading);
- }
- });
-
$: link = [types.bitcoin, types.liquid].includes(type)
? text
: `lightning:${text}`;
@@ -257,39 +236,41 @@
-
-
setType(types.bitcoin)}
- >
-
- Bitcoin
-
+ {#if !account}
+
+
setType(types.bitcoin)}
+ >
+
+ Bitcoin
+
-
setType(types.liquid)}
- >
-
- Liquid
-
+
setType(types.liquid)}
+ >
+
+ Liquid
+
-
setType(types.lightning)}
- >
-
- Lightning
-
-
+
setType(types.lightning)}
+ >
+
+ Lightning
+
+
+ {/if}
{#if type === types.liquid}
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.server.ts b/src/routes/(app)/[username]/payments/[...page]/+page.server.ts
deleted file mode 100644
index 070349f8..00000000
--- a/src/routes/(app)/[username]/payments/[...page]/+page.server.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { get, auth } from "$lib/utils";
-
-let limit = 25;
-
-export async function load({ cookies, depends, params }) {
- depends("app:payments");
-
- let parts = params.page.split("/");
-
- let start, end, page;
- if (parts.length === 1) [page] = parts;
- if (parts.length === 2) [start, page] = parts;
- if (parts.length === 3) [start, end, page] = parts;
- if (!parseInt(page)) page = 1;
-
- let offset = (page - 1) * limit;
- if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
-
- let url = `/payments?start=${start * 1000}&limit=${limit}&offset=${offset}`;
- if (end) url += `&end=${end * 1000}`;
-
- let { count, payments, incoming, outgoing } = await get(url, auth(cookies));
- let pages = new Array(Math.ceil(count / limit));
-
- return { payments, page, pages, start, end, incoming, outgoing };
-}
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte
deleted file mode 100644
index 1efdc2ec..00000000
--- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte
+++ /dev/null
@@ -1,315 +0,0 @@
-
-
-
-
- {$t("payments.header")}
-
-
-
-
-
- {#each presets as { start, end, title }, i}
-
-
- {title}
-
-
- {/each}
-
-
-
-
- {#if pages.length > 1}
- {#each pages as _, i}
-
-
- {i + 1}
-
-
- {/each}
- {/if}
-
-
-
-
-
- {#each Object.keys(incoming) as c}
-
-
-
-
-
- {#if tipsIn || tipsOut}{$t("payments.tips")}{/if}
-
- {$t("payments.total")}
-
- {@const totalIn = incoming[c]?.fiat || 0}
- {@const tipsIn = incoming[c]?.fiatTips || 0}
- {@const subtotalIn = totalIn - tipsIn}
-
- {@const totalOut = -outgoing[c]?.fiat || 0}
- {@const tipsOut = outgoing[c]?.fiatTips || 0}
- {@const subtotalOut = totalOut - tipsOut}
-
- {$t("payments.income")}
-
- {tipsIn ? f(tipsIn, c) : "-"}
- {totalIn ? f(totalIn, c) : "-"}
-
- {$t("payments.expenditure")}
-
- {tipsOut ? f(tipsOut, c) : "-"}
- {totalOut ? f(totalOut, c) : "-"}
- {/each}
-
-
-
-
- {$t("payments.export")}
-
-
-
-
-
diff --git a/src/routes/(app)/[username]/payments/[...page]/+server.ts b/src/routes/(app)/[username]/payments/[...page]/+server.ts
deleted file mode 100644
index a81faaf3..00000000
--- a/src/routes/(app)/[username]/payments/[...page]/+server.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { get, auth } from "$lib/utils";
-import { json } from "@sveltejs/kit";
-
-export async function GET({ cookies, params }) {
- let parts = params.page.split("/");
-
- let start, end;
- if (parts.length === 1) [start] = parts;
- if (parts.length === 2) [start, end] = parts;
-
- if (!start) start = Date.now() / 1000 - 24 * 60 * 60;
-
- let url = `/payments?start=${start * 1000}`;
- if (end) url += `&end=${end * 1000}`;
-
- let { payments } = await get(url, auth(cookies));
- return json({ payments });
-}
diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.server.ts b/src/routes/(app)/[username]/receive/[...param]/+page.server.ts
deleted file mode 100644
index 502678a9..00000000
--- a/src/routes/(app)/[username]/receive/[...param]/+page.server.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { redirect } from "@sveltejs/kit";
-import { auth, post } from "$lib/utils";
-import type { Invoice } from "$lib/types";
-
-export let load = async ({ cookies, parent }) => {
- let {subject, user, rates } = await parent();
-
- let invoice: Invoice = {
- type: "lightning",
- rate: rates[user?.currency || subject?.currency],
- };
-
- if(!user) user = subject;
- invoice = await post("/invoice", { invoice, user }, auth(cookies));
- let { id } = invoice;
-
- if (invoice.memoPrompt && !invoice.memo) {
- redirect(307, `/${user.username}/invoice/${id}/memo`);
- } else redirect(307, `/${user.username}/invoice/${id}`);
-};
diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte
deleted file mode 100644
index f9267105..00000000
--- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
- {$t("payments.send")}
-
-
-
- {#if form?.error}
-
-
- {$t("error.unrecognizedInput")}
-
-
- {/if}
-
-
-
-
-
-
-
-
- {$t("user.send.next")}
-
-
-
- {#if contacts.length}
-
-
- {$t("user.send.contacts")}
-
-
- {#each contacts as c}
-
-
-
- {/each}
-
-
- {/if}
-
--
cgit v1.2.3