From 9149b4b439ef3864b39a2d7a9c51d4f8e3fc692a Mon Sep 17 00:00:00 2001 From: Yusuf Bera Ertan Date: Fri, 23 Aug 2024 16:44:40 +0300 Subject: [PATCH] feat: improved guestbook --- bun.lockb | Bin 144300 -> 142688 bytes .../gaze/guestbook/GuestbookRoutes.scala | 32 +++----- package.json | 5 +- src/lib/fetchHack.mjs | 25 ------ src/lib/index.ts | 1 - src/routes/+layout.ts | 6 +- src/routes/+page.ts | 1 + src/routes/about/+layout.ts | 1 + src/routes/entries/+layout.ts | 1 + src/routes/guestbook/+page.server.ts | 77 ++++++++++-------- src/routes/guestbook/+page.svelte | 19 +++-- 11 files changed, 71 insertions(+), 97 deletions(-) delete mode 100644 src/lib/fetchHack.mjs create mode 100644 src/routes/+page.ts create mode 100644 src/routes/about/+layout.ts create mode 100644 src/routes/entries/+layout.ts diff --git a/bun.lockb b/bun.lockb index 7ff8555ff3c3165ffe318e21255ba12ef846498e..44f564e6c7a5ffdb56b17d6a4d2ee321ba209e40 100644 GIT binary patch delta 20480 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 T@wII&EvyRNnK}NoVd;MXx%Igy diff --git a/guestbook/src/main/scala/systems/gaze/guestbook/GuestbookRoutes.scala b/guestbook/src/main/scala/systems/gaze/guestbook/GuestbookRoutes.scala index dc0c608..267120c 100644 --- a/guestbook/src/main/scala/systems/gaze/guestbook/GuestbookRoutes.scala +++ b/guestbook/src/main/scala/systems/gaze/guestbook/GuestbookRoutes.scala @@ -14,38 +14,26 @@ import cats.effect.unsafe.implicits.global import scala.concurrent.duration.FiniteDuration import org.http4s.Uri -class GuestbookRoutes(var guestbookConfig: Guestbook.Config, var websiteUri: Uri): +class GuestbookRoutes( + var guestbookConfig: Guestbook.Config, + var websiteUri: Uri +): val dsl = new Http4sDsl[IO] {} import dsl.* def throttle( - ratelimited: String, amount: Int, per: FiniteDuration )(routes: HttpRoutes[IO]): HttpRoutes[IO] = Throttle .httpRoutes[IO](amount, per)(routes) .unsafeRunSync() - .map((resp) => - // respond with SeeOther and put ratelimited query param - if (resp.status == TooManyRequests) - resp - .withStatus(SeeOther) - .withHeaders( - Location( - (websiteUri / "guestbook") - .withQueryParam("ratelimited", ratelimited) - ) - ) - else - resp - ) def routes( G: Guestbook[IO] ): HttpRoutes[IO] = - val putEntry = HttpRoutes.of[IO] { - case req @ POST -> Root => for { + val putEntry = HttpRoutes.of[IO] { case req @ POST -> Root => + for { entry <- req.as[UrlForm].map { form => val author = form.getFirstOrElse("author", "error") val content = form.getFirstOrElse("content", "error") @@ -56,11 +44,11 @@ class GuestbookRoutes(var guestbookConfig: Guestbook.Config, var websiteUri: Uri resp <- SeeOther(Location(websiteUri / "guestbook")) } yield resp } - val getEntries = HttpRoutes.of[IO] { - case GET -> Root / IntVar(page) => for { + val getEntries = HttpRoutes.of[IO] { case GET -> Root / IntVar(page) => + for { entries <- G.read(guestbookConfig, (page - 1).max(0) * 5, 5) resp <- Ok(entries) } yield resp } - throttle("get", 10, 2.seconds)(getEntries) - <+> throttle("send", 5, 10.seconds)(putEntry) + throttle(30, 2.seconds)(getEntries) + <+> throttle(5, 10.seconds)(putEntry) diff --git a/package.json b/package.json index f5eb99b..e41facc 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,6 @@ "format": "prettier --write ." }, "devDependencies": { - "@sveltejs/adapter-auto": "^3.2.2", - "@sveltejs/adapter-static": "^3.0.2", "@sveltejs/kit": "^2.5.20", "@sveltejs/vite-plugin-svelte": "^3.1.1", "@tailwindcss/forms": "^0.5.7", @@ -45,6 +43,9 @@ "rehype-slug": "^6.0.0" }, "trustedDependencies": [ + "@sveltejs/kit", + "deasync", + "esbuild", "svelte-preprocess" ] } diff --git a/src/lib/fetchHack.mjs b/src/lib/fetchHack.mjs deleted file mode 100644 index e8d25c2..0000000 --- a/src/lib/fetchHack.mjs +++ /dev/null @@ -1,25 +0,0 @@ -// hack/postSync.mjs -/** - ,* @file POST some stuff to a URL. - ,* Usage: one of - ,* echo input | node postSync.mjs - ,* node postSync.mjs - ,*/ - -// The argument count would break if called as a standalone script. -const url = process.argv[2] || process.exit(1); - -const response = await fetch(url, {method:'GET',redirect:'manual'}); -const json = await response.text().then(text => { - try { - const data = JSON.parse(text); - return data - } catch(err) { - return [] - } -}); -console.log(JSON.stringify({ - location: response.headers.get('location'), - status: response.status, - body: json, -})); \ No newline at end of file diff --git a/src/lib/index.ts b/src/lib/index.ts index 856f2b6..e69de29 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1 +0,0 @@ -// place files you want to import through the `$lib` alias in this folder. diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 9d14b9a..ddfd5f2 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1,8 +1,6 @@ -import { dev } from '$app/environment'; - -export const csr = dev; +export const csr = false; export const ssr = true; -export const prerender = true; +export const prerender = false; export const trailingSlash = 'always'; export async function load({ url }) { diff --git a/src/routes/+page.ts b/src/routes/+page.ts new file mode 100644 index 0000000..c8cacf0 --- /dev/null +++ b/src/routes/+page.ts @@ -0,0 +1 @@ +export const prerender = true; \ No newline at end of file diff --git a/src/routes/about/+layout.ts b/src/routes/about/+layout.ts new file mode 100644 index 0000000..c8cacf0 --- /dev/null +++ b/src/routes/about/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; \ No newline at end of file diff --git a/src/routes/entries/+layout.ts b/src/routes/entries/+layout.ts new file mode 100644 index 0000000..c8cacf0 --- /dev/null +++ b/src/routes/entries/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; \ No newline at end of file diff --git a/src/routes/guestbook/+page.server.ts b/src/routes/guestbook/+page.server.ts index abb7b83..b2c4b0c 100644 --- a/src/routes/guestbook/+page.server.ts +++ b/src/routes/guestbook/+page.server.ts @@ -1,6 +1,6 @@ -import { GUESTBOOK_URL } from '$env/static/private' -import { redirect } from '@sveltejs/kit'; -import {spawnSync} from 'node:child_process' +import { GUESTBOOK_BASE_URL } from '$env/static/private' +import { PUBLIC_BASE_URL } from '$env/static/public' +import { redirect } from '@sveltejs/kit' interface Entry { author: String, @@ -8,51 +8,56 @@ interface Entry { timestamp: number, } -interface FetchResult { - location: string, - status: number, - body: any, -} - -function fetchBlocking(url: string): FetchResult | string { - const spawnResult = spawnSync("bun", ["src/lib/fetchHack.mjs", url]); - const out = spawnResult.stdout.toString(); - try { - return JSON.parse(out) - } catch(err: any) { - return spawnResult.stderr.toString() +export const actions = { + default: async ({ request, cookies }) => { + const body = await request.text() + let respRaw: Response + try { + respRaw = await fetch(`${GUESTBOOK_BASE_URL}`, { method: 'POST', body }) + } catch (err: any) { + cookies.set("sendError", err.toString(), { path: "/guestbook" }) + redirect(303, `${PUBLIC_BASE_URL}/guestbook/`) + } + const ratelimited = respRaw.status === 429 + cookies.set("sendRatelimited", ratelimited.toString(), { path: "/guestbook" }) + redirect(303, `${PUBLIC_BASE_URL}/guestbook/`) } } -export function load({ url }) { +export async function load({ url, fetch, cookies }) { var data = { entries: [] as [number, Entry][], - guestbook_url: GUESTBOOK_URL, - ratelimitedFeat: url.searchParams.get('ratelimited') as string || "", - page: parseInt(url.searchParams.get('page') || "1") || 1, + page: parseInt(url.searchParams.get('page') || "1"), hasNext: false, - fetchError: "", + sendError: cookies.get("sendError") || "", + getError: "", + sendRatelimited: cookies.get('sendRatelimited') || "", + getRatelimited: false, } + // delete the cookies after we get em since we dont really need these more than once + cookies.delete("sendError", { path: "/guestbook" }) + cookies.delete("sendRatelimited", { path: "/guestbook" }) // handle cases where the page query might be a string so we just return back page 1 instead data.page = isNaN(data.page) ? 1 : data.page data.page = Math.max(data.page, 1) - if (data.ratelimitedFeat === "get") { + let respRaw: Response + try { + respRaw = await fetch(GUESTBOOK_BASE_URL + "/" + data.page) + } catch (err: any) { + data.getError = err.toString() return data } - const entriesResp = fetchBlocking(GUESTBOOK_URL + "/" + data.page) - if (typeof entriesResp === "string") { - data.fetchError = entriesResp - return data + data.getRatelimited = respRaw.status === 429 + if (!data.getRatelimited) { + let body: any + try { + body = await respRaw.json() + } catch (err: any) { + data.getError = err.toString() + return data + } + data.entries = body.entries + data.hasNext = body.hasNext } - const locationRaw = entriesResp.status === 303 ? entriesResp.location : null - if (locationRaw !== null && locationRaw.length > 0) { - const location = new URL(locationRaw) - data.ratelimitedFeat = location.searchParams.get('ratelimited') as string || "" - } - if (data.ratelimitedFeat === "get") { - return data - } - data.entries = entriesResp.body.entries - data.hasNext = entriesResp.body.hasNext return data } \ No newline at end of file diff --git a/src/routes/guestbook/+page.svelte b/src/routes/guestbook/+page.svelte index f024858..7f09708 100644 --- a/src/routes/guestbook/+page.svelte +++ b/src/routes/guestbook/+page.svelte @@ -2,7 +2,6 @@ import Window from '../../components/window.svelte'; export let data; - const hasPreviousPage = data.page > 1; const hasNextPage = data.hasNext; @@ -10,11 +9,10 @@
- {@const ratelimited = data.ratelimitedFeat === 'send'}

hia, here is the guestbook if you wanna post anything :)

just be a good human bean pretty please

-
+

###

@@ -42,10 +40,17 @@ value="post" class="text-xl text-ralsei-green-light leading-5 motion-safe:hover:animate-bounce w-fit border-double border-4 p-1 pb-2" /> - {#if ratelimited} + {#if data.sendRatelimited}

you are ratelimited, try again in 30 seconds

{/if}
+ {#if data.sendError} +

got error trying to send post, pls tell me about this

+
+ error +

{data.sendError}

+
+ {/if}
@@ -53,15 +58,15 @@
- {#if data.ratelimitedFeat === 'get'} + {#if data.getRatelimited}

woops, looks like you are being ratelimited, try again in like half a minute :3

- {:else if data.fetchError} + {:else if data.getError}

got error trying to fetch entries, pls tell me about this

error -

{data.fetchError}

+

{data.getError}

{:else} {#each data.entries as [entry_id, entry] (entry_id)}