import { getRequiredEnv, getStdout, type HealthCheckInput, HealthCheckOutput, type IEither, type ITraceable, LogTraceable, TraceUtil, } from "@emprespresso/pengueno"; export class LizCIServer { private constructor( private readonly healthCheckActivity = HealthCheckActivity(healthCheck), private readonly jobHookActivity = JobHookActivity(jobQueuer), private readonly fourOhFourActivity = FourOhFourActivity(), ) {} private async route(req: LogTraceable) { return req.flatMap((req) => { const { item: request } = req; const url = new URL(request.url); if (url.pathname === "/health") { return this.healthCheckActivity.healthCheck(req); } if (url.pathname === "/job") { return this.jobHookActivity.processHook(req); } }); } public async serve(req: Request): Promise { return LogTraceable(req).bimap(TraceUtil.withClassTrace(this)).map( this.route, ); } }