aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/firehose
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2025-01-20 00:05:30 -0800
committerAdam Soltys <[email protected]>2025-01-20 00:05:33 -0800
commit494fa791c93297917cf3247b561d736934de805c (patch)
treeb92bbbabe7eed8cde7b9d251cfcb08221689cc83 /src/routes/(app)/firehose
parent684d5fe5643d481c4904a1323ae0a257c267b87b (diff)
downloadcoinos-ui-494fa791c93297917cf3247b561d736934de805c.tar.gz
coinos-ui-494fa791c93297917cf3247b561d736934de805c.zip
nostr routes
Diffstat (limited to 'src/routes/(app)/firehose')
-rw-r--r--src/routes/(app)/firehose/+page.svelte48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/routes/(app)/firehose/+page.svelte b/src/routes/(app)/firehose/+page.svelte
new file mode 100644
index 00000000..1cf2324e
--- /dev/null
+++ b/src/routes/(app)/firehose/+page.svelte
@@ -0,0 +1,48 @@
+<script lang="ts">
+ import Event from "$comp/Event.svelte";
+ import { get, post } from "$lib/utils";
+ import { onMount } from "svelte";
+ import { Relay } from "nostr-tools/relay";
+ import { ignore } from "$lib/store";
+
+ let events = $state([]);
+ let paused = $state();
+ let pause = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ paused = true;
+ };
+ let unpause = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ paused = false;
+ };
+
+ onMount(async () => {
+ const relay = await Relay.connect("wss://relay.primal.net");
+ const subscription = relay.subscribe([{ kinds: [1], limit: 20 }], {
+ async onevent(event) {
+ if (paused) return;
+ const { parts, names } = await post("/post/parseEvent", { event });
+ event.author = await get(`/api/users/${event.pubkey}`);
+ event.parts = parts;
+ event.names = names;
+ let { content, pubkey } = event;
+ events.push(event);
+ if (events.length > 20) events.shift();
+ },
+ });
+ });
+</script>
+
+<div class="container px-4 max-w-xl mx-auto space-y-5">
+ <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold">
+ Events
+ </h1>
+
+ <div onpointerenter={pause} onpointerleave={unpause}>
+ {#each events as event}
+ <Event {event} minimal={true} />
+ {/each}
+ </div>
+</div>