From ac3a6407a95879ce68e28a1633697de6d7a95770 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 16 Jan 2025 14:56:32 -0800 Subject: event viewer and zaps --- src/lib/utils.ts | 9 ++ src/routes/(app)/e/[id]/+page.server.ts | 8 ++ src/routes/(app)/e/[id]/+page.svelte | 32 +++++++ src/routes/(app)/post/+server.ts | 9 ++ src/routes/(app)/post/[...path]/+server.ts | 12 +++ .../send/zap/[pubkey]/[...id]/+page.server.ts | 41 +++++++++ .../(app)/send/zap/[pubkey]/[...id]/+page.svelte | 99 ++++++++++++++++++++++ 7 files changed, 210 insertions(+) create mode 100644 src/routes/(app)/e/[id]/+page.server.ts create mode 100644 src/routes/(app)/e/[id]/+page.svelte create mode 100644 src/routes/(app)/post/+server.ts create mode 100644 src/routes/(app)/post/[...path]/+server.ts create mode 100644 src/routes/(app)/send/zap/[pubkey]/[...id]/+page.server.ts create mode 100644 src/routes/(app)/send/zap/[pubkey]/[...id]/+page.svelte (limited to 'src') diff --git a/src/lib/utils.ts b/src/lib/utils.ts index e39c2adc..c175986c 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -2,7 +2,9 @@ import { browser } from "$app/environment"; import { goto } from "$app/navigation"; import { page } from "$app/stores"; import { PUBLIC_COINOS_NETWORK, PUBLIC_COINOS_URL } from "$env/static/public"; +import { bytesToHex } from "@noble/hashes/utils"; import { toast } from "@zerodevx/svelte-toast"; +import { decrypt } from "nostr-tools/nip49"; import { get as getStore } from "svelte/store"; export function scroll(section: any) { @@ -169,6 +171,13 @@ export const login = async ( if (u.language) cookies.set("lang", u.language, opts); cookies.set("username", user.username, opts); cookies.set("token", token, opts); + if (u.nsec) { + cookies.set("sk", bytesToHex(decrypt(u.nsec, user.password)), { + ...opts, + httpOnly: false, + sameSite: "lax", + }); + } }; export const auth = (cookies) => ({ diff --git a/src/routes/(app)/e/[id]/+page.server.ts b/src/routes/(app)/e/[id]/+page.server.ts new file mode 100644 index 00000000..e544d261 --- /dev/null +++ b/src/routes/(app)/e/[id]/+page.server.ts @@ -0,0 +1,8 @@ +import { get } from "$lib/utils"; + +export async function load({ params }) { + const event = await get(`/event/${params.id}`); + const author = await get(`/users/${event.pubkey}`); + const zaps = await get(`/zaps/${params.id}`); + return { author, event, zaps }; +} diff --git a/src/routes/(app)/e/[id]/+page.svelte b/src/routes/(app)/e/[id]/+page.svelte new file mode 100644 index 00000000..6e8c1b56 --- /dev/null +++ b/src/routes/(app)/e/[id]/+page.svelte @@ -0,0 +1,32 @@ + + +
+

+ Event +

+
+ +
{event.content}
+
+ + + Zap + +
+ {#each zaps as { amount, user }} + +
+ +
{amount}
+
+
+ {/each} +
+
diff --git a/src/routes/(app)/post/+server.ts b/src/routes/(app)/post/+server.ts new file mode 100644 index 00000000..35c04186 --- /dev/null +++ b/src/routes/(app)/post/+server.ts @@ -0,0 +1,9 @@ +export async function POST({ cookies, params, request }) { + const body = await request.json(); + try { + const result = await post("/event", body, auth(cookies)); + return json(result); + } catch (e: any) { + error(500, e.message); + } +} diff --git a/src/routes/(app)/post/[...path]/+server.ts b/src/routes/(app)/post/[...path]/+server.ts new file mode 100644 index 00000000..84df9a36 --- /dev/null +++ b/src/routes/(app)/post/[...path]/+server.ts @@ -0,0 +1,12 @@ +import { PUBLIC_COINOS_URL as base } from "$env/static/public"; +import { auth } from "$lib/utils"; + +export async function POST({ cookies, fetch, params, request }) { + const { path } = params; + + return fetch(`${base}/${path}`, { + method: "POST", + body: JSON.stringify(await request.json()), + headers: { "Content-Type": "application/json", ...auth(cookies) }, + }); +} diff --git a/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.server.ts b/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.server.ts new file mode 100644 index 00000000..1dd80d20 --- /dev/null +++ b/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.server.ts @@ -0,0 +1,41 @@ +import getRates from "$lib/rates"; +import { auth, fd, post } from "$lib/utils"; +import { fail, redirect } from "@sveltejs/kit"; + +export async function load({ params, parent }) { + const { user } = await parent(); + const data = { ...params }; + const rates = await getRates(); + + data.rate = rates[user.currency]; + return data; +} + +export const actions = { + setAmount: async ({ cookies, params, request }) => { + const data = await fd(request); + const { id, pubkey } = params; + const { amount } = data; + + data.request = await post( + "/zapRequest", + { id, amount, pubkey }, + auth(cookies), + ); + + return data; + }, + + send: async ({ cookies, request }) => { + let p; + try { + const body = await fd(request); + + p = await post("/payments", body, auth(cookies)); + } catch (_) { + return fail(400, { message: "payments.failedToRoute" }); + } + + redirect(307, `/sent/${p.id}`); + }, +}; diff --git a/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.svelte b/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.svelte new file mode 100644 index 00000000..4a4928ea --- /dev/null +++ b/src/routes/(app)/send/zap/[pubkey]/[...id]/+page.svelte @@ -0,0 +1,99 @@ + + +
+ {#if form?.message} +
+ {$t(form.message)} +
+ {/if} + {#if amount} +
+

+ {$t("payments.send")} +

+ + +
+ +
+ + + + + +
+ {:else} +
+ + + + + + + {/if} +
-- cgit v1.2.3