From 2114156be3f89a2ef4c5bd13fd6d7a51d8fbc135 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 12 Sep 2024 15:23:45 -0700 Subject: self custodial send --- src/components/Account.svelte | 17 ++- src/components/LandingHeader.svelte | 16 +-- src/components/Request.svelte | 39 ------ src/lib/invoice.ts | 7 +- src/lib/store.ts | 1 + src/lib/utils.ts | 41 ++++++- src/locales/en.json | 1 + src/routes/(app)/+error.svelte | 38 ++++++ src/routes/(app)/+layout.svelte | 6 - src/routes/(app)/[username]/(profile)/+page.svelte | 42 ++++--- src/routes/(app)/[username]/+layout.server.ts | 1 - src/routes/(app)/account/setup/step2/+page.svelte | 28 ++++- src/routes/(app)/invoice/+page.server.ts | 4 +- src/routes/(app)/invoice/[id]/+layout.server.ts | 7 +- src/routes/(app)/invoice/[id]/+page.svelte | 4 +- src/routes/(app)/logout/+page.server.ts | 1 + .../(app)/payments/[...page]/+page.server.ts | 3 +- src/routes/(app)/qr/[text]/+page.svelte | 4 - .../(app)/send/bitcoin/[address]/+page.server.ts | 7 ++ .../(app)/send/bitcoin/[address]/+page.svelte | 4 +- .../[amount]/[...feeRate]/+page.server.ts | 27 +++- .../[address]/[amount]/[...feeRate]/+page.svelte | 136 ++++++++++++++++++++- src/routes/(app)/send/ecash/+page.svelte | 6 - src/routes/(app)/sent/+page.server.ts | 3 +- src/routes/(app)/settings/[...tab]/+page.svelte | 2 +- src/routes/(static)/+layout.svelte | 2 +- src/routes/(static)/login/+page.svelte | 2 +- src/routes/(static)/register/+page.svelte | 2 +- src/routes/(static)/support/+page.svelte | 9 +- src/routes/+error.svelte | 1 - 30 files changed, 322 insertions(+), 139 deletions(-) delete mode 100644 src/components/Request.svelte create mode 100644 src/routes/(app)/+error.svelte create mode 100644 src/routes/(app)/send/bitcoin/[address]/+page.server.ts (limited to 'src') diff --git a/src/components/Account.svelte b/src/components/Account.svelte index eb1b0bac..f83068b5 100644 --- a/src/components/Account.svelte +++ b/src/components/Account.svelte @@ -1,4 +1,5 @@ - +
-
- -
-
{type} account
-
-
+
- +
diff --git a/src/components/Request.svelte b/src/components/Request.svelte deleted file mode 100644 index 297b7438..00000000 --- a/src/components/Request.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - -{#if $request} -
-
-
-
- -

- {$request.requester.username} - {$t("payments.readyToPay")} -

-
-
- -
-
-{/if} diff --git a/src/lib/invoice.ts b/src/lib/invoice.ts index 3c885346..0ab0a9af 100644 --- a/src/lib/invoice.ts +++ b/src/lib/invoice.ts @@ -1,13 +1,14 @@ -import { auth, get, post } from "$lib/utils"; +import { auth, get, post, setAccount } from "$lib/utils"; import { redirect } from "@sveltejs/kit"; -export default async ({ cookies, request }) => { +export default async ({ cookies, request, url }) => { let form = await request.formData(); let rates = await get("/rates"); let amount = parseInt(form.get("amount")); let invoice = { + account, amount, items: JSON.parse(form.get("items")), memo: form.get("memo"), @@ -16,7 +17,7 @@ export default async ({ cookies, request }) => { type: form.get("type"), prompt: form.get("prompt") === "true", rate: parseFloat(form.get("rate")) || rates[form.get("currency")], - id: undefined + id: undefined, }; let user = { username: form.get("username"), currency: form.get("currency") }; diff --git a/src/lib/store.ts b/src/lib/store.ts index 3c1ff321..42b41127 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -38,6 +38,7 @@ let persistLocal = (key, defaultValue: any = undefined) => { return s; }; +export let account = writable(); export let amountPrompt = persistLocal("amountPrompt"); export let avatar = writable(); export let banner = writable(); diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 69e0f949..c20a7d29 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,7 +1,7 @@ import { browser } from "$app/environment"; import { toast } from "@zerodevx/svelte-toast"; import { goto } from "$app/navigation"; -import { PUBLIC_COINOS_URL } from "$env/static/public"; +import { PUBLIC_COINOS_NETWORK, PUBLIC_COINOS_URL } from "$env/static/public"; import { page } from "$app/stores"; import { get as getStore } from "svelte/store"; @@ -41,7 +41,11 @@ export let get = (url: string, headers = {}) => { }); }; -export let post = async (url: string, body: object, headers: HeadersInit | undefined = undefined) => { +export let post = async ( + url: string, + body: object, + headers: HeadersInit | undefined = undefined +) => { headers = { "content-type": "application/json", accept: "application/json", @@ -242,7 +246,11 @@ export let select = (el: HTMLInputElement): any => export let sleep = (n: number): Promise => new Promise((r) => setTimeout(r, n)); -export let wait = async (f: () => boolean | Promise, n: number = 100, s: number = 300): Promise => { +export let wait = async ( + f: () => boolean | Promise, + n: number = 100, + s: number = 300 +): Promise => { let i = 0; while (!(await f()) && i < s) { await sleep(n); @@ -327,3 +335,30 @@ export function setCookie(name: string, value: string, seconds: number): void { const expires = "expires=" + now.toUTCString(); document.cookie = name + "=" + value + ";" + expires + ";path=/"; } + +export let network = { + bitcoin: { + bech32: "bc", + pubKeyHash: 0x00, + scriptHash: 0x05, + wif: 0x80, + }, + regtest: { + bech32: "bcrt", + pubKeyHash: 0x6f, + scriptHash: 0xc4, + wif: 0xef, + }, +}[PUBLIC_COINOS_NETWORK]; + +export let versions = { + bitcoin: { + private: 0x0488ade4, + public: 0x0488b21e, + }, + regtest: { + private: 0x04358394, + public: 0x043587cf, + }, +}[PUBLIC_COINOS_NETWORK]; + diff --git a/src/locales/en.json b/src/locales/en.json index b1bbe1c4..fd2807b4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -299,6 +299,7 @@ } }, "payments": { + "enterWalletPass": "Please enter your wallet password", "legacyVersion": "Legacy version", "newVersion": "New version", "income": "Income", diff --git a/src/routes/(app)/+error.svelte b/src/routes/(app)/+error.svelte new file mode 100644 index 00000000..6ce7979c --- /dev/null +++ b/src/routes/(app)/+error.svelte @@ -0,0 +1,38 @@ + + +
+
+ + + +
+ +
+
+
+

Error

+
+

Something went wrong

+

{$page.error.message}

+ + +
+
+
diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 0ff4816d..05ca0d0c 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -17,7 +17,6 @@ import AppHeader from "$comp/AppHeader.svelte"; import Invoice from "$comp/Invoice.svelte"; import Password from "$comp/Password.svelte"; - import Request from "$comp/Request.svelte"; import { getCookie, warning, protectedRoutes } from "$lib/utils"; import { t, locale, loading } from "$lib/translations"; import { goto, onNavigate } from "$app/navigation"; @@ -36,7 +35,6 @@ }); let { generate, rate, user, subject, token, rates } = data; - console.log("SUB", subject) $: update(data); let update = (data) => { @@ -127,10 +125,6 @@ {/if} -{#if $request} - -{/if} -