From 3a3fb9c8ab0c798a278f76d40de216fa96f6e2c4 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Wed, 14 May 2025 18:02:34 -0700 Subject: moar --- hooks/server/activity/health.ts | 0 hooks/server/activity/hook.ts | 0 hooks/server/activity/mod.ts | 8 -------- hooks/server/filter/json.ts | 25 ------------------------- hooks/server/filter/method.ts | 22 ---------------------- hooks/server/filter/mod.ts | 18 ------------------ hooks/server/mod.ts | 39 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 39 insertions(+), 73 deletions(-) delete mode 100644 hooks/server/activity/health.ts delete mode 100644 hooks/server/activity/hook.ts delete mode 100644 hooks/server/activity/mod.ts delete mode 100644 hooks/server/filter/json.ts delete mode 100644 hooks/server/filter/method.ts delete mode 100644 hooks/server/filter/mod.ts (limited to 'hooks') diff --git a/hooks/server/activity/health.ts b/hooks/server/activity/health.ts deleted file mode 100644 index e69de29..0000000 diff --git a/hooks/server/activity/hook.ts b/hooks/server/activity/hook.ts deleted file mode 100644 index e69de29..0000000 diff --git a/hooks/server/activity/mod.ts b/hooks/server/activity/mod.ts deleted file mode 100644 index 0dee57b..0000000 --- a/hooks/server/activity/mod.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { RequestFilter } from "../filter/mod.ts"; - -export class r200 extends Response { - public override readonly status = 200; -} - -export interface IActivity extends RequestFilter { -} diff --git a/hooks/server/filter/json.ts b/hooks/server/filter/json.ts deleted file mode 100644 index bcdd3ee..0000000 --- a/hooks/server/filter/json.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Either, type IEither, type Traceable } from "@emprespresso/utils"; -import type { RequestFilter } from "./mod.ts"; - -type JsonTransformer = ( - json: Traceable, -) => IEither; -export const json = ( - jsonTransformer: JsonTransformer, -): RequestFilter => -async (r: Traceable) => { - const { item: request, logger: _logger } = r; - const logger = _logger.addTracer(() => "[jsonVerification]"); - - const getJson = request.json().catch((errReason) => { - const err = "seems to be invalid JSON (>//<) can you fix?"; - logger.warn(err, errReason); - return new Error(err); - }); - return (await Either.fromAsync(getJson)) - .mapRight(r.move).flatMap(jsonTransformer) - .mapLeft((err) => { - logger.warn(err); - return new Response(err.message, { status: 400 }); - }); -}; diff --git a/hooks/server/filter/method.ts b/hooks/server/filter/method.ts deleted file mode 100644 index 07fa5ee..0000000 --- a/hooks/server/filter/method.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Either, type Traceable } from "@liz-ci/utils"; -import type { RequestFilter } from "./mod.ts"; - -type HttpMethod = "POST" | "GET" | "HEAD" | "PUT" | "DELETE"; -export const requireMethod = - (methods: Array): RequestFilter => - (req: Traceable) => { - const { item: request, logger: _logger } = req; - const logger = _logger.addTracer(() => "[aPost]"); - - const { method: _method } = request; - const method = _method; - if (!methods.includes(method)) { - const msg = "that's not how you pet me (â‹Ÿīšâ‹ž)~"; - logger.warn(msg); - return Promise.resolve(Either.left( - new Response(msg + "\n", { status: 405 }), - )); - } - - return Promise.resolve(Either.right(method)); - }; diff --git a/hooks/server/filter/mod.ts b/hooks/server/filter/mod.ts deleted file mode 100644 index bedc678..0000000 --- a/hooks/server/filter/mod.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { - IEither, - ITraceable, - ITraceableLogger, - TraceableLogger, -} from "@liz-ci/utils"; - -export interface RequestFilter< - T, - L extends ITraceableLogger = TraceableLogger, - RIn = ITraceable, - Err = Response, -> { - (req: RIn): Promise>; -} - -export * from "./method.ts"; -export * from "./json.ts"; diff --git a/hooks/server/mod.ts b/hooks/server/mod.ts index e69de29..c484af4 100644 --- a/hooks/server/mod.ts +++ b/hooks/server/mod.ts @@ -0,0 +1,39 @@ +import { Either, type ITraceable } from "@emprespresso/pengueno"; + +const healthCheck = async (in: ITraceable<"healthy?", Trace>) => { + return getRequiredEnv("LAMINAR_HOST").flatMap((_host) => Either.fromFailableAsync( + getStdout(in.move(["laminarc", "show-jobs"])) + )) +} + +export class LizCIServer { + private constructor( + private readonly healthCheckActivity = HealthCheckActivity(healthCheck), + private readonly jobHookActivity = JobHookActivity(jobQueuer) + ) {} + + private async route(req: ITraceable) { + return req.flatMap((req) => { + const { logger, item: { method, pathname } } = req; + if (pathname === "/health") { + return this.healthCheckActivity.healthCheck(req); + } + return this.jobHookActivity.processHook(req); + }); + } + + public async serve(req: Request): Promise { + return LogTraceable(req).bimap(TraceUtil.withClassTrace(this)).map(this.route) + } +} +private route( + req: Traceable, +): Traceable> { + return req.flatMap((req) => { + const { logger, item: { method, pathname } } = req; + if (pathname === "/health") { + return this.healthCheckActivity.healthCheck(req); + } + return this.jobHookActivity.processHook(req); + }); +} -- cgit v1.2.3-70-g09d2