From d3c82e927759238d0ecd875e89d38df86db427c1 Mon Sep 17 00:00:00 2001 From: 728 Date: Tue, 24 Jan 2023 13:11:14 +0800 Subject: [PATCH] serve #34 --- cli/build.zsh | 1 + ismism.ts/src/praxic/query.ts | 8 ++++++ ismism.ts/src/serve.ts | 48 +++++++++++++++++++++++++++++++++++ ismism.ts/tst/query.http | 7 +++++ 4 files changed, 64 insertions(+) create mode 100644 ismism.ts/src/praxic/query.ts create mode 100644 ismism.ts/src/serve.ts create mode 100644 ismism.ts/tst/query.http diff --git a/cli/build.zsh b/cli/build.zsh index cbd5037..da3499d 100644 --- a/cli/build.zsh +++ b/cli/build.zsh @@ -5,4 +5,5 @@ rm -rf ui cd ismism.ts +deno bundle src/serve.ts ../cli/serve.js deno bundle cli/dbreset.ts ../cli/dbreset.js diff --git a/ismism.ts/src/praxic/query.ts b/ismism.ts/src/praxic/query.ts new file mode 100644 index 0000000..d1667a5 --- /dev/null +++ b/ismism.ts/src/praxic/query.ts @@ -0,0 +1,8 @@ +import { DocR } from "../db.ts" + +export async function query( + f: string, + p: URLSearchParams, +): DocR { + return null +} diff --git a/ismism.ts/src/serve.ts b/ismism.ts/src/serve.ts new file mode 100644 index 0000000..b2cd502 --- /dev/null +++ b/ismism.ts/src/serve.ts @@ -0,0 +1,48 @@ +import { serve } from "https://deno.land/std@0.173.0/http/server.ts" +import { jwk_load } from "./ontic/jwt.ts" +import { utc_short } from "./ontic/utc.ts" +import { query } from "./praxic/query.ts" + +let etag = `W/"${Date.now()}"` + +function log( + utc: number, + msg: string, + status?: number, +) { + console.log(`${utc_short(utc)} - ${msg} - ${status ?? ""} - ${etag}`) +} + +async function route( + req: Request +): Promise { + const url = new URL(req.url) + const [_, r, f] = url.pathname.split("/") + const t = Date.now() + switch (r) { + case "quit": { + log(t, "quit") + Deno.exit(); break + } case "update": { + etag = `W/"${t}"` + log(t, "etag updated") + return new Response(null, { status: 200, headers: { etag } }) + } case "q": { + if (req.headers.get("if-none-match")?.includes(etag)) { + log(t, `${f}${url.search}`, 304) + return new Response(null, { status: 304, headers: { etag } }) + } + log(t, `${f}${url.search}`, 200) + return new Response( + JSON.stringify(await query(f, url.searchParams)), { + status: 200, + headers: { etag } + }) + + } + } + return new Response(null, { status: 400 }) +} + +await jwk_load() +serve(route, { port: 728 }) diff --git a/ismism.ts/tst/query.http b/ismism.ts/tst/query.http new file mode 100644 index 0000000..f5539bf --- /dev/null +++ b/ismism.ts/tst/query.http @@ -0,0 +1,7 @@ +GET http://localhost:728/quit + +### +GET http://localhost:728/update HTTP/1.1 + +### +GET http://localhost:728/q HTTP/1.1