aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-16 13:42:59 -0700
committerAdam Soltys <[email protected]>2024-08-16 13:43:35 -0700
commitca6b61f747d394dadd3bbc5ca428da3490c69584 (patch)
treeaad3cf8817619e32d8e9a6155e484bd855d8f120 /src
parent09d4867fe0ddc8cbc7bfa670911fe5c33a0a4f36 (diff)
downloadcoinos-ui-ecash.tar.gz
coinos-ui-ecash.zip
ecash wipecash
Diffstat (limited to 'src')
-rw-r--r--src/lib/nostr.js2
-rw-r--r--src/routes/(app)/+layout.server.js4
-rw-r--r--src/routes/(app)/[username]/generate/+page.svelte2
-rw-r--r--src/routes/(app)/[username]/getcash/+page.svelte66
-rw-r--r--src/routes/(app)/[username]/update/+server.js (renamed from src/routes/(app)/[username]/generate/+server.js)0
5 files changed, 72 insertions, 2 deletions
diff --git a/src/lib/nostr.js b/src/lib/nostr.js
index 5209418a..c94958b4 100644
--- a/src/lib/nostr.js
+++ b/src/lib/nostr.js
@@ -106,7 +106,7 @@ export let getPrivateKey = async (user) => {
export let getMnemonic = async (user) => {
let { cipher, username, salt } = user;
- let mnemonic, key, seed, entropy, child, privkey;
+ let mnemonic, key, entropy, child, privkey;
entropy = new Uint8Array(
await crypto.subtle.decrypt(
diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js
index 50d51584..eabd32fc 100644
--- a/src/routes/(app)/+layout.server.js
+++ b/src/routes/(app)/+layout.server.js
@@ -38,6 +38,10 @@ export async function load({ cookies, request, url, params }) {
redirect(303, `/${user.username}/generate`);
}
+ if (user && !user.cpub && !pathname.includes("getcash")) {
+ redirect(303, `/${user.username}/getcash`);
+ }
+
try {
rate = await get("/rate");
rates = await get("/rates");
diff --git a/src/routes/(app)/[username]/generate/+page.svelte b/src/routes/(app)/[username]/generate/+page.svelte
index 767b7545..63d53db7 100644
--- a/src/routes/(app)/[username]/generate/+page.svelte
+++ b/src/routes/(app)/[username]/generate/+page.svelte
@@ -28,7 +28,7 @@
try {
user.pin = $pin;
- await post(`/${user.username}/generate`, user);
+ await post(`/${user.username}/update`, user);
goto($loginRedirect || `/${user.username}`, { invalidateAll: true });
} catch (e) {
$pin = "";
diff --git a/src/routes/(app)/[username]/getcash/+page.svelte b/src/routes/(app)/[username]/getcash/+page.svelte
new file mode 100644
index 00000000..11491e5b
--- /dev/null
+++ b/src/routes/(app)/[username]/getcash/+page.svelte
@@ -0,0 +1,66 @@
+<script>
+ import { fail, post, wait } from "$lib/utils";
+ import { onMount } from "svelte";
+ import { goto, invalidate } from "$app/navigation";
+ import Pin from "$comp/Pin.svelte";
+ import Spinner from "$comp/Spinner.svelte";
+ import { loginRedirect, pin, password } from "$lib/store";
+ import { getMnemonic } from "$lib/nostr";
+ import { browser } from "$app/environment";
+ import { CashuMint, CashuWallet } from "@cashu/cashu-ts";
+ export let data;
+ let { user } = data;
+
+ let loaded;
+ let gen = async () => {
+ if (!browser) return;
+
+ if (user.cpub) {
+ goto($loginRedirect || `/${user.username}`, { invalidateAll: true });
+ return;
+ }
+
+ try {
+ let mnemonic = await getMnemonic(user);
+
+ const mintUrl = "http://localhost:3338";
+ const mint = new CashuMint(mintUrl);
+ const wallet = new CashuWallet(mint, { mnemonicOrSeed: mnemonic });
+
+
+ console.log(mnemonic);
+ console.log(wallet)
+ } catch (e) {
+ console.log("error generating", e);
+ }
+
+ try {
+ user.pin = $pin;
+ await post(`/${user.username}/update`, user);
+ goto($loginRedirect || `/${user.username}`, { invalidateAll: true });
+ } catch (e) {
+ $pin = "";
+ if (e.message?.startsWith("Pin")) {
+ fail("Wrong pin, try again");
+ } else {
+ fail("Failed to issue e-cash");
+ goto("/");
+ }
+ }
+ };
+
+ onMount(() => browser && setTimeout(() => (loaded = true) && gen(), 50));
+
+ $: $pin?.length === 6 && gen(user);
+</script>
+
+{#if loaded && user?.haspin && $pin?.length !== 6}
+ <Pin />
+{/if}
+
+<div class="container px-4 text-center mx-auto">
+ <h1 class="text-3xl md:text-4xl font-bold mb-6">Issuing e-cash</h1>
+ <div class="flex w-full py-5 max-w-[200px] mx-auto bg-black rounded-2xl">
+ <Spinner />
+ </div>
+</div>
diff --git a/src/routes/(app)/[username]/generate/+server.js b/src/routes/(app)/[username]/update/+server.js
index 3e3a9358..3e3a9358 100644
--- a/src/routes/(app)/[username]/generate/+server.js
+++ b/src/routes/(app)/[username]/update/+server.js